You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

批处理goto语句始终输出相同内容?求排查代码问题

问题原因及修复方案

你的批处理脚本不管输入什么都跳转到:one分支,核心问题出在if语句的字符串比较语法错误,以及缺少输入不匹配时的处理逻辑。

具体错误点

你当前的判断写法是:

if %cmd%=="1" goto one
if %cmd%=="2" goto two

这种写法里,等号两边的字符串是不对等的:左边是用户输入的纯文本(比如输入1时,%cmd%的值是1),右边是带引号的字符串"1"。批处理会严格比较字符串的每一个字符,所以1"1"会被判定为不相等。

当两个if条件都不成立时,脚本会继续向下执行,刚好就落到了:one分支的代码上,所以不管输入什么都会输出"1 worked"

修复后的代码

有两种正确的写法可以解决这个问题:

写法一:两边都不带引号

@echo off
:default
set /p cmd="1 or 2: "
if %cmd%==1 goto one
if %cmd%==2 goto two
echo "Invalid input, please enter 1 or 2"
goto default
:one
echo "1 worked"
goto default
:two
echo "2 worked"
goto default

写法二:两边都带引号(更推荐,能避免空输入导致的语法错误)

@echo off
:default
set /p cmd="1 or 2: "
if "%cmd%"=="1" goto one
if "%cmd%"=="2" goto two
echo "Invalid input, please enter 1 or 2"
goto default
:one
echo "1 worked"
goto default
:two
echo "2 worked"
goto default

额外优化点

我还加了输入不匹配的提示逻辑,当用户输入1/2之外的内容时,会提示错误并回到输入界面,体验更友好。

内容的提问来源于stack exchange,提问作者allspice

火山引擎 最新活动