【问题标题】:Batch goto keeps giving me the same output?批处理 goto 一直给我相同的输出?
【发布时间】:2020-02-09 15:13:47
【问题描述】:

这是我正在使用的代码:

@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 有效”。有人知道我做错了什么吗?

【问题讨论】:

  • 也许%cmd% 既不是"1" 也不是"2"。它将直接落入:one
  • 提示:在没有回声的情况下运行并观察打印的内容

标签: batch-file goto


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多