Как проверить код завершения последней команды в командном файле?

69

Внутри командного файла в Windows я использую 7-zip следующим образом:

...\right_path\7z a output_file_name.zip file_to_be_compressed

Как я могу проверить код выхода 7zи предпринять соответствующие действия?

Миша Морошко
источник

Ответы:

78

Проверить код возврата, больший или равный 1:

if ERRORLEVEL 1 echo Error

или же

if %ERRORLEVEL% GEQ 1 echo Error

или проверить код возврата, равный 0:

if %ERRORLEVEL% EQU 0 echo OK

Вы можете использовать другие команды, такие как, GOTOгде я показываю echo.

Деннис Уильямсон
источник
Я попробовал твой код. Я получил следующую ошибку:0 was unexpected this time.
Миша Морошко
2
@ Миша: Вы, возможно, попробовали это со знаками процента, способом, которым я первоначально отправил это. Попробуйте это без них или попробуйте другие версии, которые я добавил.
Деннис Уильямсон
2
Найдены случаи, когда %ERRORLEVEL%0, хотя произошла ошибка. Произошло при проверке %ERRORLEVEL%в cmd-файле. Попытка start /waitне сработала. Единственное, что сработалоif errorlevel 1 (...)
АликЭльзин-килака
4
Имейте в виду, уровень ошибки не является переменной среды . Вот хорошее резюме ловушек и тонкостей .
Ник Вестгейт
Могу ли я предложить использовать NEQвместо EQUподдержки обнаружения отрицательных кодов возврата? Понятия не имею, если Windows XP делает это, но это вещь для современных Windows ...
binki
10

Это действительно работает, когда у вас есть: App1.exe вызывает -> .bat, который работает -> app2.exe

App2 возвращает уровень ошибки 1 ... но вам нужно перехватить это в .bat и повторно поднять его до app1 ... в противном случае .bat съедает уровень ошибки, и app1 никогда не узнает.

Метод:

В .bat:

app2.exe
if %ERRORLEVEL% GEQ 1 EXIT /B 1

Это проверка после app2 уровня ошибки. Если> 0, то .bat выходит и устанавливает errorlevel в 1 для вызывающего app1.

Сэм Джонс
источник
4
было бы еще лучше, если бы вы вернули ту же ошибку обратно в app1. Я не пробовал это, но это должно сработать if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%.
Виктор Фоник
2
По крайней мере, в Windows% ERRORLEVEL% может быть отрицательным числом (например, у меня есть программа, которая возвращает -1 при ошибках). IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%может быть лучшим вариантом. Но вам действительно нужно знать, что программа возвращает в случае ошибок. Некоторые программы возвращают определенные ненулевые коды для особых типов успеха.
Евро Мицелли
Если app2 - последнее, что вы запускаете в файле bat, код ошибки будет распространяться.
AnrDaemon