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

[其他] [已解决]批处理choice命令选择后进行errorlevel判断的疑惑

本帖最后由 Echo11 于 2022-2-22 19:50 编辑

一、以下“功能测试1”,正常执行和选择。
  1. @echo off
  2. Title choice命令功能测试1
  3. :menu1
  4. echo.
  5. echo 1:起床
  6. echo.
  7. echo 2:睡觉
  8. echo.
  9. echo 3:退出
  10. echo.
  11. choice /C:123 /M "请选择:"
  12. if %errorlevel%==1 echo.你选择了 1&pause
  13. if %errorlevel%==2 echo.你选择了 2&pause
  14. if %errorlevel%==3 echo.你选择了 3&pause
  15. if %errorlevel%==0 echo.你Ctrl+Break 或 Ctrl+C了?好像到不了这? &pause
  16. echo debug: hmm...
  17. goto :menu1
  18. exit /B
复制代码
二、以下“功能测试2”,判断选择部分采用了网上的语法方式if errorlevel 1,中间没有“==”运算符,errorlevel 也没有加“%%”,一直不明白这是什么语法?
实际测试效果:比如选2,只要是<=2的选项都会执行。
  1. @echo off
  2. Title choice命令功能测试2
  3. :menu1
  4. echo.
  5. echo 1:起床
  6. echo.
  7. echo 2:睡觉
  8. echo.
  9. echo 3:退出
  10. echo.
  11. choice /C:123 /M "请选择:"
  12. if errorlevel 1 echo.你选择了 1&pause
  13. if errorlevel 2 echo.你选择了 2&pause
  14. if errorlevel 3 echo.你选择了 3&pause
  15. if errorlevel 0 echo.你Ctrl+Break 或 Ctrl+C了?好像到不了这? &pause
  16. echo debug: hmm...
  17. goto :menu1
  18. exit /B
复制代码
三、以下“功能测试3”。
网上给出if errorlevel 1这种语法的人,基本都做了一个注释:就是顺序要从大到小如这里的测试代码3。
但是实际测试结果同2,不管如何调整顺序,比如选2,只要是<=2的选项都会执行。
(网上的方法能走通是因为他们都GOTO了或在选项那行EXIT了)
  1. @echo off
  2. Title choice命令功能测试3
  3. :menu1
  4. echo.
  5. echo 1:起床
  6. echo.
  7. echo 2:睡觉
  8. echo.
  9. echo 3:退出
  10. echo.
  11. choice /C:123 /M "请选择:"
  12. if errorlevel 3 echo.你选择了 3&pause
  13. if errorlevel 2 echo.你选择了 2&pause
  14. if errorlevel 1 echo.你选择了 1&pause
  15. if errorlevel 0 echo.你Ctrl+Break 或 Ctrl+C了?好像到不了这? &pause
  16. echo debug: hmm...
  17. goto :menu1
  18. exit /B
复制代码
求大神详解一下1、网上if errorlevel 1这种用法到底什么意思?
2、如果if errorlevel 1是有效的,那为何会如果不跳转或退出,会依次执行小于等于选择值的选项?
3、如果if errorlevel 1是无效的(用原true),那为何选2的时候,选项3又不会执行?

if errorlevel number这个句子必须放在某一个命令的后面,执行该命令后才由if errorlevel来判断命令的返回值。返回值number的数字取值范围0~255。返回值大于等于指定值时,条件成立。
DOS命令在运行完后都有返回码,返回码为0表明程序执行正确,执行错误会返回非0数值,虽然一般都是返回1,但不能认为错误的返回值就是1,具体返回什么值,要看具体命令。
1

评分人数

TOP

if errorlevel number这个句子必须放在某一个命令的后面,执行该命令后才由if errorlevel来判断命令的返回值 ...
qixiaobin0715 发表于 2022-2-22 11:24



    感谢。
那就是说明测试没有问题。
感觉网上的用法不严谨吧,如果不goto掉或exit掉,就会执行所有满足返回值大于等于指定值的条件

TOP

回复 1# Echo11


参考if命令教程第13页
http://bbs.bathome.net/thread-31727-1-1.html

如果看完之后还是不明白,我再想想其他办法。
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4# Batcher


   已经懂了。谢谢。PPT不错,已下载。

TOP

返回列表