robocopyコマンドの実行結果をリターンコードで判定する方法

robocopyコマンドの実行結果をリターンコードで判定する方法

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

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

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

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

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

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

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

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 | Microsoft Docs

あとがき

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

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