Batch goto 不断给我相同的输出?
Batch goto keeps giving me the same output?
这是我使用的代码:
@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 worked”。有人知道我做错了什么吗?
您的问题是您忽略了双引号。除非最终用户输入 "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
这是我使用的代码:
@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 worked”。有人知道我做错了什么吗?
您的问题是您忽略了双引号。除非最终用户输入 "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