【Windows機能】robocopyの使い方|/Lで確認して差分コピーする手順
検証状況:Windows 11 Home 25H2(OSビルド26200.9457)・管理者権限なしで実施した検証資料をもとに、コピー前後のフォルダ画面と実コピーのログ集計を確認しています。/L実行後の無変更確認と終了コード3は実行報告書の記録に基づきます。コマンドプロンプトの実行画面は未収録で、再試行・通信障害・アクセス拒否は未検証です。
この記事について
フォルダをコピーし直すとき、「追加・変更したファイルを反映したい。でも、コピー先にだけ置いたファイルは残したい」ということがあります。robocopyなら、コピー予定を先に確認してから、必要なファイルをコピーできます。
この記事では、/Lで確認 → /Eでコピー → ログと終了コードを確認の順に紹介します。例はWindowsのコマンドプロンプト(cmd.exe)に直接入力するものです。PowerShellの入力例ではありません。
この記事でわかること
- robocopyでコピーされるファイルと、上書き時の注意点
- /Lでコピー予定を確認し、/Eでサブフォルダもコピーする手順
- ログを保存して結果を確認する方法
- 終了コードを使った失敗の見分け方
robocopyとは?
robocopyは、コピー元とコピー先のフォルダを指定して使います。同じと判断されたファイルは通常スキップされ、コピー先にないファイルや、サイズ・更新日時などが異なるファイルがコピー対象になります。この記事では、このように差のあるファイルを反映する使い方を「差分コピー」と呼びます。
実行前に確認してください
この記事の /E を使う例は、コピー先にだけあるファイルを削除しません。ただし、同名の既存ファイルは確認なしで上書きされることがあり、コピー先のほうが新しい場合も対象になります。
過去の版を残すバックアップではなく、ファイル内容のハッシュ比較・検証もしません。重要なファイルは別に保管し、まず不要なファイルで試してください。
サイズや更新日時が同じでも、内容まで同じとは限りません。また、/E は空のフォルダを含むサブフォルダのコピー指定です。/E 自体が「変更されたものだけ」を選ぶ指定というわけではありません。

なお、/MIR や /PURGE を追加すると、コピー先にだけあるファイルやフォルダの削除につながります。/MOV や /MOVE はコピー後に元のファイルなどを削除する指定です。これらもこの記事の例には追加しないでください。Microsoft Learnのrobocopy仕様でも、コピー・選択・削除のオプションは分けて説明されています。
コピー先の新しいファイルを残したい場合に使う /XO は、コピー元のほうが古いファイルを除外します。ただし、既存ファイルを一切上書きしない指定ではありません。目的に合うかを確認してから使いましょう。
練習用フォルダを用意する
エクスプローラーで、次の3つのフォルダを用意します。いずれも説明用のパスなので、実際に使う場所に合わせて変更してください。コピー元・コピー先・ログ保存先は互いの中に入れず、別々にします。
- コピー元:C:\RobocopyPractice\source
- コピー先:C:\RobocopyPractice\destination
- ログ保存先:C:\RobocopyPractice\logs
この場所に作成できない場合は、自分が書き込める別の練習用フォルダを使い、以降のパスをすべて置き換えてください。ログ保存先も、実行前に作成しておきます。
- sourceに、小さなテキストファイルと空のサブフォルダを置く
- destinationには、sourceにない別名のテキストファイルを置く
- 両方のフォルダを開き、コピー元とコピー先を取り違えていないか確認する
すべて不要なファイルを使います。ジャンクションやシンボリックリンクなど、別の場所につながるリンクは練習用フォルダに入れないでください。ファイルを編集中のアプリも閉じておきましょう。
次の画面は、通常ファイル3つの差を確認するために用意した実機の練習データです。sourceにはdata.txt・new.txt・same.txt、destinationには古いdata.txt・memo.txt・same.txtを置いています。same.txtは両方で同じ内容・更新日時にそろえました。画像はクリックすると拡大できます。


