中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 还是error level的问题 上一主题 | 下一主题
wingofsea
初级用户





积分 124
发帖 34
注册 2006-5-23
状态 离线
『楼 主』:  还是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呢?

2006-6-2 22:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 2 楼』:  

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 成功拷贝文件



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-3 20:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
seifer1754
初级用户





积分 26
发帖 9
注册 2006-3-16
状态 离线
『第 3 楼』:  

willsort 版主,
是否所有的命令返回码 都可以看作 返回“0” 表示成功运行该指令,
返回“1” 表示指令运行中有错误?

2006-6-6 09:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 4 楼』:  

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。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-6 18:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 5 楼』:  

谢谢版主的解释,如果是这样的一个需求:

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 ]

2006-7-5 17:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 6 楼』:  

看到版主另外一个帖子上说,
http://www.cn-dos.net/forum/view ... hlight=%2Bwingofsea
“一般以预防为主,善后为辅,在错误发生之前,我们要能判断出错误发生的各种可能性,然后进行抛出处理。”
copy操作有如下可能:
1.磁盘空间不足
2.只读文件不能被替换
请问如何处理这两个异常

2006-7-5 18:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 7 楼』:  

磁盘空间不足处理不用解释了吧
替换只读文件用xcopy /h /r /y

2006-7-5 18:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 8 楼』:  

to fastslz:
当磁盘空间不足时,希望程序给出提示信息并退出.所以希望能捕获到这类错误

2006-7-5 19:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 9 楼』:  

这个还真没研究过,帮不了

2006-7-5 21:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: