2013-01-04 32 views
0

预期的结果如下脚本:PERMPING如果用户按下P,或PINGLOOP(如果用户按下T键)。但是,不管用户按下什么按钮,脚本回显均为。任何想法是什么给?DOS脚本错误级别与IF语句的错误行为

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

我怀疑你不是在精确地报告你的代码的结果。如果按下了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. 
... 

你有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 
+0

我简单的错误了我的脑海里可怜猛然一惊!感谢修复,dbenham! –