【问题标题】:goto unexpected with blank choice用空白选择去意外
【发布时间】:2013-06-10 13:39:59
【问题描述】:

我的问题: 我设置了一个带提示和三个 IF 的 VAR 来让选择。 第四选择不起作用。我希望如果我在不输入任何内容的情况下按回车,它会返回到:MOSTRA。 实际上将其留空并在键盘上输入回车返回 GOTO WAS 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

【问题讨论】:

    标签: batch-file cmd goto


    【解决方案1】:
    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,则响应不会改变 - 上一个响应会重复。

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

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

    choose 设置为 [nothing]

    【讨论】:

    • 很好的解释。也感谢您对 SET "choose=" 的建议。
    猜你喜欢
    • 2017-12-15
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 2011-12-03
    • 2021-08-23
    • 2017-09-06
    相关资源
    最近更新 更多