Bis dato hatte ich Robocopy in automatisierten Builds noch nicht verwendet, copy
tat, was ich brauchte. Nun habe ich erweiterte Anforderungen und bin deswegen auf Robocopy umgestiegen. Gescheiterte Builds zeigten schnell auf, dass Robocopy wohl unterschiedlichste Exit codes einsetzt und diese behandelt werden müssen, möchte man einen durchlaufenden Build haben.
Robocopy Exit codes
Folgende Exit codes stellt Robocopy zur Verfügung (siehe auch Return codes that are used by Robocopy:
Value | Description |
---|---|
0 | No files were copied. No failure was encountered. No files were mismatched. The files already exist in the destination directory; therefore, the copy operation was skipped. |
1 | All files were copied successfully. |
2 | There are some additional files in the destination directory that are not present in the source directory. No files were copied. |
3 | Some files were copied. Additional files were present. No failure was encountered. |
5 | Some files were copied. Some files were mismatched. No failure was encountered. |
6 | Additional files and mismatched files exist. No files were copied and no failures were encountered. This means that the files already exist in the destination directory. |
7 | Files were copied, a file mismatch was present, and additional files were present. |
8 | Several files did not copy. |
Alle Werte größer 8 deuten jedenfalls auf mindestens einen aufgetretenen Fehler hin. Bei einem Wert von 16 ist ein ernsthafter Fehler aufgetreten. Dabei wurden keine Dateien kopiert.
Exit codes im Batch behandeln
Da also auch nach erfolgreichem Kopiervorgang Exit codes größer 0 geliefert werden, sind diese in einem Batch-Aufruf extra zu behandeln. Wie dies funktioniert zeigt nachfolgendes Beispiel:
robocopy sourceDir targetDir /E /XC /XN /XO /NP
IF %ERRORLEVEL% LSS 8 goto finish
EXIT /B 1
:finish
EXIT /B 0
Hierbei wird für alle Robocopy Exit codes die kleiner als 8 sind, der Exit code 0 zurück geliefert, andernfalls 1. Darauf kann nun im Build Rücksicht genommen werden.
Gutes Gelingen!