エクスプローラーの「1 KB」は丸め表示です。この表示だけで、ファイルサイズや内容が同じとは判断しないでください。
まず /L でコピー予定を確認する
スタートメニューで「コマンドプロンプト」を開き、次を1行ずつ実行します。最初の2つのパスは、左がコピー元、右がコピー先です。空白を含むパスにも対応できるよう、引用符で囲んでいます。
/L はファイルのコピー・削除・タイムスタンプ更新を行わず、予定を表示します。ただし、下の例では /LOG によってpreview.logを作成・上書きします。「何も書き込まない」という意味ではありません。
robocopy "C:\RobocopyPractice\source" "C:\RobocopyPractice\destination" /E /L /R:2 /W:2 /LOG:"C:\RobocopyPractice\logs\preview.log" /TEE
set "RC=%ERRORLEVEL%"
echo Robocopy exit code: %RC%2行目はrobocopyの終了コードをRCに保存し、3行目で表示しています。robocopyの直後に保存することで、別のコマンドの結果と取り違えるのを避けます。行を & でつなげたり、全体を丸括弧で囲んだりせず、そのまま1行ずつ実行してください。
今回使うオプション
- /E:空のフォルダを含めて、サブフォルダも対象にする
- /L:実コピーせず、予定だけ表示する
- /R:2 /W:2:コピー失敗時の再試行を2回、再試行までの待ち時間を2秒にする
- /LOG:指定したログファイルへ結果を書く。同名ログがあれば上書きする
- /TEE:ログファイルと画面の両方へ出力する
Microsoftの既定値は /R が1,000,000回、/W が30秒です。意図せず再試行を続けないよう、この例では両方を明示しています。/R と /W は、再試行の回数・間隔を指定するものです。コピー時間やファイル数、接続状況なども関係するので、処理全体が一定の秒数で終わる保証にはなりません。
プレビューで見るところ
- 表示されたコピー元・コピー先が正しいか
- 新規ファイルや上書きされるファイルが、意図した対象になっているか
- コピー先にだけあるファイルが表示されても、削除予定だと思い込んでいないか
- アクセス拒否やパスが見つからないエラーが出ていないか
preview.logも開いて確認します。/L の表示や終了コードはあくまでプレビューの結果です。コピーが成功した証拠にはならず、その後ファイルが変われば実行時の対象も変わります。
実機検証の実行報告では、/L実行前後でコピー先のファイル名・内容・サイズ・更新日時が変わっていないことを比較しています。/Lの集計に「コピー2」と表示されても、これはコピー予定の件数であり、実際に書き込んだ件数ではありません。
/L を外して実際にコピーする
プレビューでパスと対象を確認できたら、次を1行ずつ実行します。ここからはファイルを書き込み、同名ファイルを上書きする可能性があります。変えた点は /L を外したことと、ログ名をcopy.logにしたことです。
robocopy "C:\RobocopyPractice\source" "C:\RobocopyPractice\destination" /E /R:2 /W:2 /LOG:"C:\RobocopyPractice\logs\copy.log" /TEE
set "RC=%ERRORLEVEL%"
echo Robocopy exit code: %RC%完了したらdestinationを開き、sourceのファイルと空のサブフォルダが入り、destinationにだけ置いたファイルも残っているかを確かめます。さらにsourceへ不要なテキストファイルを追加する・編集するなどして、もう一度 /L から試すと、コピー予定の変化を確認できます。
実機例のコピー先は次の状態になりました。new.txtが追加され、data.txtの更新日時がコピー元と同じになり、コピー先だけのmemo.txtも残っています。

ログと終了コードで結果を確認する
ログは最後の集計とエラーを見る
実行後はcopy.logを開き、末尾の集計でコピーされた件数・スキップされた件数・失敗した件数などを確認します。エラーがあれば、その前後のファイル名やパスも見ましょう。表示の言語や項目名は環境によって異なります。

これは実コピー後のログ抜粋です。ファイル合計3件のうちコピー2件、スキップ1件、失敗0件で、コピー先だけのmemo.txtはExtras 1件として表示されています。/Lの予定表示とは区別して確認しましょう。
/LOG は同名ログを上書きします。前回分も残したい場合は、実行前にログを別名で保管するか、追記する /LOG+ を使います。追記では複数回の結果が並ぶため、どの実行の記録か確認してください。
0以外でも、すべてが失敗ではない
robocopyでは、8以上がコピー処理の失敗を含む状態です。0〜7はこの失敗判定には該当しませんが、すべて同じ結果ではありません。Microsoftの終了コード一覧では、例えば次のように区別されています。
- 0:この実行ではファイルをコピーしておらず、失敗や不一致もない
- 1:ファイルをコピーした
- 2:コピー先にだけある項目があり、コピーはしていない
- 3:ファイルをコピーし、コピー先にだけある項目もある
- 5〜7:不一致を含む状態。ログで該当する項目を確認する
- 8以上:失敗を含む。ログを確認し、原因を解消してから再試行する
今回のようにコピー先だけのファイルを残す場合、2や3になることがあります。数値が0ではないという理由だけで失敗にせず、予定していた状態とログを照らし合わせましょう。反対に、0〜7でも内容の完全一致や復元可能性が保証されたわけではありません。
この実機例の実行報告では、/Lと実コピーの終了コードはいずれも3でした。コピー先だけのmemo.txtがあるため、3という値だけを見て失敗とは判断しません。掲載したログ画像に終了コードそのものは写っていないため、この数値は実行報告に基づく記録です。
BATに組み込む場合も、robocopyの直後に終了コードを取得し、8以上かどうかで失敗を判定します。if errorlevel 1 は「1以上」を意味するため、robocopyの失敗判定としてそのまま使うと、コピーできた場合も拾ってしまいます。ifの仕様も確認してください。
まとめ
robocopyを使うときは、次の順で確認しましょう。
- コピー元・コピー先・ログ保存先を確認する
- /Lでコピー予定を確認する
- 上書きしてよいことを確認してから /L を外す
- 実行後にファイル・ログ・終了コードを確認する
コピー先だけのファイルが残っても、同名ファイルは上書きされる場合があります。まずは小さな練習用フォルダで試し、実データに使う前にコピーの方針を決めておきましょう。
バッチファイルとしてまとめる前の基本は、BATファイルでできること・できないことと注意点で紹介しています。変数や条件分岐も使いたい方は、バッチファイルの基本コマンド一覧も参考にしてください。
サイトアイコン-2-150x150.png)