この記事では、robocopyコマンドの基本的な使い方から、便利なオプションまで詳しく説明します。
前回の記事: 【PowerShell】xcopyコマンドを使う方法
関連記事: ChatGPTでPowerShellコードを作る方法|初心者向けに実例で解説
robocopyとは?
robocopy(Robust File Copyの略)は、Windowsの標準コマンドラインツールの一つで、高度なファイルコピーやフォルダ同期を行うためのツールです。
参考: Robocopy | Microsoft Learn
robocopyの基本構文
robocopy <source> <destination> [<file>] [<options>]
<source>: コピー元のディレクトリ
<destination>: コピー先のディレクトリ
[<file>]: コピーするファイル名(省略可能)
ワイルドカード文字 (* または ?) がサポートされています。
このパラメーターを指定しない場合は、既定値として *.* が使用されます。
[<options>]: 各種オプション(省略可能)
Robocopyは、オプションを指定しない場合、コピー元フォルダ直下のファイルをコピーします。サブフォルダも含めてコピーする場合は /S または /E を指定します。空のサブフォルダもコピーしたい場合は /E を使用します。
robocopyは以下のように動作します。
| コピー元 | コピー先 | 実行動作 |
| 存在する | 存在する | 更新日時やファイルサイズなどを比較し、必要に応じてコピーする |
| 存在する | 存在しない | コピーする |
| 存在しない | 存在する | 通常は削除しない |
robocopyの基本的な使い方
単純なコピー
最も基本的な使い方は、ファイルやディレクトリのコピーです。
以下のコマンドは、C:\sourceディレクトリ内の全ファイルとサブディレクトリをD:\destinationにコピーします。
$source = "C:\source"
$destination = "D:\destination"
# サブフォルダも含めてコピーする
robocopy $source $destination /E
ミラーリングコピー
/MIR オプションを使用すると、コピー元のフォルダ構成をコピー先にミラーリングできます。コピー元に存在しないファイルやフォルダは、コピー先から削除されます。
注意: /MIR はコピー先のファイルを削除する場合があります。大切なデータがあるフォルダに実行する前に、コピー元とコピー先のパスを必ず確認してください。
$source = "C:\source"
$destination = "D:\destination"
# コピー元とコピー先をミラーリングする
robocopy $source $destination /MIR
差分コピー
/XO オプションを指定すると、コピー元のファイルがコピー先のファイルより古い場合、そのファイルをコピー対象から除外します。
コピー元のほうが新しいファイルや、コピー先に存在しないファイルは、通常のコピー対象になります。
$source = "C:\source"
$destination = "D:\destination"
# コピー元のほうが古いファイルはコピーしない
robocopy $source $destination /XO
ログの出力
/LOG: オプションを使用すると、Robocopyの実行結果をログファイルに保存できます。
上記の例では、C:\temp\logfile.txt にログを出力します。ログファイルを保存するフォルダが存在しない場合は、事前に作成してください。
既存のログファイルに追記したい場合は、/LOG+: を使用します。
$source = "C:\source"
$destination = "D:\destination"
$logfile = "C:\temp\logfile.txt"
# ログを出力しながらコピーする
robocopy $source $destination /E "/LOG:$logfile"
ネットワーク越しのコピー
ネットワーク経由でのコピーも可能です。例えば、\\Server\Shareへのコピーは次のように実行します。
$source = "C:\source"
$destination = "\\Server\Share\Destination"
robocopy $source $destination
実践的な使用例
バックアップスクリプト
この例では /MIR を使用しているため、コピー元に存在しないファイルはバックアップ先から削除されます。世代管理を行いたい場合や、過去のバックアップを残したい場合は、別のバックアップ方式を検討してください。
# バックアップ元
$source = "C:\source"
# バックアップ先
$destination = "D:\Backup"
# ログファイル
$logfile = "C:\Backup\backup_log.txt"
# バックアップを実行
robocopy $source $destination /MIR /R:3 /W:10 "/LOG:$logfile"
ファイルの移動
/MOV オプションを指定すると、コピーが完了したファイルをコピー元から削除します。ファイルだけでなくディレクトリも移動対象にする場合は /MOVE を使用します。
コピー元からファイルが削除されるため、実行前に移動先と移動元を確認してください。
$source = "C:\source"
$destination = "D:\destination"
# ファイルをコピー先に移動する
robocopy $source $destination /MOV
まとめ
今回は、robocopyコマンドの基本的な使い方から、便利なオプションまで詳しく説明しました。
バックアップを毎日自動実行したい場合はこちら: PowerShellでバックアップを自動化する方法|タスクスケジューラで定期実行
