以下脚本的预期结果:如果用户按 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
以下脚本的预期结果:如果用户按 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
我怀疑您没有准确地报告代码的结果。如果按下 P,您发布的代码应该同时打印,如果按下 T,则仅打印 PINGLOOP。该行为是由于 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