找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 10103|回复: 11

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

[复制链接]
发表于 2025-2-11 20:23:13 | 显示全部楼层 |阅读模式
本帖最后由 zzz19760225 于 2025-2-12 08:53 编辑

WIN764

  1. @echo off
  2. :0
  3. set /p a=:
  4. goto:%a% ^|| goto:0

  5. :1
  6. echo:123
  7. goto:0

  8. :3
  9. echo:789
  10. goto:0

  11. :2
  12. echo:456
  13. goto:0
复制代码

实际并没有实现,前面出错,就执行后面的goto:0。
发表于 2025-2-11 20:55:18 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-2-11 22:26 编辑

回复 1# zzz19760225

一楼代码中第四行 :%a% ^ 被系统视为非法标签名而报错,导致 goto 失效而续行下一行代码;批处代码中的 goto 是无条件转移,因此就逻辑而言,其后再接续其他命令并无意义...
以下是订正代码,可用直接回车键退出循环,但未予输入值合法性检查...

  1. @echo off
  2. :0
  3. set "a=" &set /p "a=1/2/3:"
  4. if not defined a exit/b
  5. goto:%a%
  6. :1
  7. echo:123
  8. goto:0
  9. :3
  10. echo:789
  11. goto:0
  12. :2
  13. echo:456
  14. goto:0
复制代码

评分

参与人数 1技术 +1 收起 理由
zzz19760225 + 1 谢谢

查看全部评分

发表于 2025-2-11 20:59:00 | 显示全部楼层
把你的第4行 分成两行,|| 不要了。

输入错误会找不到,就没有跳转,换行就是 goto 0
发表于 2025-2-11 21:33:27 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-2-12 10:36 编辑

回复 1# zzz19760225

再给一个调用 choice 功能的版本,内置自动检查输入值合法性,输入值不必跟回车键...

  1. @echo off
  2. :0
  3. choice /c 123q /m "q=退出"
  4. goto:%errorlevel%
  5. :4
  6. exit/b
  7. :1
  8. echo,123
  9. goto:0
  10. :2
  11. echo,456
  12. goto:0
  13. :3
  14. echo:789
  15. goto:0
复制代码
 楼主| 发表于 2025-2-12 07:04:37 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-2-16 16:17 编辑
回复  zzz19760225

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



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


-
-
4楼

4楼在被吃掉的choice前面,加了一个空行让吃。(问题应该是复制代码到WIN7txt文本,会出现连成一线不分行的吃掉了)

  1. @echo off
  2. :0

  3. choice /c 123q /m "q=退出"
  4. goto:%errorlevel%
  5. :4
  6. exit/b

  7. :1
  8. echo,123
  9. goto:0

  10. :2
  11. echo,456
  12. goto:0

  13. :3
  14. echo:789
  15. goto:0
复制代码
 楼主| 发表于 2025-2-12 07:14:50 | 显示全部楼层
回复 3# hlzj88

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


发表于 2025-2-12 07:48:28 | 显示全部楼层
  1. set /p a=
  2. if /i %a%==1 goto %a%
  3. if /i %a%==2 goto %a%
  4. if /i %a%==3 goto %a%
  5. goto 0
复制代码

评分

参与人数 1技术 +1 收起 理由
zzz19760225 + 1 感谢,可以完成需求。

查看全部评分

 楼主| 发表于 2025-2-12 08:47:15 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-2-14 11:46 编辑

回复 7# hlzj88

谢谢,这种形式可以完成了。

  1. @echo off
  2. :0
  3. set /p a=:
  4. if /i %a%==1 goto %a%
  5. if /i %a%==2 goto %a%
  6. if /i %a%==3 goto %a%
  7. goto 0

  8. :1
  9. echo:123
  10. goto:0

  11. :3
  12. echo:789
  13. goto:0

  14. :2
  15. echo:456
  16. goto:0
复制代码

完成的形式

  1. @echo off
  2. :0
  3. set /p a=:
  4. set b=1,2,3
  5. for %%i in (%b%) do (
  6. if /i %a%==%%i goto:%a%
  7. )
  8. echo:冇
  9. goto:0

  10. :1
  11. echo,123
  12. goto:0

  13. :2
  14. echo,456
  15. goto:0

  16. :3
  17. echo:789
  18. goto:0
复制代码
发表于 2025-2-12 10:23:35 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-2-12 10:30 编辑

回复 5# zzz19760225

2楼代码已明确没有输入值合法性检查,楼主却用不存在的标签名 5 去尝试,当然会入坑了...
楼主用4楼代码时可见 cmd 命令行竟把 choice 吃掉一个首字符,结果就自爆了...
以下代码用来订正2楼代码,加入输入值合法性检查...

  1. @echo off
  2. :0
  3. set "a=" &set /p "a=1/2/3:"
  4. if not defined a exit/b
  5. if "%a%" geq "1" if "%a%" leq "3" (set "ok=1") else goto:0
  6. goto:%a%
  7. :1
  8. echo:123
  9. goto:0
  10. :3
  11. echo:789
  12. goto:0
  13. :2
  14. echo:456
  15. goto:0
复制代码

评分

参与人数 1技术 +1 收起 理由
zzz19760225 + 1 谢谢

查看全部评分

 楼主| 发表于 2025-2-12 18:34:19 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-2-12 18:55 编辑
回复  zzz19760225

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


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



很有意思的功能,怎么在最小值与最大值之间,就可以实现功能了。

  1. @echo off
  2. :0
  3. set "a=" &set /p "a=1/2/3/4/5/6:"
  4. set b=1,2,3,4,5,6
  5. for %%i in (%b%) do (
  6. if not defined a exit/b
  7. if "%a%" geq "1" if "%a%" leq "6" (set "ok=1") else goto:0
  8. )
  9. goto:%a%

  10. :1
  11. echo:123
  12. goto:0

  13. :3
  14. echo:789
  15. goto:0

  16. :2
  17. echo:456
  18. goto:0

  19. :5
  20. echo:123000
  21. goto:0

  22. :4
  23. echo:789000
  24. goto:0

  25. :6
  26. echo:456000
  27. goto:0
复制代码
发表于 2025-2-12 20:36:54 | 显示全部楼层
本帖最后由 77七 于 2025-2-12 21:02 编辑
  1. goto :%a% || pause
复制代码

发现goto一个不存在的标签(标签必须合法,不引起闪退),会执行暂停,然后退出

  1. @echo off
  2. :0
  3. set /p a=:
  4. goto :%a% || %0

  5. :1
  6. echo:123
  7. goto:0
复制代码


这也是一种方法,但是首选还是先判断标签是否存在。



用call也行,不会退出
  1. @echo off
  2. :0
  3. set /p a=:
  4. call :%a%
  5. goto:0

  6. :1
  7. echo:123
  8. exit /b
复制代码

评分

参与人数 1技术 +1 收起 理由
zzz19760225 + 1 两者都可完成初始需求,谢谢。

查看全部评分

 楼主| 发表于 2025-2-13 09:25:46 | 显示全部楼层
在之前的已有数字和未有数字之外,又尝试键盘上其余按键看会不会跳出,发现两者都具有稳定度。

  1. @echo off
  2. :0
  3. set /p a=:
  4. call :%a%
  5. goto:0

  6. :1
  7. echo:123
  8. goto:0

  9. :3
  10. echo:456
  11. goto:0

  12. :4
  13. echo:789
  14. exit /b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 10:21 , Processed in 0.024809 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表