0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windowsのコピーにまだxcopyを使っている皆さん!robocopyに移行するといいかも!

0
Last updated at Posted at 2026-02-21

Windowsのコピー機能と言えば、みんな大好きxcopy

でもxcopyは弱点をかかえていました。

  • xcopy
    • リトライ機能がない
      • ネットワークが瞬断すると停止
    • 大量ファイルを扱うと異常停止する可能性がある
    • 途中でエラーがあると終了しやすい
    • パス長制限に弱い
    • シングルスレッド

それがrobocopyになった

そんなxcopyの弱点を克服するため、
Windows Vistaからデフォルト実装されたのがrobocopyです。

  • robocopy
    • xcopyより差分比較が高速 (タイムスタンプ+サイズ比較)
    • リトライ機能がある
      • ネットワークが瞬断されても継続
    • 数十万~数百万ファイルを前提とした設計
    • エラーをカウントしながら突き進む (もちろんログは出る)
    • パス長制限に強い
    • 除外フォルダと除外ファイルの設定が柔軟 (/XD, /XFオプション)
    • マルチスレッド機能がある (/MTオプション)
    • ミラーリング機能がある (/MIRオプション)

コピーも高速。大量ファイルの扱いも安定。サーバ間のコピーも安定。
xcopy、今までありがとう。

FastCopy

最強のコピーツールであるFastCopyを知っている人なら、
robocopyの良さが分かりやすいと思います。

速度はFastCopyの方が上みたいですが、
リトライ可能なrobocopyも強いし、何よりバッチに組み込みやすいのが利点。

robocopyの使い方

堅牢だという触れ込みはあるものの、業務に落とし込むことはないかも知れません。
ほとんどの場合は速いxcopyが欲しいだけだと思います。

何も考えずに、これを打てばオッケーです。

robocopy "コピー元" "コピー先" /E /R:0 /W:0 /NJH /NDL /NFL /NJS

除外対象は/XD/XFで適宜入れてください。

robocopy "コピー元" "コピー先" /XD .git /XF *.bak /E /R:0 /W:0 /NJH /NDL /NFL /NJS

オプション説明

必要オプション

  • /E : サブディレクトリを含める

追加オプション

  • /XD : 除外フォルダ指定 (複数指定の場合はスペース区切り) (例:/XD .git node_modules)
  • /XF : 除外ファイル指定 (複数指定の場合はスペース区切り) (例:/XF *.bak *.tmp)

おまじない (高速化)

  • /R:0 : 失敗時のリトライ回数0 (サーバ間でなければ不要)
  • /W:0 : リトライ時の待ち時間0 (サーバ間でなければ不要)
  • /NJH : ログにヘッダ情報を表示しない
  • /NDL : ログにディレクトリ名を表示しない
  • /NFL : ログにファイル名を表示しない
  • /NJS : ログに集計情報を表示しない (欲しいときは外してもいい)

同期機能

  • /MIR : 同期化
    もちろんファイル削除も行うので注意。
    全削除してコピーし直すくらいならこれを使う。
    ただし注意点として、サイズが同じかつコピー先の更新日時が新しいと上書きしないという特性があります(後述)

マルチスレッド機能

  • /MT : マルチスレッド化 (例:/MT:8) (8スレッドが無難)
    小さいファイルが膨大なときに真価を発揮する。
    ログを全部出してファイル一覧とにらめっこしたい場合は外す。
    順次実行じゃないとファイル一覧が順番に出ないので。

robocopyがコピー先にある「新しいファイル」を上書きするかどうかのまとめ

  • コピー先の更新日時は新しいが、サイズが違う : 上書きコピーされる
  • コピー先の更新日時が新しい、かつサイズが全く同じ場合 (奇跡) : 上書きコピーされない
  • /MIRも上記と同じ挙動 (奇跡が起きると完全一致しない)
  • /ISをつければ問答無用で上書きコピーされる (でも差分コピーではなくなるので遅い)
  • 「100%の同期」は/MIR /ISが必要 (コピー先をいじらなければもちろん/MIRでOK)

さいごに

"robocopy.bat"という名前のバッチを作らないように気を付けてください。
robocopyを呼ぼうとして同名の自分を呼んでしまい、再帰呼び出しになります。
一回やってしまった。別にマシンが落ちたりはしないけど。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?