Robocopyの戻り値を知りたい
ファイルのコピーやフォルダの同期などのバッチファイルを以前まではXcopyコマンドを利用して作成していたのですが、
どうやらWindows2008ではXcopyではなく、Robocopyの使用を推奨しているようです。
Windows2003でのXcopy /?の実行結果
Windows2008でのXcopy /?の実行結果
そこでRobocopyを使用してバッチファイルを作成し始めたのですが、Robocopyの終了コードが良く分かりませんでした。
JP1などのジョブ管理ツールなどから実行すると、デフォルトの設定ではリターンコードが0以外が返ってくるとエラーとなります。
Robocopyで作成したバッチファイルが成功したり、失敗したりが続いたので調べることに。
Webで調べるとリソースキッドの中にドキュメントがあるとのことなので、以下のURLからリソースキッドをダウンロードしました。
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en
リソースキッドをインストールすると、インストールフォルダにrobocopy.docというMS WORDのファイルがあります。
その中にReturn Codeに関する表がありました。
Hex Bit Value | Decimal Value | Meaning If Set |
0x10 | 16 | Serious error. Robocopy did not copy any files. This is either a usage error or an error due to insufficient access privileges on the source or destination directories. |
0x08 | 8 | Some files or directories could not be copied (copy errors occurred and the retry limit was exceeded). Check these errors further. |
0x04 | 4 | Some Mismatched files or directories were detected. Examine the output log. Housekeeping is probably necessary. |
0x02 | 2 | Some Extra files or directories were detected. Examine the output log. Some housekeeping may be needed. |
0x01 | 1 | One or more files were copied successfully (that is, new files have arrived). |
0x00 | 0 | No errors occurred, and no copying was done. The source and destination directory trees are completely synchronized. |
上の表によると、コピーが正常に終了した場合は1が返ってくるようですね。。。
もう少し細かい判定をしたければ…ということで、以下のような判定用のバッチも記載されていましたので、貼っておきます。
if errorlevel 16 echo ***FATAL ERROR*** & goto end if errorlevel 15 echo FAIL MISM XTRA COPY & goto end if errorlevel 14 echo FAIL MISM XTRA & goto end if errorlevel 13 echo FAIL MISM COPY & goto end if errorlevel 12 echo FAIL MISM & goto end if errorlevel 11 echo FAIL XTRA COPY & goto end if errorlevel 10 echo FAIL XTRA & goto end if errorlevel 9 echo FAIL COPY & goto end if errorlevel 8 echo FAIL & goto end if errorlevel 7 echo MISM XTRA COPY & goto end if errorlevel 6 echo MISM XTRA & goto end if errorlevel 5 echo MISM COPY & goto end if errorlevel 4 echo MISM & goto end if errorlevel 3 echo XTRA COPY & goto end if errorlevel 2 echo XTRA & goto end if errorlevel 1 echo COPY & goto end if errorlevel 0 echo --no change-- & goto end :end
なるほど。。。