![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-04 04:36 |
共 48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » if errorlevel的一点疑惑 |
| 可打印版本 1,601 / 11 |
| 第1楼 hhl | 发表于 2006-10-30 08:19 |
| 初级用户 发帖 14 积分 35 | |
|
if errorlevel的一点疑惑 在这个帖子中“手把手教你写批处理”http://www.cn-dos.net/forum/viewthread.php?tid=13456&fpage=1,提到:
IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。 因此下面的批处理文件是错误的: @ECHO OFF XCOPY C:\AUTOEXEC.BAT D:\ IF ERRORLEVEL 0 ECHO 成功拷贝文件 IF ERRORLEVEL 1 ECHO 未找到拷贝文件 IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作 IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作 IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误 无论拷贝是否成功,后面的: 未找到拷贝文件 用户通过ctrl-c中止拷贝操作 预置错误阻止文件拷贝操作 拷贝过程中写盘错误 都将显示出来。 ----------------------------------------------------------------------------------------------------- 我试了一下,成功的时候,只有0的提示,而错误的时候所有的提示都会有。 至于成功的时候只有0的提示,可以理解。 但是,当我拷贝一个不存在的文件的时候,为什么所有提示都会有呢? 按照“手把手教你写批处理”中的说法“if errorlevel 比较返回码的判断条件并非等于, 而是大于等于.”,errorlevel的返回值应该是1,而只应该有0,1的提示。 不知道我的理解哪里出了问题。 我的环境:Win2003+SP1 [ Last edited by hhl on 2006-10-30 at 08:20 AM ] |
|
| 第2楼 fastslz | 发表于 2006-10-30 08:33 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
试试这个
@ECHO OFF XCOPY C:\AUTOEXEC.BAT D:\ IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 ECHO 成功拷贝文件 IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 ECHO 未找到拷贝文件 IF ERRORLEVEL 2 IF NOT ERRORLEVEL 3 ECHO 用户通过ctrl-c中止拷贝操作 IF ERRORLEVEL 3 IF NOT ERRORLEVEL 4 ECHO 预置错误阻止文件拷贝操作 IF ERRORLEVEL 4 IF NOT ERRORLEVEL 5 ECHO 拷贝过程中写盘错误 |
|
| 第3楼 hhl | 发表于 2006-10-30 08:50 |
| 初级用户 发帖 14 积分 35 | |
|
楼上的老哥,不要吧,这种从小到大的排序本身就是有问题的,即便加了一个判断,也没什么意义啊。
|
|
| 第4楼 fastslz | 发表于 2006-10-30 09:03 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
试一下吧!成功的时候,只有0的提示,而错误时不会全部提示了
测试XCOPY返回值 返回值并不是很精确,只要达到批处理中的要求就行~ |
|
| 第5楼 electronixtar | 发表于 2006-10-30 09:11 |
| 铂金会员 发帖 2,672 积分 7,493 | |
|
恩,给版主们提一个意见,很多老精华贴没有设计到 NT Batch 的内容,希望版主们能加上 NT 批处理的新鲜血液
|
|
| 第6楼 yangzhiyi | 发表于 2006-10-31 00:52 |
| 中级用户 发帖 123 积分 261 | |
|
而且返回值必须依照从大到小次序顺序判断
IF ERRORLEVEL 1 ECHO 成功拷贝文件 IF ERRORLEVEL 0 ECHO 未找到拷贝文件 |
|
| 第7楼 vkill | 发表于 2006-10-31 01:15 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
貌似fastslz兄写错了,应该从大到小吧!
|
|
| 第8楼 3742668 | 发表于 2006-10-31 01:22 |
| 荣誉版主 发帖 718 积分 2,013 | |
IF ERRORLEVEL 0 ECHO 成功拷贝文件 上面的错误返回值大概是DOS下xcopy中的返回值吧,在XP中,文件不存在的返回值为4,相信2003中应该类似. 建议你用下面的脚本先测试一下errorlevel的实际值: 如果环境不是在DOS下尽量不要使用if errorlevel number的格式来判断返回值,而用if %errorlevel% == Number ...的格式. 为楼主这种知其然且究其所以然的态度而回贴. |
|
| 第9楼 fastslz | 发表于 2006-10-31 02:03 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1参数个人认为是从大到小或小到大没前者严格
|
|
| 第10楼 不得不爱 | 发表于 2006-10-31 02:50 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
不过在纯DOS下没有%errorlevel%
|
|
| 第11楼 hhl | 发表于 2006-10-31 10:52 |
| 初级用户 发帖 14 积分 35 | |
|
谢谢3742668斑竹,受教了。
经检验,2003系统使用xcopy命令,若未见不存在errorlevel返回4,这样谜团尽失。 一定仅尊教诲:尽量不要使用if errorlevel number的格式来判断返回值,而用if %errorlevel% == Number ...的格式. |
|
| 第12楼 mtiankong | 发表于 2007-04-16 07:28 |
| 初级用户 发帖 38 积分 70 | |
Originally posted by 3742668 at 2006-10-30 12:22 PM: 受教了 :P:P:P:P:P |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |