中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: if errorlevel的一点疑惑 上一主题 | 下一主题
hhl
初级用户





积分 35
发帖 14
注册 2006-10-16
状态 离线
『楼 主』:  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 ]

2006-10-30 08:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


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

试试这个
@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 拷贝过程中写盘错误



第一高手    第二高手

2006-10-30 08:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hhl
初级用户





积分 35
发帖 14
注册 2006-10-16
状态 离线
『第 3 楼』:  

楼上的老哥,不要吧,这种从小到大的排序本身就是有问题的,即便加了一个判断,也没什么意义啊。

2006-10-30 08:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


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

试一下吧!成功的时候,只有0的提示,而错误时不会全部提示了

测试XCOPY返回值
@echo off
XCOPY /h /y C:\boot.ini D:\
echo.
for /l %%i in (254,-1,0) do IF "%ERRORLEVEL%"=="%%i" echo 当前ERRORLEVEL返回值为%%i
echo.
pause
返回值并不是很精确,只要达到批处理中的要求就行~



第一高手    第二高手

2006-10-30 09:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 5 楼』:  

恩,给版主们提一个意见,很多老精华贴没有设计到 NT Batch 的内容,希望版主们能加上 NT 批处理的新鲜血液




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-10-30 09:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yangzhiyi
中级用户





积分 261
发帖 123
注册 2006-6-6
状态 离线
『第 6 楼』:  

而且返回值必须依照从大到小次序顺序判断
IF ERRORLEVEL 1 ECHO 成功拷贝文件
IF ERRORLEVEL 0 ECHO 未找到拷贝文件

2006-10-31 00:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 7 楼』:  

貌似fastslz兄写错了,应该从大到小吧!

2006-10-31 01:15
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 8 楼』:  



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

上面的错误返回值大概是DOS下xcopy中的返回值吧,在XP中,文件不存在的返回值为4,相信2003中应该类似.
建议你用下面的脚本先测试一下errorlevel的实际值:
@ECHO OFF
    XCOPY C:\AUTOEXEC.BAT D:\  2>nul 1>nul
    echo %errorlevel%
pause
如果环境不是在DOS下尽量不要使用if errorlevel number的格式来判断返回值,而用if %errorlevel% == Number ...的格式.
为楼主这种知其然且究其所以然的态度而回贴.

2006-10-31 01:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


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

IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1参数个人认为是从大到小或小到大没前者严格



第一高手    第二高手

2006-10-31 02:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 10 楼』:  

不过在纯DOS下没有%errorlevel%



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-31 02:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hhl
初级用户





积分 35
发帖 14
注册 2006-10-16
状态 离线
『第 11 楼』:  

谢谢3742668斑竹,受教了。
经检验,2003系统使用xcopy命令,若未见不存在errorlevel返回4,这样谜团尽失。
一定仅尊教诲:尽量不要使用if errorlevel number的格式来判断返回值,而用if %errorlevel% == Number ...的格式.

2006-10-31 10:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
mtiankong
初级用户





积分 70
发帖 38
注册 2007-3-24
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by 3742668 at 2006-10-30 12:22 PM:

上面的错误返回值大概是DOS下xcopy中的返回值吧,在XP中,文件不存在的返回值为4,相信2003中应该类似.
建议你用下面的脚本先测试一下errorlevel的实际值 ...

受教了  :P:P:P:P:P

2007-4-16 07:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: