ROBOCOPY(高度なコピー)

にメンテナンス済み

フォルダ単位のバックアップやミラーリングを行いたいとき、copy や xcopy では機能が不足する場合があります。

ROBOCOPY(Robust File Copy)は、Windows に標準搭載されている高機能なファイルコピーコマンドです。ミラーリング、差分コピー、再試行制御、ログ出力など、堅牢なファイルコピーを実現する豊富な機能を備えています。

この記事では、ROBOCOPY コマンドの基本から実践的なバックアップ運用まで、具体的なサンプルコードを交えて解説します。

フォルダを丸ごとコピーしたいだけなら robocopy コピー元 コピー先 /E が基本形です。コピー先を完全に同期したい場合は /MIR、実行結果の判定は終了コードの節を参照してください。

ROBOCOPY の基本構文

ROBOCOPY コピー元 コピー先 [ファイル] [オプション]
要素説明
コピー元コピー元のフォルダパス
コピー先コピー先のフォルダパス
ファイルコピーするファイル名(ワイルドカード可、省略時は *.*)
オプション動作を制御するオプション

基本的な使用例

robocopy C:\Source D:\Backup
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>robocopy C:\Source D:\Backup
-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性カーネル ファイル コピー
-------------------------------------------------------------------------------
開始: 2026年3月11日 10:00:00
コピー元 : C:\Source\
コピー先 : D:\Backup\
ファイル: .
合計 コピー済み スキップ 不一致 失敗 その他
ディレクトリ: 3 1 2 0 0 0
ファイル: 5 5 0 0 0 0
C:\users\user>

主要オプション一覧

コピーオプション

オプション説明
/E空のフォルダを含め、サブフォルダをコピーする
/Sサブフォルダをコピーする(空フォルダは除く)
/MIRミラーリング(コピー元にないファイルは削除)
/PURGEコピー元に存在しないファイルを削除
/MOVファイルを移動(コピー後に元ファイルを削除)
/MOVEファイルとフォルダを移動
/Z再開可能モードでコピー(中断してもその続きから再開できる)
/MT:nn 個のスレッドで並列コピー(1〜128、省略時は 8)
/COPY:コピーフラグコピーする属性を指定(D:データ, A:属性, T:タイムスタンプ, S:セキュリティ)

選択オプション

オプション説明
/XF ファイル指定したファイルを除外
/XD フォルダ指定したフォルダを除外
/XO古いファイルを除外(差分コピー)
/MAXAGE:nn 日より古いファイルを除外
/MINAGE:nn 日より新しいファイルを除外
/MAX:nn バイトより大きいファイルを除外
/L実行せず、対象だけを一覧表示

再試行オプション

オプション説明
/R:n失敗時の再試行回数(既定値: 1,000,000)
/W:n再試行間隔(秒、既定値: 30)

ログオプション

オプション説明
/LOG:ファイルログをファイルに出力(上書き)
/LOG+:ファイルログをファイルに追記
/TEEコンソールとログファイルの両方に出力
/NP進捗パーセント表示を抑制
/NFLファイル名のログ出力を抑制
/NDLディレクトリ名のログ出力を抑制
/V詳細出力
/R オプションの既定値に注意

/R オプションの既定値は 1,000,000 回です。ネットワーク上のファイルコピーで接続が切れた場合、非常に長い時間再試行し続ける可能性があります。実運用では必ず /R:3 のように明示的に設定してください。

パスの末尾の円記号とダブルクォートに注意

パスを " で囲んだとき、末尾が \" になると、\ が " のエスケープとして解釈され、引数が正しく渡りません。"C:\My Folder\" のように書かず、"C:\My Folder" のように末尾の \ を付けないでください。

サブフォルダを含めてコピーする(/E)

/E オプションを使用すると、サブフォルダ(空のフォルダを含む)を再帰的にコピーします。

robocopy C:\Source D:\Backup /E

ミラーリング(/MIR)

/MIR オプションは、コピー元のフォルダ構造をコピー先に完全に再現します(/E と /PURGE を合わせた動作です)。コピー先にだけ存在するファイルは削除されます。

robocopy C:\Source D:\Backup /MIR
/MIR オプションの注意点

/MIR はコピー先にだけ存在するファイルやフォルダを削除します。コピー先のパスを間違えると、意図しないファイルが削除される可能性があります。初回は必ず /L オプションでテスト実行してください。

テスト実行(/L)

/L オプションを使用すると、実際にはコピーを行わず、どのファイルがコピー・削除されるかだけを表示します。

robocopy C:\Source D:\Backup /MIR /L
チェック

本番のバックアップを実行する前に、必ず /L オプションでテスト実行することをお勧めします。特に /MIR や /PURGE を使用する場合は、想定外の削除を防ぐことができます。

高速化する(/MT)

/MT:n を指定すると、複数のファイルを並列にコピーします。小さなファイルが大量にある場合に特に効果的です。

robocopy C:\Source D:\Backup /E /MT:16
/MT 使用時のログ

/MT 使用中は複数のスレッドが同時にログを書き込むため、ログの行の順序が前後することがあります。

ログ出力

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 バックアップの設定
rem ※ %DATE% の形式は地域設定に依存します。日本語環境(yyyy/mm/dd)の例です
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% LSS 8 (
    echo バックアップが正常に完了しました。
) ELSE (
    echo エラーが発生しました。ログを確認してください。
)

endlocal

ROBOCOPY の終了コード

ROBOCOPY は独自の終了コードを返します。一般的なコマンドとは異なり、0 以外でも正常な場合があります。終了コードは次のビットの組み合わせです。

値意味
1ファイルが 1 つ以上正常にコピーされた
2コピー先に余分なファイルやフォルダが存在した
4不一致のファイルやフォルダが検出された
8一部のファイルをコピーできなかった(コピーエラー)
16致命的なエラー(パス不正・アクセス拒否・構文エラー等で続行できなかった)

たとえば終了コード 3 は「1(コピーした)+ 2(余分なファイルがあった)」を意味します。0 は「コピーするものがなかった(すべて同一)」です。

終了コードの判定

終了コードが 0〜7 であれば失敗ではなく、8 以上 の場合はエラーとして扱います。バッチファイルで判定する際は IF %ERRORLEVEL% LSS 8 のように記述します。/MIR で余分なファイルが削除された場合は 2 を含む値になりますが、これもエラーではありません。

ROBOCOPY と XCOPY の違い

特徴ROBOCOPYXCOPY
ミラーリング○(/MIR)×
再試行制御○(/R, /W)×
ログ出力○(/LOG, /TEE)×
再開可能モード○(/Z)○(/Z)
マルチスレッド○(/MT)×
差分コピー○(/XO)○(/D)
ネットワーク対応優れた耐障害性基本的な対応
終了コード詳細(0〜16)基本的(0〜5)

XCOPY は Microsoft により非推奨とされており、新しく作るバッチファイルでは ROBOCOPY の利用が推奨されています。

まとめ

この記事では、ROBOCOPY コマンドの使い方について解説しました。

ROBOCOPY は Windows に標準搭載されている強力なファイルコピーツールです。特にバックアップ運用では、ミラーリング・ログ出力・再試行制御の組み合わせにより、堅牢なバックアップ体制を構築できます。

関連記事

練習問題

練習問題

ROBOCOPY の終了コードの判定について、一般的に正しい説明はどれですか?

回答がサーバーに送信されることはありません
#コマンドプロンプト #バッチファイル #ROBOCOPY #バックアップ #ファイル操作