|
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
状态 离线
|
|
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 来自 上海
状态 离线
|
|
2006-7-5 21:31 |
|