标题: [其他] [已解决]批处理choice命令选择后进行errorlevel判断的疑惑 [打印本页]
作者: Echo11 时间: 2022-2-22 10:50 标题: [已解决]批处理choice命令选择后进行errorlevel判断的疑惑
本帖最后由 Echo11 于 2022-2-22 19:50 编辑
一、以下“功能测试1”,正常执行和选择。- @echo off
- Title choice命令功能测试1
- :menu1
- echo.
- echo 1:起床
- echo.
- echo 2:睡觉
- echo.
- echo 3:退出
- echo.
- choice /C:123 /M "请选择:"
- if %errorlevel%==1 echo.你选择了 1&pause
- if %errorlevel%==2 echo.你选择了 2&pause
- if %errorlevel%==3 echo.你选择了 3&pause
- if %errorlevel%==0 echo.你Ctrl+Break 或 Ctrl+C了?好像到不了这? &pause
- echo debug: hmm...
- goto :menu1
- exit /B
复制代码
二、以下“功能测试2”,判断选择部分采用了网上的语法方式if errorlevel 1,中间没有“==”运算符,errorlevel 也没有加“%%”,一直不明白这是什么语法?
实际测试效果:比如选2,只要是<=2的选项都会执行。- @echo off
- Title choice命令功能测试2
- :menu1
- echo.
- echo 1:起床
- echo.
- echo 2:睡觉
- echo.
- echo 3:退出
- echo.
- choice /C:123 /M "请选择:"
- if errorlevel 1 echo.你选择了 1&pause
- if errorlevel 2 echo.你选择了 2&pause
- if errorlevel 3 echo.你选择了 3&pause
- if errorlevel 0 echo.你Ctrl+Break 或 Ctrl+C了?好像到不了这? &pause
- echo debug: hmm...
- goto :menu1
- exit /B
复制代码
三、以下“功能测试3”。
网上给出if errorlevel 1这种语法的人,基本都做了一个注释:就是顺序要从大到小如这里的测试代码3。
但是实际测试结果同2,不管如何调整顺序,比如选2,只要是<=2的选项都会执行。
(网上的方法能走通是因为他们都GOTO了或在选项那行EXIT了)- @echo off
- Title choice命令功能测试3
- :menu1
- echo.
- echo 1:起床
- echo.
- echo 2:睡觉
- echo.
- echo 3:退出
- echo.
- choice /C:123 /M "请选择:"
- if errorlevel 3 echo.你选择了 3&pause
- if errorlevel 2 echo.你选择了 2&pause
- if errorlevel 1 echo.你选择了 1&pause
- if errorlevel 0 echo.你Ctrl+Break 或 Ctrl+C了?好像到不了这? &pause
- echo debug: hmm...
- goto :menu1
- exit /B
复制代码
求大神详解一下1、网上if errorlevel 1这种用法到底什么意思?
2、如果if errorlevel 1是有效的,那为何会如果不跳转或退出,会依次执行小于等于选择值的选项?
3、如果if errorlevel 1是无效的(用原true),那为何选2的时候,选项3又不会执行?
作者: qixiaobin0715 时间: 2022-2-22 11:24
if errorlevel number这个句子必须放在某一个命令的后面,执行该命令后才由if errorlevel来判断命令的返回值。返回值number的数字取值范围0~255。返回值大于等于指定值时,条件成立。
DOS命令在运行完后都有返回码,返回码为0表明程序执行正确,执行错误会返回非0数值,虽然一般都是返回1,但不能认为错误的返回值就是1,具体返回什么值,要看具体命令。
作者: Echo11 时间: 2022-2-22 11:56
if errorlevel number这个句子必须放在某一个命令的后面,执行该命令后才由if errorlevel来判断命令的返回值 ...
qixiaobin0715 发表于 2022-2-22 11:24
感谢。
那就是说明测试没有问题。
感觉网上的用法不严谨吧,如果不goto掉或exit掉,就会执行所有满足返回值大于等于指定值的条件。
作者: Batcher 时间: 2022-2-22 17:48
回复 1# Echo11
参考if命令教程第13页
http://bbs.bathome.net/thread-31727-1-1.html
如果看完之后还是不明白,我再想想其他办法。
作者: Echo11 时间: 2022-2-22 19:44
回复 4# Batcher
已经懂了。谢谢。PPT不错,已下载。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |