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

皆さん、こんにちは。Windows プラットフォーム サポートの吉田です。

robocopy コマンドでファイル コピーを実行した際、エラーが発生した際に戻り値が記録されますが、今回は戻り値の結果の詳細についてご紹介します。

まず、robocopy コマンドでは以下のベースとなる戻り値があります。

戻り値 0: コピーする必要がないため、何も実施しなかった
戻り値 1: ファイルのコピーが成功した (フォルダーのコピーは含まれません)
戻り値 2: 余分なフォルダー、ファイルが確認された (コピー元にはなく、コピー先だけにある)
戻り値 4: 同じ名前で別の種類のファイルが存在した (コピー元はフォルダーで、コピー先はファイル、またはその逆)
戻り値 8: コピーに失敗した (リトライした結果を含みます、また /L では実際にコピー処理を行わないため、実質 8 以上の戻り値は出力されません)

このそれぞれの戻り値は LOG オプションでカウントされる場所は以下となります。

0 と判定されたファイル、フォルダーはログ中の "スキップ" にカウントされます。
1 と判定されたファイル、フォルダーはログ中の "コピー済み" にカウントされます。
2 と判定されたファイル、フォルダーはログ中の "Extras" にカウントされます。
4 と判定されたファイル、フォルダーはログ中の "不一致" にカウントされます。
8 と判定されたファイル、フォルダーはログ中の "失敗" にカウントされます。

しかし、robocopy の Log ファイルをご覧いただいた事のある方であれば、戻り値が 9 以上となっている結果をご覧いただいたことがあるかもしれません。
これは、複数のファイル、フォルダーをコピーされる場合に別々の結果となった場合に、足し算された値が返されるためです。

例えば、戻り値が [1] の場合には、robocopy によって処理されたファイルが、すべて正常に "コピー済み" と判断された場合です。
戻り値が [3] の場合、robocopy によって処理されたファイルの中に、戻り値 1 である "コピー済み" と戻り値 2 である "Extras" と判断されたファイルが混在する場合に記録されます。
つまり、戻り値が [1] 以外となっている場合には、正常にコピーが完了しなかったファイルが存在していることを表します。

以下に、[1] 以外のそれぞれの戻り値の結果をご紹介いたしますので、ご参考願います。

戻り値 3: 一部のファイルのコピーに成功したが、一部、Extras と判定された。(1 + 2)
戻り値 5: 一部のファイルのコピーに成功したが、一部、不一致 と判定された。(1 + 4)
戻り値 6: ファイルのコピーに成功しておらず、Extras または 不一致 と判定された (2 + 4)
戻り値 7: 一部のファイルのコピーに成功したが、一部 Extras または 不一致 と判定された (1 + 2 + 4)
戻り値 9: 一部のファイルのコピーに成功したが、一部 失敗 と判定された (1 + 8)
戻り値 10: ファイルのコピーに成功しておらず、Extras または 失敗 と判定された (2 + 8)
戻り値 11: 一部のファイルのコピーに成功したが、一部 Extras または 失敗 と判定された (1 + 2 + 8)
戻り値 12: ファイルのコピーに成功しておらず、不一致 または 失敗 と判定された (4 + 8)
戻り値 13: 一部のファイルのコピーに成功したが、一部 不一致 または 失敗 と判定された (1 + 4 + 8)
戻り値 14: ファイルのコピーに成功しておらず、Extras、不一致 または 失敗 と判定された (2 + 4 + 8)
戻り値 15: 一部のファイルのコピーに成功したが、一部 Extras、不一致 または 失敗 と判定された (1 + 2 + 4 + 8)

戻り値 16: ヘルプを表示したときにセットされます。また、存在しないフォルダーなどを指定するなど、引数が不正な場合にも記録されます。

このように、戻り値での結果では、すべてのコピー対象についてどのような結果が判定されたかを全体で把握するのみとなりますため、詳細な結果は LOG オプションによる出力結果を確認する必要がございますのでご留意願います。

以下は参考となりますが、/LOG オプションによる出力結果例となります。

-------------------------------------------------------------------------------
ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------

  開始: Mon Jan 22 22:14:52 2018

   コピー元 : \\dc\share\
コピー先 : c:\dest\

    ファイル: temp*.txt

オプション: /TS /FP /BYTES /S /E /COPY:DAT /DCOPY:T /PURGE /NP /IT /MT:4 /R:6 /W:10 

------------------------------------------------------------------------------

                       2    \\dc\share\
新しいファイル                 0 2018/01/22 07:19:05    \\dc\share\temp01.txt
0%
2018/01/22 22:14:52 エラー 32 (0x00000020) ファイルをコピーしています \\dc\share\temp01.txt
プロセスはファイルにアクセスできません。別のプロセスが使用中です。

新しいファイル                 0 2018/01/22 07:19:12    \\dc\share\temp02.txt
100%  10 秒間待機しています...
新しいファイル                 0 2018/01/22 07:19:05    \\dc\share\temp01.txt 再試行しています...
2018/01/22 22:15:02 エラー 32 (0x00000020) ファイルをコピーしています \\dc\share\temp01.txt
プロセスはファイルにアクセスできません。別のプロセスが使用中です。

10 秒間待機しています... 再試行しています...
2018/01/22 22:15:12 エラー 32 (0x00000020) ファイルをコピーしています \\dc\share\temp01.txt
プロセスはファイルにアクセスできません。別のプロセスが使用中です。

10 秒間待機しています... 再試行しています...
2018/01/22 22:15:22 エラー 32 (0x00000020) ファイルをコピーしています \\dc\share\temp01.txt
プロセスはファイルにアクセスできません。別のプロセスが使用中です。

10 秒間待機しています... 再試行しています...
2018/01/22 22:15:33 エラー 32 (0x00000020) ファイルをコピーしています \\dc\share\temp01.txt
プロセスはファイルにアクセスできません。別のプロセスが使用中です。

10 秒間待機しています... 再試行しています...
2018/01/22 22:15:43 エラー 32 (0x00000020) ファイルをコピーしています \\dc\share\temp01.txt
プロセスはファイルにアクセスできません。別のプロセスが使用中です。

10 秒間待機しています... 再試行しています...
2018/01/22 22:15:53 エラー 32 (0x00000020) ファイルをコピーしています \\dc\share\temp01.txt
プロセスはファイルにアクセスできません。別のプロセスが使用中です。

エラー: 再試行が制限回数を超えました。

------------------------------------------------------------------------------

                  合計     コピー済み      スキップ       不一致        失敗    Extras
ディレクトリ:         1         0         1         0         0         0
ファイル:         2         1         0         0         1         0
バイト:         0         0         0         0         0         0
時刻:   0:01:00   0:00:00                       0:00:00   0:01:00

       終了: Mon Jan 22 22:15:53 2018