返回列表 发帖

[其他] [已解决] 批处理想在||前后执行分类,请问怎么做?

本帖最后由 zzz19760225 于 2025-2-12 08:53 编辑

WIN764
@echo off
:0
set /p a=:
goto:%a% ^|| goto:0
:1
echo:123
goto:0
:3
echo:789
goto:0
:2
echo:456
goto:0COPY

实际并没有实现,前面出错,就执行后面的goto:0。

本帖最后由 zzz19760225 于 2025-2-16 16:17 编辑
回复  zzz19760225

一楼代码中第四行 :%a% ^ 被系统视为非法标签名而报错,导致 goto 失效而续行下一行 ...
aloha20200628 发表于 2025-2-11 20:55



谢谢回复
我用鼠标点击,运行闪了一下界面,跳出程序结束了。
然后用shift+鼠标右键点击=在此处打开命令行,
在命令行里执行如下
2楼


-
-
4楼

4楼在被吃掉的choice前面,加了一个空行让吃。(问题应该是复制代码到WIN7txt文本,会出现连成一线不分行的吃掉了)
@echo off
:0
choice /c 123q /m "q=退出"
goto:%errorlevel%
:4
exit/b
:1
echo,123
goto:0
:2
echo,456
goto:0
:3
echo:789
goto:0COPY

TOP

回复 3# hlzj88

你好,我换成了两行,然后是鼠标点击可以执行,输入123之外,跳出。
于是命令行执行如下


TOP

本帖最后由 zzz19760225 于 2025-2-14 11:46 编辑

回复 7# hlzj88

谢谢,这种形式可以完成了。
@echo off
:0
set /p a=:
if /i %a%==1 goto %a%
if /i %a%==2 goto %a%
if /i %a%==3 goto %a%
goto 0
:1
echo:123
goto:0
:3
echo:789
goto:0
:2
echo:456
goto:0COPY

完成的形式
@echo off
:0
set /p a=:
set b=1,2,3
for %%i in (%b%) do (
if /i %a%==%%i goto:%a%
)
echo:冇
goto:0
:1
echo,123
goto:0
:2
echo,456
goto:0
:3
echo:789
goto:0COPY

TOP

本帖最后由 zzz19760225 于 2025-2-12 18:55 编辑
回复  zzz19760225

2楼代码已明确没有输入值合法性检查,楼主却用不存在的标签名 5 去尝试,当然会入坑 ...
aloha20200628 发表于 2025-2-12 10:23


是啊,没有那个变量却想去执行不存在的标签,和想要goto直接跳转无法||组合类似,简单的||是不行,需要各种侧面迂回尝试。
执行choice可以显示有输入文字提示,感谢。
没有你们的无私参与,是不好自我解决问题的,再次感谢。



很有意思的功能,怎么在最小值与最大值之间,就可以实现功能了。
@echo off
:0
set "a=" &set /p "a=1/2/3/4/5/6:"
set b=1,2,3,4,5,6
for %%i in (%b%) do (
if not defined a exit/b
if "%a%" geq "1" if "%a%" leq "6" (set "ok=1") else goto:0
)
goto:%a%
:1
echo:123
goto:0
:3
echo:789
goto:0
:2
echo:456
goto:0
:5
echo:123000
goto:0
:4
echo:789000
goto:0
:6
echo:456000
goto:0COPY

TOP

在之前的已有数字和未有数字之外,又尝试键盘上其余按键看会不会跳出,发现两者都具有稳定度。
@echo off
:0
set /p a=:
call :%a%
goto:0
:1
echo:123
goto:0
:3
echo:456
goto:0
:4
echo:789
exit /bCOPY

TOP

返回列表