Windows10で「robocopy」コマンドの実行結果を判定する方法

Windows10で「robocopy」コマンドの実行結果を判定する方法

Windows環境でコマンドの実行結果が正常終了したのか異常終了したのかを判定する場合、リターンコードで判定するのが一般的です。

ほとんどのコマンドの場合、正常終了ならリターンコードは「0」、異常終了ならリターンコードは「1」を返しますが、ファイルコピーで利用されるrobocopyコマンドでは、結果に応じてさまざまなリターンコードが返されます。

そこで、ここではWindows10のrobocopyコマンドのリターンコードについて紹介します。

robocopyコマンドを使いこなしたいと思っている方の参考になれば幸いです。

動作環境

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

ソフトウェア バージョン
Windows10 Pro 64bit 1909

robocopyコマンドのリターンコード

robocopyコマンドのリターンコードは、一般的なコマンドと異なり、実行結果に応じて0から16のリターンコードが返されます。

まず、基本のリターンコードは、下表のとおりです。

リターンコード 説明
0 何も実施しなかった。
1 ファイルのコピーが成功した。
2 余分なフォルダー、ファイルが確認された。
4 同じ名前で別の種類のファイルが存在した。
8 コピーに失敗した。
16 不正な引数を指定した。

複数のファイルやフォルダーをコピーした場合に、コピーしたファイルやフォルダーによって結果が異なった場合は、リターンコードを足し算した値が返されます。

たとえば、リターンコードが「3」となっているときは、処理されたファイルの中に、リターンコードが「1」のファイルと、リターンコードが「2」のファイルが混在していることを意味しています。

リターンコードによる判定方法

コマンドの成功/失敗をシンプルに判定する場合は、リターンコードが0~7までは「成功」、リターンコードが8以上の場合は「失敗」として判定するのが良いでしょう。

バッチファイルなどに記述する場合は、次のような感じで記述します。

robocopy D:source_fol \sv01dest_fol
if errorlevel 8 echo **ERROR** & goto end

リターンコードごとに細かく判定したい場合は、次のような感じで記述します。

robocopy D:source_fol \sv01dest_fol
if errorlevel 16 echo ***FATAL ERROR*** & goto end
if errorlevel 8 echo **FAILED COPIES** & goto end
if errorlevel 4 echo *MISMATCHES* & goto end
if errorlevel 2 echo EXTRA FILES & goto end
if errorlevel 1 echo Copy successful & goto end
if errorlevel 0 echo --no change-- & goto end

なお、リターンコードによる判定では、処理全体での結果しか把握できず、どのファイルの処理が成功して、どのファイルの処理が失敗したかまでは、リターンコードからは確認できません。

どのファイルの処理が成功して、どのファイルの処理が失敗したかを確認したい場合は、「LOG」オプションなどでログファイルを出力して、ログファイルを確認する必要があります。

参考URL

Robocopy のエラー (戻り値) について

robocopy | Microsoft Docs

あとがき

robocopyコマンドは、Windows環境でたくさんのファイルをコピーしたいときや、フォルダー内容を同期したいときなどに便利なコマンドです。

使い方を覚えておいて損はないです。

Windowsの「robocopy」コマンドで、より高速にコピーするためのテクニック
Windows環境でファイルをコピーする場合、ファイルをドラッグ&ドロップするなど、GUI画面でコピーすることが大半ですが、たくさんのフ...

記事が役立ったらシェアしてくれるとうれしいです。

あなたにおすすめのコンテンツ
トップへ戻る