楼 主
还是error level的问题
发表于 2006-06-02 22:49 · 中国 北京 联通
初级用户
★
积分 124 发帖 34 注册 2006-05-23 11:38 20年会员 UID 55845
状态 离线
比如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 楼
发表于 2006-06-03 20:17 · 中国 山西 临汾 中移铁通
元老会员
★★★★
Batchinger
积分 4,432 发帖 1,512 注册 2002-10-18 00:00 23年会员 UID 19 性别 男
状态 离线
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:请访问
批处理编程的异类 ,欢迎交流与共享批处理编程心得!
第 3 楼
发表于 2006-06-06 09:06 · 中国 上海 普陀区 电信
初级用户
★
积分 26 发帖 9 注册 2006-03-16 16:57 20年会员 UID 52194
状态 离线
willsort 版主,
是否所有的命令返回码 都可以看作 返回“0” 表示成功运行该指令,
返回“1” 表示指令运行中有错误?
第 4 楼
发表于 2006-06-06 18:07 · 中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432 发帖 1,512 注册 2002-10-18 00:00 23年会员 UID 19 性别 男
状态 离线
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:请访问
批处理编程的异类 ,欢迎交流与共享批处理编程心得!
第 5 楼
发表于 2006-07-05 17:45 · 中国 北京 联通
初级用户
★
积分 120 发帖 32 注册 2006-06-19 16:31 20年会员 UID 57256
状态 离线
谢谢版主的解释,如果是这样的一个需求:
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 楼
发表于 2006-07-05 18:15 · 中国 北京 联通
初级用户
★
积分 120 发帖 32 注册 2006-06-19 16:31 20年会员 UID 57256
状态 离线
第 7 楼
发表于 2006-07-05 18:22 · 中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493 发帖 2,315 注册 2006-05-01 10:41 20年会员 UID 54766 性别 男 来自 上海
状态 离线
磁盘空间不足处理不用解释了吧
替换只读文件用xcopy /h /r /y
第 8 楼
发表于 2006-07-05 19:42 · 中国 北京 联通
初级用户
★
积分 120 发帖 32 注册 2006-06-19 16:31 20年会员 UID 57256
状态 离线
to fastslz:
当磁盘空间不足时,希望程序给出提示信息并退出.所以希望能捕获到这类错误
第 9 楼
发表于 2006-07-05 21:31 · 中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493 发帖 2,315 注册 2006-05-01 10:41 20年会员 UID 54766 性别 男 来自 上海
状态 离线
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正