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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.