robocopyコマンドで高速にファイルをコピーするためのテクニック

robocopyコマンドで高速にファイルをコピーするためのテクニック

Windows環境でファイルをコピーする場合、ファイルをドラッグ&ドロップするなど、GUI画面でコピーすることが大半ですが、たくさんのファイルをコピーする場合は、GUIよりもrobocopyなどのコマンドを使った方が高速にコピーできます。

さらに、環境に応じたオプションを指定することで、より高速にコピーできるようになります。

そこでここでは、Windows 10のrobocopyコマンドで、高速化に役立つオプションや、高速にコピーするための実行方法について紹介します。

robocopyコマンドで、より高速にコピーしたい場合の参考になれば幸いです。

robocopyコマンドの実行結果をリターンコードで判定する方法
ここでは、Windowsのrobocopyコマンドが実行結果に応じてどのようなリターンコードを返すのかを解説します。

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
Windows 10 Pro 64bit20H2

robocopyコマンドの使い方

robocopyコマンドの基本的な使い方は、コピー元とコピー先とファイルを指定してコピーを行います。

> robocopy コピー元 コピー先 [ファイル [ファイル]...] [オプション]

コピーするファイルのデフォルトは「*.*」(すべてのファイル)です。

高速化に有効なオプション

/Z

「/z」オプションを利用すると、ファイルコピーの途中で意図せず中断された場合、コピーが再開されたときに、コピーの途中から再開することができます。

大容量ファイルを細い回線でコピーするときに有効ですが、パフォーマンスは若干落ちるようです。

/MT:

「/MT」オプションを利用すると、ファイルをコピーするときのスレッド数を増やすことができます。

使い方は「/MT:<スレッド数>」と指定します。

デフォルトは「8」スレッドで実行されており、1~128の値を任意で指定することができますが、クライアントPC環境ではスレッド数を変えても、効果はあまりないようです。

クライアントPC環境でコピー速度を上げたい場合は、後述しているrobocopyコマンドを並列実行するほうが効果は高いでしょう。

/IPG:

「/IPG」オプションを利用すると、転送パケットごとに指定した間隔でウェイトを掛けることができ、ファイルコピーに使用されるネットワーク帯域を制限したいときに有効です。

使い方は「/IPG:<ミリ秒>」と指定します。

/COPY、/DCOPY

Windowsの標準ファイルシステムであるNTFS上のファイルやフォルダーには、データ以外にもさまざまな情報が設定されています。

それらの情報をコピーするかを「/COPY」「/DCOPY」オプションで指定できます。

不要な情報をコピーしないようにすることで、若干の高速化が期待できます。

/COPY:

コピーするファイルの情報を指定するときは「/COPY」オプションを使用し、デフォルトでは「データ」「属性」「タイムスタンプ」がコピーされます。( /COPY:DAT)

フラグ説明
Dデータ
A属性
Tタイムスタンプ
Sセキュリティ(NTFS ACL)
O所有者情報
U監査情報

すべての情報をコピーしたい場合は「/COPY:DATSOU」とするか「/COPYALL」を指定します。

/DCOPY:

コピーするフォルダーの情報を指定するときは「/DCOPY」オプションを使用し、デフォルトでは「データ」「属性」がコピーされます。( /DCOPY:DA)

フラグ説明
Dデータ
A属性
Tタイムスタンプ

/COMPRESS

2021年1月10日追記:

Windows 10バージョン2004以降で、ファイル転送時にデータを圧縮する「/COMPRESS」オプションが利用できるらしく、私が普段利用しているWindows 10バージョン20H2でも、コマンドのヘルプにCOMPRESSオプションの記述があります。

robocopyコマンドで高速にファイルをコピーするためのテクニック

実際にこのオプションの有効性を検証した方のページを拝見すると、圧縮効果の出やすいテキスト形式データなどであれば、場合によってはコピー時間を数分の一まで短縮できるようです。

なお、このオプションが機能するのは、コピー先もWindows 10バージョン2004以降(もしくは、Windows Serverの同バージョン以降)が必要のようです。

/FFT

フォルダーを同期するときなどでは、robocopyコマンドはファイルの差異を更新時刻やファイルサイズで判断していますが、NASなどの他のファイルシステムとの間でファイルをコピーする場合に、同一ファイルであるにもかかわらず、更新時刻が一致しないという問題が発生する可能性があります。

そんなときは「/FFT」オプションを利用することで、2秒以内の誤差や夏時間の1時間の時差を無視して、時刻情報は一致していると見なすことができます。

Windows以外のNASなどとフォルダーを同期するときに指定しておけば、余計なコピー処理の発生を防ぐことができます。

/R: /W:

robocopyコマンドでは、デフォルトでファイルのコピーに失敗すると再試行してくれ、デフォルトの再試行回数は「1,000,000回」で、再試行と再試行の間の待機時間は「30 秒」となっています。

ですが、再試行でコピーに成功することは稀で、ほとんどの環境では再試行が繰り返されることになります。

そこで、再試行回数は1回「/R:1」に設定し、待機時間は0秒「/W:0」に設定しておくことで、余計な再試行でコピーに時間がかかってしまうことを防げます。

/J

ファイルサイズが大きいファイルをコピーするときは「/J」オプションを利用することで、バッファーなしI/Oモードでコピーができ、高速化が期待できます。

/NP

robocopyコマンドでファイルをコピーすると、通常は画面に進捗が表示されますが「/NP」オプションを利用すると、画面に進捗が表示されなくなり、若干の高速化が期待できます。

コマンドの実行場所

コピー元とコピー先のマシンが異なり、ともにWindowsの場合は、robocopyコマンドはよりスペックの高いマシン上で実行したほうが高速にコピーできます。

また、スペックが同等の場合は、コピー先マシンでrobocopyコマンドを実行したほうが高速にコピーできるといわれています。

コマンドの並列実行

robocopyコマンドで高速コピーしたいときに、個人的に最も効果が高いと感じるのは、robocopyコマンドを並列実行する方法です。

特に、ディスクの読み書きが早いマシンを利用している場合、効果は高いでしょう。

コマンドプロンプトで並列実行する場合は、コマンドプロンプトを複数起動して、それぞれの画面でrobocopyコマンドを実行すれば並列実行できます。

また、バッチファイルでrobocopyコマンドを並列実行するには、それぞれのrobocopyコマンドの前に「start」コマンドを付加することで、robocopyコマンドを別プロセスとして実行でき、並列実行が可能です。

あとがき

サードパーティーのコピーツールを利用できる場合は「FastCopy」もおススメできます。

Windows 10でファイルを高速コピーしたいなら「FastCopy」
ここでは、Windows 10で利用できる高速コピーツールとして人気のある「FastCopy」を紹介します。