この記事では、robocopyコマンドの基本的な使い方から、便利なオプションまで詳しく説明します。
前回の記事: 【PowerShell】xcopyコマンドを使う方法
robocopyとは?
robocopy(Robust File Copyの略)は、Windowsの標準コマンドラインツールの一つで、高度なファイルコピーやフォルダ同期を行うためのツールです。
参考: Robocopy | Microsoft Learn
robocopyの基本構文
robocopy <source> <destination> [<file>] [<options>]
<source>: コピー元のディレクトリ
<destination>: コピー先のディレクトリ
[<file>]: コピーするファイル名(省略可能)
ワイルドカード文字 (* または ?) がサポートされています。
このパラメーターを指定しない場合は、既定値として *.* が使用されます。
[<options>]: 各種オプション(省略可能)
robocopyは以下のように動作します。
コピー元 | コピー先 | 実行動作 |
存在する | 存在する | コピー元でコピー先を上書き |
存在する | 存在しない | コピーする |
存在しない | 存在する | コピー先ファイルを削除する |
robocopyの基本的な使い方
単純なコピー
最も基本的な使い方は、ファイルやディレクトリのコピーです。
以下のコマンドは、C:\sourceディレクトリ内の全ファイルとサブディレクトリをD:\destinationにコピーします。
$source = "C:\source"
$destination = "D:\destination"
robocopy $source $destination
ミラーリングコピー
/mirオプションを使用すると、2つのフォルダを完全に同期できます。
$source = "C:\source"
$destination = "D:\destination"
$robocopyOptions = "/mir"
robocopy $source $destination $robocopyOptions
これにより、C:\sourceに存在せず、D:\destinationに存在するファイルやディレクトリが削除され、C:\sourceとD:\destinationは完全に一致する状態になります。
差分コピー
/xoオプションを使用すると、更新されたファイルのみコピーされます。
$source = "C:\source"
$destination = "D:\destination"
$robocopyOptions = "/xo"
robocopy $source $destination $robocopyOptions
これにより、D:\destinationに既に存在し、更新日時がC:\sourceのファイルと同じか新しいファイルはコピーされません。
ログの出力
/logオプションを使用すると、コピー作業のログをファイルに出力します。
$source = "C:\source"
$destination = "D:\destination"
$robocopyOptions = "/log"
$logfile = "C:\temp\logfile.txt"
robocopy $source $destination $robocopyOptions:$logfile
これにより、コピーのログがC:\temp\logfile.txtに出力されます。
ネットワーク越しのコピー
ネットワーク経由でのコピーも可能です。例えば、\\Server\Shareへのコピーは次のように実行します。
$source = "C:\source"
$destination = "\\Server\Share\Destination"
robocopy $source $destination
実践的な使用例
バックアップスクリプト
毎日自動でバックアップを取るスクリプトを作成する場合は、以下のようにします。
# バックアップ元ディレクトリ
$source = "C:\source"
# バックアップ先ディレクトリ
$destination = "D:\Backup"
# ログファイル
$logfile = "C:\Backup\backup_log.txt"
# robocopyコマンドの実行
robocopy $source $destination /mir /log:$logfile /r:3 /w:10
/r:<n> 失敗したコピーの再試行回数を指定します。n の既定値は 1,000,000 (100 万回の再試行) です。
/w:<n> 再試行間の待ち時間 (秒) を指定します。 n の既定値は 30 (30 秒の待ち時間) です。
このスクリプトをタスクスケジューラに登録しておけば、毎日決まった時間にバックアップが実行されます。
大量ファイルの移動
大量のファイルを別のディレクトリに移動する場合もrobocopyが役立ちます。/movオプションを使用すると、コピー後にソースからファイルが削除されます。
$source = "C:\source"
$destination = "D:\destination"
$robocopyOptions = "/mov"
robocopy $source $destination $robocopyOptions
まとめ
今回は、robocopyコマンドの基本的な使い方から、便利なオプションまで詳しく説明しました。