我有三个不同的标签,但它与我选择的标签并不重要:它总是会到达第一个标签(= cmd也在打开,如果我正在写#34; google")!错误是什么?它为什么会发生?
@echo off
:start
set /p input = What do you want to open?
if "%input%" == "cmd" goto cmd
if "%input%" == "notepad" goto notepad
if "%input%" == "google" goto google
:cmd
start
goto start
:notepad
start notepad
goto start
:google
start https://www.google.at/
goto start
答案 0 :(得分:4)
你的第一个问题就在这一行
set /p input = What do you want to open?
此行创建一个名为"input "
的变量,后面有一个空格,它与您正在测试的"input"
变量不同。与其他所有编程语言不同,您无法添加空格来美化您的代码。将行更改为
set /p "input=What do you want to open? "
你的第二个问题是,在所有三个if
语句都失败后(因为测试了错误的变量),CMD只是执行它看到的下一行,即:cmd
标签。为避免这种情况,您需要在三个if语句后添加一个默认标签,以便在变量不匹配时添加。
if "%input%" == "cmd" goto cmd
if "%input%" == "notepad" goto notepad
if "%input%" == "google" goto google
goto default
:cmd
start
goto start
如果您只希望脚本结束并且不想创建:default
块,则可以将其更改为goto :eof
,这是脚本末尾的特殊标签。或者甚至更好,使用exit /B 1
立即终止脚本,错误代码为1(另一个脚本可以使用%errorlevel%
检查)
答案 1 :(得分:-1)
你的设置/ p并不像你认为的那样工作。输入结束为空,它将通过所有if语句并直接进入:cmd块。