Использование этой простой C-программы для манипулирования кодом выхода:
#include <stdio.h>
main(int argc, char *argv[]) {
if (argc == 2) {
// return integer of argument 1
return strtol(argv[1], NULL, 10);
}
else {
return 0;
}
}
Мы можем проверить код завершения в пакетном файле примерно так:
test.exe 0
IF ERRORLEVEL 0 PAUSE
Состояние : 0 => 0 == TRUE
Когда ERRORLEVEL = 0
, пауза произойдет, потому что логика >=
или больше или равна . Это важно, поскольку не сразу понятно, что условие не является ==
сравнением.
Обратите внимание, что подстановка для 1 => 0
также будет истинной, и, таким образом, также произойдет пауза. Это верно для любого положительного числа.
Мы можем вызвать противоположный эффект, только опустившись ниже 0
:
test.exe -1
IF ERRORLEVEL 0 PAUSE
Состояние : -1 => 0 == FALSE
Поскольку ERRORLEVEL
из 1
обычно означает, что есть ошибка, а 0
нет ошибки, мы можем просто увеличить минимум в условии сравнения, чтобы получить то, что мы хотим, так:
test.exe 0
IF ERRORLEVEL 1 PAUSE
Состояние : -1 => 1 == FALSE
Состояние : 0 => 1 == FALSE
Состояние : 1 => 1 == TRUE
В этом примере. скрипт остановится, когда ERRORLEVEL
будет 1
или выше
Обратите внимание, что это позволяет -1
кодам выхода такие же, как 0
. Что если кто-то хочет, чтобы 0
не сделал паузу? Мы можем использовать отдельный синтаксис:
test.exe 0
IF NOT %ERRORLEVEL% EQU 0 PAUSE
Состояние : -1 != 0 == TRUE
Состояние : 0 != 0 == FALSE
Состояние : 1 != 0 == TRUE
В этом примере сценарий приостанавливается, если %ERRORLEVEL%
не равен 0
. Мы можем сделать это с помощью оператора EQU, чтобы сначала проверить, если %ERRORLEVEL% EQU 0
, тогда оператор NOT, чтобы получить противоположный эффект, эквивалентный !=
оператор. Тем не менее, я считаю, что это работает только на машинах NT, а не на обычной DOS.
Ссылки
http://chrisoldwood.blogspot.ca/2013/11/if-errorlevel-1-vs-if-errorlevel-neq-0.html
http://ss64.com/nt/errorlevel.html