ROBOCOPY(高度なコピー)
フォルダ単位のバックアップやミラーリングを行いたいとき、copy や xcopy では機能が不足する場合があります。
ROBOCOPY(Robust File Copy)は、Windows に標準搭載されている高機能なファイルコピーコマンドです。ミラーリング、差分コピー、再試行制御、ログ出力など、堅牢なファイルコピーを実現する豊富な機能を備えています。
この記事では、ROBOCOPY コマンドの基本から実践的なバックアップ運用まで、具体的なサンプルコードを交えて解説します。
ROBOCOPY の基本構文
ROBOCOPY コピー元 コピー先 [ファイル] [オプション]
| 要素 | 説明 |
|---|---|
| コピー元 | コピー元のフォルダパス |
| コピー先 | コピー先のフォルダパス |
| ファイル | コピーするファイル名(ワイルドカード可、省略時は *.*) |
| オプション | 動作を制御するオプション |
基本的な使用例
robocopy C:\Source D:\Backup
主要オプション一覧
コピーオプション
| オプション | 説明 |
|---|---|
/E | 空のフォルダを含め、サブフォルダをコピーする |
/S | サブフォルダをコピーする(空フォルダは除く) |
/MIR | ミラーリング(コピー元にないファイルは削除) |
/PURGE | コピー元に存在しないファイルを削除 |
/MOV | ファイルを移動(コピー後に元ファイルを削除) |
/MOVE | ファイルとフォルダを移動 |
/Z | 再開可能モードでコピー |
/COPY:コピーフラグ | コピーする属性を指定(D:データ, A:属性, T:タイムスタンプ, S:セキュリティ) |
選択オプション
| オプション | 説明 |
|---|---|
/XF ファイル | 指定したファイルを除外 |
/XD フォルダ | 指定したフォルダを除外 |
/XO | 古いファイルを除外(差分コピー) |
/MAXAGE:n | n 日より古いファイルを除外 |
/MINAGE:n | n 日より新しいファイルを除外 |
/MAX:n | n バイトより大きいファイルを除外 |
再試行オプション
| オプション | 説明 |
|---|---|
/R:n | 失敗時の再試行回数(既定値: 1,000,000) |
/W:n | 再試行間隔(秒、既定値: 30) |
ログオプション
| オプション | 説明 |
|---|---|
/LOG:ファイル | ログをファイルに出力(上書き) |
/LOG+:ファイル | ログをファイルに追記 |
/TEE | コンソールとログファイルの両方に出力 |
/NP | 進捗パーセント表示を抑制 |
/NFL | ファイル名のログ出力を抑制 |
/NDL | ディレクトリ名のログ出力を抑制 |
/V | 詳細出力 |
/R オプションの既定値は 1,000,000
回です。ネットワーク上のファイルコピーで接続が切れた場合、非常に長い時間再試行し続ける可能性があります。実運用では必ず
/R:3 のように明示的に設定してください。
サブフォルダを含めてコピーする(/E)
/E オプションを使用すると、サブフォルダ(空のフォルダを含む)を再帰的にコピーします。
robocopy C:\Source D:\Backup /E
ミラーリング(/MIR)
/MIR オプションは、コピー元のフォルダ構造をコピー先に完全に再現します。コピー先にだけ存在するファイルは削除されます。
robocopy C:\Source D:\Backup /MIR
/MIR
はコピー先にだけ存在するファイルやフォルダを削除します。コピー先のパスを間違えると、意図しないファイルが削除される可能性があります。初回は必ず
/L オプションでテスト実行してください。
テスト実行(/L)
/L オプションを使用すると、実際にはコピーを行わず、どのファイルがコピー・削除されるかだけを表示します。
robocopy C:\Source D:\Backup /MIR /L
本番のバックアップを実行する前に、必ず /L オプションでテスト実行することをお勧めします。特に
/MIR や /PURGE を使用する場合は、想定外の削除を防ぐことができます。
ログ出力
ROBOCOPY の実行結果をログファイルに記録する方法です。
robocopy C:\Source D:\Backup /E /LOG:"C:\Logs\backup.log" /TEE /NP
| オプションの意味 | 説明 |
|---|---|
/LOG: | ログファイルを指定(上書き) |
/TEE | コンソールとログの両方に表示 |
/NP | 進捗パーセント表示を省略(ログがすっきり) |
追記モードで記録した場合は /LOG+: を使用します。
robocopy C:\Source D:\Backup /E /LOG+:"C:\Logs\backup.log" /TEE /NP
特定のファイルやフォルダを除外する
ファイルの除外(/XF)
robocopy C:\Source D:\Backup /E /XF *.tmp *.log
フォルダの除外(/XD)
robocopy C:\Source D:\Backup /E /XD "C:\Source\temp" "C:\Source\.git"
実践例:自動バックアップバッチ
ROBOCOPY を使用した実用的なバックアップバッチファイルの例です。
@echo off
setlocal
rem バックアップの設定
set SOURCE=C:\Users\user\Documents
set DEST=D:\Backup\Documents
set LOGFILE=D:\Backup\Logs\backup_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.log
rem ログフォルダが存在しない場合は作成
if not exist "D:\Backup\Logs" mkdir "D:\Backup\Logs"
echo バックアップを開始します...
echo コピー元: %SOURCE%
echo コピー先: %DEST%
robocopy "%SOURCE%" "%DEST%" /MIR /R:3 /W:5 /LOG+:"%LOGFILE%" /TEE /NP /XD ".git" "node_modules"
rem 終了コードの確認
IF %ERRORLEVEL% LEQ 3 (
echo バックアップが正常に完了しました。
) ELSE (
echo エラーが発生しました。ログを確認してください。
)
endlocal
ROBOCOPY の終了コード
ROBOCOPY は独自の終了コードを返します。一般的なコマンドとは異なり、0 以外でも正常な場合があります。
| 終了コード | 意味 |
|---|---|
| 0 | コピーなし(ファイルはすべて同一) |
| 1 | ファイルが正常にコピーされた |
| 2 | 余分なファイルがコピー先に存在 |
| 3 | コピーされたファイル+余分なファイルあり |
| 8 | いくつかのファイルがコピーできなかった |
| 16 | 致命的なエラー(コピーが実行されなかった) |
終了コードが 0〜3 であれば正常、8 以上
の場合はエラーとして扱うのが一般的です。バッチファイルで判定する際は IF %ERRORLEVEL% LEQ 3
のように記述します。
ROBOCOPY と XCOPY の違い
| 特徴 | ROBOCOPY | XCOPY |
|---|---|---|
| ミラーリング | ○(/MIR) | × |
| 再試行制御 | ○(/R, /W) | × |
| ログ出力 | ○(/LOG, /TEE) | × |
| 再開可能モード | ○(/Z) | × |
| 差分コピー | ○(/XO) | ○(/D) |
| ネットワーク対応 | 優れた耐障害性 | 基本的な対応 |
| 終了コード | 詳細(0〜16) | 基本的(0〜5) |
まとめ
この記事では、ROBOCOPY コマンドの使い方について解説しました。
ROBOCOPY は Windows に標準搭載されている強力なファイルコピーツールです。特にバックアップ運用では、ミラーリング・ログ出力・再試行制御の組み合わせにより、堅牢なバックアップ体制を構築できます。