批处理:goto语句不能正常工作

时间:2016-06-10 17:12:31

标签: batch-file

我有三个不同的标签,但它与我选择的标签并不重要:它总是会到达第一个标签(= 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

2 个答案:

答案 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块。