2016-06-10 224 views
1

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

回答

-1

您的设置/ p不像您认为的那样工作。输入结束为空,它通过所有if语句并进入:cmd块。

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%查询)

+0

非常感谢! –