用空白选择转到意外

时间:2013-06-10 13:39:59

标签: batch-file cmd goto

我的问题: 我设置一个带有提示的VAR和三个IF来让选择。 第四种选择不起作用。我想如果我推进没有任何类型的东西,它会回到:MOSTRA。 实际上将它留空并在键盘上输入Enter,它会返回GOTO WASO UNEXPECTED并关闭CMD。 我哪里错了?

:MOSTRA
ECHO Make your choice.
ECHO.
ECHO A) Ok
ECHO B) Ko
ECHO Esci
SET /P choose=Scelta: 
if /I %choose%==A GOTO OK
if /I %choose%==B GOTO KO
if /I %choose%==esci GOTO FINE
if /I %choose%=="" GOTO ERROR


:ERROR
ECHO You type nothing.
ECHO.
GOTO MOSTRA

:KO
ECHO Bad choice
ECHO.
GOTO MOSTRA

:OK
ECHO Right choice
ECHO.
GOTO MOSTRA

:FINE
exit

1 个答案:

答案 0 :(得分:3)

SET /P choose=Scelta: 
if /I "%choose%"=="A" GOTO OK
if /I "%choose%"=="B" GOTO KO
if /I "%choose%"=="esci" GOTO FINE
if /I "%choose%"=="" GOTO ERROR

CMD会将choose的值替换为%choose%所以

if /I %choose%==A GOTO OK 

被解释为

if /I ==A GOTO OK

生成错误。

还有一个更微妙的错误。

如果您首先选择ab,则会得到“正确选择”或“错误选择”的回复,但如果您的下一个选择只是ENTER响应不对,那么t更改 - 将重复之前的响应。

原因是如果只输入set /p,则choose不会更改ENTER。你需要的是

SET "choose="
SET /P choose=Scelta: 
if /I "%choose%"=="A" GOTO OK

choose设为[无]