批处理:goto语句无法正常工作
问题描述:
我有三个不同的标签,但它与我选择的标签无关:它总是会到第一个标签(= cmd也打开,如果我正在写入“google “)!什么是错误,为什么会发生?批处理:goto语句无法正常工作
@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
答
您的设置/ p不像您认为的那样工作。输入结束为空,它通过所有if语句并进入:cmd块。
答
你的第一个问题是,在这条线
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%
查询)
非常感谢! –