中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-01 20:19
48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,249 会员排行
DOS批处理 & 脚本技术(批处理室) » 还是error level的问题
可打印版本  1,156 / 8
第1楼 wingofsea 发表于 2006-06-02 22:49
初级用户 发帖 34 积分 124
还是error level的问题
比如copy 命令,如何判断这个copy命令是否执行成功?有哪些异常?
如:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\

IF ERRORLEVEL = = 4 ECHO 拷贝过程中写盘错误
IF ERRORLEVEL = = 3 ECHO 预置错误阻止文件拷贝操作
IF ERRORLEVEL = = 2 ECHO 用户通过ctrl-c中止拷贝操作
IF ERRORLEVEL = = 1 ECHO 未找到拷贝文件
IF ERRORLEVEL = = 0 ECHO 成功拷贝文件

那 rmdir 以及 mkdir呢?
第2楼 willsort 发表于 2006-06-03 20:17
元老会员 发帖 1,512 积分 4,432
Re wingofsea:

在CMD环境中,copy等大多数内部命令都至少两个errorlevel,正常执行为0,执行出错为1,在比较复杂的命令中,才会将错误情况进行分级处理,出现2/3/4/255等errorlevel。

需要注意的是,在COMMAND等非CMD环境中,所有的内部命令均不设置和修改errorlevel,此时的错误捕捉是比较复杂的,尚无较好的方案。

另外,类似 "IF ERRORLEVEL = = 4 ECHO 拷贝过程中写盘错误" 是错误的,因为命令行中的“=”相当于空格而被忽略,而if erroelevl 4 意为如果errorlevel大于等于4。所以,在以上语句中,当errorlevel为4时,以上错误将全部显示。正确的用法应该是:

IF ERRORLEVEL 4 IF NOT ERRORLEVEL 5 ECHO 拷贝过程中写盘错误
IF ERRORLEVEL 3 IF NOT ERRORLEVEL 4 ECHO 预置错误阻止文件拷贝操作
IF ERRORLEVEL 2 IF NOT ERRORLEVEL 3 ECHO 用户通过ctrl-c中止拷贝操作
IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 ECHO 未找到拷贝文件
IF NOT ERRORLEVEL 1 ECHO 成功拷贝文件

以上的用法在CMD和COMMAND均有效,在CMD中还可使用:

IF %ERRORLEVEL%==4 ECHO 拷贝过程中写盘错误
IF %ERRORLEVEL%==3 ECHO 预置错误阻止文件拷贝操作
IF %ERRORLEVEL%==2 ECHO 用户通过ctrl-c中止拷贝操作
IF %ERRORLEVEL%==1 ECHO 未找到拷贝文件
IF %ERRORLEVEL%==0 ECHO 成功拷贝文件
第3楼 seifer1754 发表于 2006-06-06 09:06
初级用户 发帖 9 积分 26
willsort 版主,
是否所有的命令返回码 都可以看作 返回“0” 表示成功运行该指令,
返回“1” 表示指令运行中有错误?
第4楼 willsort 发表于 2006-06-06 18:07
元老会员 发帖 1,512 积分 4,432
Re seifer1754:

请注意我在2楼中表述中相关限定词:

1、“在CMD环境中”,在COMMAND(包括DOS/9X/NT's)中,内部命令没有errorlevel,所以内部命令的errorlevel是NT系列命令扩展特性的一部份。

2、“copy等大多数”,也有一些内部命令至今未发现有errorlevel,比如set等。

3、“内部命令”,外部命令几乎均有errorlevel,但很多都只有0,无论执行是否出错;还有一些有自己特殊的errorlevel,比如DOS中的choice.com,是根据键入字符在侯选字符表中的位置来返回errorlevel的,若用户按了CTRL+BREAK 或CTRL+C终止choice运行会返回0。
第5楼 qdcr 发表于 2006-07-05 17:45
初级用户 发帖 32 积分 120
谢谢版主的解释,如果是这样的一个需求:

1. 首先检查c:\program files\utility目录下是否有setup.exe文件
2.如果有, 则首先备份该setup.exe文件到c:\back。备份成功,则用c:\setup.exe 替换c:\program files\utility\setup.exe. 备份失败,则提示用户,并程序退出。
3.如果c:\program files\utility下没有setup文件,则拷贝c:\setup.exe到c:\program files\utility\setup.exe。并判断拷贝是否成功.

如果copy命令没有errorlevel的话,怎么来判断copy动作是否成功呢?

[ Last edited by qdcr on 2006-7-5 at 17:48 ]
第6楼 qdcr 发表于 2006-07-05 18:15
初级用户 发帖 32 积分 120
看到版主另外一个帖子上说,
http://www.cn-dos.net/forum/viewthread.php?tid=20952&fpage=1&highlight=%2Bwingofsea
“一般以预防为主,善后为辅,在错误发生之前,我们要能判断出错误发生的各种可能性,然后进行抛出处理。”
copy操作有如下可能:
1.磁盘空间不足
2.只读文件不能被替换
请问如何处理这两个异常
第7楼 fastslz 发表于 2006-07-05 18:22
铂金会员 发帖 2,315 积分 5,493 来自 上海
磁盘空间不足处理不用解释了吧
替换只读文件用xcopy /h /r /y
第8楼 qdcr 发表于 2006-07-05 19:42
初级用户 发帖 32 积分 120
to fastslz:
当磁盘空间不足时,希望程序给出提示信息并退出.所以希望能捕获到这类错误
第9楼 fastslz 发表于 2006-07-05 21:31
铂金会员 发帖 2,315 积分 5,493 来自 上海
这个还真没研究过,帮不了
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023