CMD Script Errorlevel Неправильное поведение с оператором IF

Ожидаемый результат следующего скрипта: PERMPING, если пользователь нажимает P, или PINGLOOP, если пользователь нажимает T. Однако независимо от того, что пользователь нажимает, скрипт повторяет оба. Любая идея, что дает?

CHOICE /C:PT /N /M "Ping permanently (P) or temporarily (T) (%pingTimes% times)?"
echo %ERRORLEVEL%
IF ERRORLEVEL 1 ECHO PERMPING
IF ERRORLEVEL 2 ECHO PINGLOOP

person Taylor Kline    schedule 04.01.2013    source источник


Ответы (2)


Я подозреваю, что вы неточно сообщаете о результатах своего кода. Размещенный вами код должен печатать как при нажатии P, так и только при нажатии PINGLOOP при нажатии T. Такое поведение связано с тем, как работает оператор IF ERRORLEVEL, как объясняется в справке. Чтобы получить справку по любой команде, просто введите HELP commandName или commandName /? в командной строке. В вашем случае вы можете использовать IF /?, чтобы увидеть следующее

Performs conditional processing in batch programs.

IF [NOT] ERRORLEVEL number command
...
  ERRORLEVEL number Specifies a true condition if the last program run
                    returned an exit code equal to or greater than the number
                    specified.
...

У вас есть 2 варианта заставить ваш код работать:

Проверьте условия в порядке убывания и используйте предложение ELSE.

CHOICE /C:PT /N /M "Ping permanently (P) or temporarily (T) (%pingTimes% times)?"
echo %ERRORLEVEL%
IF ERRORLEVEL 2 (
  ECHO PINGLOOP
) ELSE IF ERRORLEVEL 1 (
  ECHO PERMPING
)

или используйте IF %ERRORLEVEL%==N

CHOICE /C:PT /N /M "Ping permanently (P) or temporarily (T) (%pingTimes% times)?"
echo %ERRORLEVEL%
IF %ERRORLEVEL% == 1 ECHO PERMPING
IF %ERRORLEVEL% == 2 ECHO PINGLOOP
person dbenham    schedule 04.01.2013
comment
Моя простая ошибка смутила мой бедный ум! Спасибо за исправление, dbenham! - person Taylor Kline; 04.01.2013

Чтобы расширить ответ выше, если расширения команд включены, вы также можете использовать:

if %errorlevel% equ 1 echo PERMPING
if %errorlevel% equ 2 echo PINGLOOP

person user66001    schedule 19.01.2013
comment
Спасибо за дополнительный совет! - person Taylor Kline; 20.01.2013