批处理goto一直给我相同的输出?

问题描述 投票:1回答:1

这是我使用的代码:

@echo off

:default
set /p cmd= "1 or 2"
if %cmd%=="1" goto one
if %cmd%=="2" goto two

:one
echo "1 worked"
goto default

:two
echo "2 worked"
goto default

但是,无论我输入什么,我得到的输出都是“ 1有效”。有人知道我在做什么错吗?

batch-file goto
1个回答
1
投票

您的问题是您忽略了双引号。除非最终用户输入"1""2",否则比较==的两面将永远不匹配,并且您的代码将始终使两个if命令都失败,并继续执行:one。解决方法是确保比较的两边都用双引号引起来。

这显示了它应该如何工作,但是请注意,最终用户绝对可以在提示符下输入他们想要的任何内容,因此从技术上讲,您应该在尝试使用该输入之前对其进行一些验证。最好的方法是改用更健壮的输入法,例如choice命令

此示例使用了不推荐的Set /P方法:

@Echo Off

:default
Set "num="
Set /P "num=1 or 2"
If "%num%" == "2" GoTo two
If Not "%num%" == "1" GoTo default
Echo "1 worked"
GoTo default

:two
echo "2 worked"
GoTo default

注意,我将变量名从cmd更改了,因为使用命令名作为变量名会造成混淆。


这代替使用推荐的Choice命令:

@Echo Off

:default
"%__AppDir__%choice.exe" /C 12
If ErrorLevel 2 GoTo two
Echo "1 worked"
GoTo default

:two
Echo "2 worked"
GoTo default

或者,您可以将错误级别用作GoTo

@Echo Off

:default
"%__AppDir__%choice.exe" /C 12
GoTo Label%ErrorLevel% 2>NUL||GoTo default

:Label1
Echo "1 worked"
GoTo default

:Label2
Echo "2 worked"
GoTo default
© www.soinside.com 2019 - 2024. All rights reserved.