CMD Script Errorlevel使用IF语句的错误行为

时间:2013-01-04 10:22:05

标签: cmd errorlevel

以下脚本的预期结果:如果用户按下P,则为PERMPING;如果用户按下T,则为PINGLOOP。但是,无论用户按什么,脚本都会回显 。知道是什么给出了什么?

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

2 个答案:

答案 0 :(得分:1)

我怀疑您没有准确报告代码的结果。如果按下P,则您发布的代码应打印,如果按下T,则仅打印PINGLOOP。行为是由IF ERRORLEVEL语句的工作原理引起的,如帮助所解释的那样。要获得任何命令的帮助,只需在命令提示符下键入HELP commandNamecommandName /?即可。在您的情况下,您可以使用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.
...

您有两种选择可以使您的代码有效:

以递减数字顺序测试条件并使用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

答案 1 :(得分:1)