![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 10:43 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 对%errorlevel%的理解 |
| 可打印版本 1,108 / 3 |
| 第1楼 rs369007 | 发表于 2010-05-02 16:28 |
| 初级用户 发帖 131 积分 147 | |
|
对%errorlevel%的理解 这里首先建议大家在不清楚errorlevel真实变化情况,和其值具体代表什么意思时,最好不要使用 if %errorlevel% 去判断命令是否执行成功。
下面是我写的一个判断程序是否在被内存加载c程序. 经过反复测试,我发现这个程序的return value;这个value就是cmd下全局变量errorlevel的值. %errorlevel%的值,在批处理中有些时候使用内部命令或第三方工具,内部命令完成时可能并没设置errorlevel的值,或外部程序的返回时,并没有按要求返回,下面具体说明: 一般在批处理里面,命令执行没有出问题,成功执行,%errorlevel% 通常会被设置为 0 命令没有成功执行,%errorlevel% 值一般会被设置大于 0,如1,2等值 1,但是可能有少数一些内部命令(我目前还没发现这类命令,现在只是假设存在这类命令),并没有设置errorlevel值, 如果用%errorlevel%去判断,这类命令是否成功执行,就似乎不可行。如果你连续使用if errorlevel 判断,前一个出现错误,而后面的命令恰恰属于这类没有设置errorlevel的情况,脚本就会fall through 2,第三方工具,有时更是如此,比如第三方程序正常结束退出,我用一句 return 2;这样命令成功执行,返回值不是零而是2,%errorlevel%也是2。 同理程序非正常退出,我也可以return 0;这样完全和批处理脚本默认情况相反。 我这个程序运行时 %errorlevel%的值变化 prodetect qq.exe>nul if %errorlevel% EQU -1 ---------表示没在内存 if %errorlevel% EQU 0 ---------表示正在运行 因此建议大家使用if %errorlevel% ... 时一定要谨慎,不要随意使用这种判断,特别是使用第三方工具时。 下载测试地址: http://www.cn-dos.net/forum/viewthread.php?tid=50938&page=1&sid=yUXO5q### [ Last edited by rs369007 on 2010-5-2 at 17:08 ] |
|
| 第2楼 qzwqzw | 发表于 2010-05-02 17:05 |
| 银牌会员 发帖 636 积分 2,343 | |
|
提供以下的链接仅供参考
批处理内部命令对错误返回码errorlevel的影响 http://www.bathome.net/thread-7479-1-1.html set命令在.bat和.cmd中不同的errorlevel表现 http://www.cn-dos.net/forum/viewthread.php?tid=30968&page=3#pid217157 bat与.cmd到底有何区别 http://www.bathome.net/thread-7758-1-1.html |
|
| 第3楼 rs369007 | 发表于 2010-05-02 17:24 |
| 初级用户 发帖 131 积分 147 | |
|
不知在c内部可不可以直接改变 errorlevel的值?
#include <stdio.h> int main(int argc,char *argv[],char* envp[]) { int num=0; while(envp[num]!=NULL) { puts(envp[num]); ++num; } return 0; } |
|
| 第4楼 qzwqzw | 发表于 2010-05-02 17:36 |
| 银牌会员 发帖 636 积分 2,343 | |
|
C或者其它语言改变errorlevel
只需要Return对应的值就可以了 不需要直接读写%errorlevel%变量 而且也无法直接读写%errorlevel%变量 因为这个变量是个动态的系统状态值 并不实际存储在变量空间 它与变量=ExitCode有关但不具有一一对应关系 另外if errorlevel 1和if %errorlevel%==1 都是判断errorlevel的一种形式 但二者无论从效果和细节都有很大差异 不能等同对待 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |