Як перевірити вихідний код останньої команди в пакетному файлі?


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
@Misha: Можливо, ви спробували це із знаками відсотків так, як я його спочатку розмістив. Спробуйте без них або спробуйте інші додані мною версії.
Денніс Вільямсон

2
Знайдено випадки, коли %ERRORLEVEL%дорівнює 0, хоча сталася помилка. Сталося під час перевірки %ERRORLEVEL%у файлі cmd. Спроба start /waitне спрацювала. Єдине, що працювалоif errorlevel 1 (...)
АлікЕльзін-кілака

4
Будьте в курсі, рівень помилок - це не змінна середовище . Ось хороший підсумок підводних каменів та тонкощів .
Нік Вестгейт

Чи можу я запропонувати використовувати NEQзамість того, EQUщоб підтримувати виявлення негативних кодів повернення? Не маю уявлення, чи робить це Windows XP, але це справа в сучасних Windows…
binki

10

Це дійсно працює, коли у вас є: App1.exe викликає -> .bat, який працює -> app2.exe

App2 повертає errorlevel 1 ... але вам потрібно це зафіксувати.

Спосіб:

В .bat:

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

Це перевірка після програми2 на рівень помилок. Якщо> 0, то .bat виходить і встановлює рівень помилки на 1 для виклику програми1.


4
це може бути ще краще, якщо ви повернете ту саму помилку до програми1. я не пробував це, але він повинен працювати: if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%.
Віктор Фоніч

2
Принаймні, у Windows% ERRORLEVEL% може бути від’ємним числом (наприклад, у мене програма, яка повертає -1 про помилки). IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%може бути кращим варіантом. Але вам дійсно потрібно знати, що програма повертає на помилки. Деякі програми повертають певні ненульові коди для особливих видів успіху.
Euro Micelli

Якщо app2 - це останнє, що ви запускаєте у файлі bat, код помилки поширюватиметься.
AnrDaemon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.