[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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。

本帖最后由 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

评分人数

TOP

把你的第4行 分成两行,|| 不要了。

输入错误会找不到,就没有跳转,换行就是 goto 0
目的,学习批处理

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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
复制代码

TOP

回复 3# hlzj88

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


TOP

  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

评分人数

目的,学习批处理

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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

评分人数

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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

评分人数

    • zzz19760225: 两者都可完成初始需求,谢谢。技术 + 1
bat小白,请多指教!谢谢!

TOP

在之前的已有数字和未有数字之外,又尝试键盘上其余按键看会不会跳出,发现两者都具有稳定度。
  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
复制代码

TOP

返回列表