Действительно ли возможно попросить, чтобы ROBOCOPY вышел с кодом выхода, который указывает на успешность или неуспешность?
Я использую ROBOCOPY в качестве части моих конфигураций сборки TeamCity и имею необходимость добавить, что шаг только к заставляет код выхода замолчать от ROBOCOPY, кажется глупым мне.
В основном я добавил это:
EXIT /B 0
к скрипту, который запускается.
Однако это, конечно, маскирует любые настоящие проблемы, которые возвратил бы ROBOCOPY.
В основном я хотел бы иметь коды выхода 0 для УСПЕХА и ненулевой для ОТКАЗА вместо битовой маски это возвраты ROBOCOPY теперь.
Или, если бы у меня не может быть этого, есть ли простая последовательность пакетных команд, которые перевели бы битовую маску ROBOCOPY к подобному значению?
Согласно здесь, Robocopy имеет следующие биты кода выхода, которые составляют код выхода:
0×10 Серьезная ошибка. Robocopy не скопировал файлов. Это - или ошибка использования или ошибка из-за недостаточных прав доступа на источнике или целевых каталогах.
0×08 Некоторые файлы или каталоги не могли быть скопированы (ошибки копии произошли и предел повторной попытки, был превышен). Проверьте эти ошибки далее.
0×04 Некоторые Несогласованные файлы или каталоги были обнаружены. Исследуйте выходной журнал. Обслуживание, вероятно, необходимо.
0×02 Некоторые Дополнительные файлы или каталоги были обнаружены. Исследуйте выходной журнал. Некоторое обслуживание может быть необходимо.
0×01 Один или несколько файлов были скопированы успешно (то есть, новые файлы прибыли).
0×00 Никакие ошибки не произошли, и никакое копирование, был сделан. Источник и целевые деревья каталогов полностью синхронизируются.
Просто добавьте если/еще операторы это EXIT /B 0
когда возвращаемое значение равняется 1 или возможно 0, и EXIT /B 1
иначе. Даже если бы файлы, возможно, были скопированы, существует что-то не так, чему было бы нужно ручное вмешательство.
От этой страницы можно добавить раздел к пакетному файлу, который использует список кодов ошибок, чтобы произвести ошибки и выполнить различные разделы кода:
if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto end
if %ERRORLEVEL% EQU 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 14 echo FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 13 echo OKCOPY + FAIL + MISMATCHES & goto end
if %ERRORLEVEL% EQU 12 echo FAIL + MISMATCHES& goto end
if %ERRORLEVEL% EQU 11 echo OKCOPY + FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 10 echo FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 9 echo OKCOPY + FAIL & goto end
if %ERRORLEVEL% EQU 8 echo FAIL & goto end
if %ERRORLEVEL% EQU 7 echo OKCOPY + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 6 echo MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 5 echo OKCOPY + MISMATCHES & goto end
if %ERRORLEVEL% EQU 4 echo MISMATCHES & goto end
if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end
if %ERRORLEVEL% EQU 2 echo XTRA & goto end
if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end
if %ERRORLEVEL% EQU 0 echo No Change & goto end
:END
REM END OF BATCH FILE
Я использую это:
robocopy .....
call :REPORT_ERRORLEVEL
goto :EOF
:REPORT_ERRORLEVEL
echo.
if ERRORLEVEL 16 echo ***FATAL ERROR*** & goto :EOF
if ERRORLEVEL 8 echo **FAILED COPIES** & goto :EOF
if ERRORLEVEL 4 echo *MISMATCHES* & goto :EOF
if ERRORLEVEL 2 echo EXTRA FILES & goto :EOF
if ERRORLEVEL 1 echo Copy successful & goto :EOF
if ERRORLEVEL 0 echo –no change– & goto :EOF