中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS启动盘 & LOGO技术 (启动盘室) » [讨论] "errorlevel" 你知多少?--------应用实例
作者:
标题: [讨论] "errorlevel" 你知多少?--------应用实例 上一主题 | 下一主题
dosz
中级用户

一看二跟三动手


积分 396
发帖 188
注册 2005-10-23
来自 上海
状态 离线
『楼 主』:  [讨论] "errorlevel" 你知多少?--------应用实例

[讨论] "errorlevel" 你知多少?--------应用实例 要求: 1.添加注解, 用REM:或 :: 2.说明通过的测试环境 用法:IF [NOT] ERRORLEVEL 错误返回代号 命令 [命令参数] 意义:如果错误返回代号[不]大于或等于指定的代号将执行某个命令。 其中,ERRORLEVEL表示错误返回代号,很有用。对于很多DOS命令,由于执行的结果不同(如执行成功,执行失败,或被用户中断等),这些命令会返回不同的代号,以表示不同的结果。IF ERRORLEVEL命令就根据这个不同结果而产生的不同代号来执行不同的命令,通常用在某条命令之后。如IF ERRORLEVEL 1 ECHO OK!表示如果当前的错误返回代号大于或等于1时将在屏幕上显示“OK!”的字样。


2006-2-18 07:05
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
sxhc6868
初级用户





积分 50
发帖 19
注册 2006-2-15
状态 离线
『第 2 楼』:  

好贴子,顶,基础的技术性贴子就要顶!


2006-2-18 19:11
查看资料  发送邮件  发短消息  网志  OICQ (149768318)  编辑帖子  回复  引用回复
dosz
中级用户

一看二跟三动手


积分 396
发帖 188
注册 2005-10-23
来自 上海
状态 离线
『第 3 楼』:  

@echo off copy C:\BOOT.INI>nul : :在CMD中都是用echo %errorlevel%来获得错误返回码 echo 获得错误返回码为%errorlevel% pause if errorlevel 1 echo 1执行失败 if errorlevel 0 echo 0执行成功 pause exit ===============================


2006-2-18 20:56
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

Re dosz: 建议兄将3楼的例程修改一下,以免使一些初学者迷惑:
@echo off
copy C:\BOOT.INI>nul
:: 在CMD中都是用echo %errorlevel%来获得错误返回码
echo 获得错误返回码为%errorlevel%
pause

if errorlevel 1 echo "errorlevel >= 1"
if errorlevel 0 echo "errorlevel >= 0"

if errorlevel 1 goto fail
echo 程序执行成功,继续
echo.
goto end

:fail
echo 程序执行失败,退出!
echo.
goto end

:end
pause
exit




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

一看二跟三动手


积分 396
发帖 188
注册 2005-10-23
来自 上海
状态 离线
『第 5 楼』:  

谢谢版主,我是在学习错误返回码,你给我指点我非常高兴. :: 问题:为什么程序执行失败时,为同时显示"errorlevel >= 1"和"errorlevel >= 0" :: 我不明白.所以我用了 if errorlevel 1 echo 1执行失败 if errorlevel 0 echo 0执行成功 来区别 [ Last edited by dosz on 2006-2-25 at 12:08 ]


2006-2-25 12:02
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

Re dosz: 这是很正常的,因为你在主楼中也提到了 if errorlevel 的比较方式是“大于或等于”。而如果一个执行出错,通常会返回一个非0的错误号,同时因为DOS是以无符号整型数的方式处理错误号的,所以非0也即大于0,也即大于等于1的证书,那么 if errorlevel 1 和 if errorlevel 0 的条件当然都会被满足。 而至于 DOS 命令的错误返回码为何通常会是正常执行为0,出现错误后非0,与一些高级语言恰好相反。那是因为 DOS 命令往往需要根据错误类型对错误进行分类处理,而0只有一个序号,不能表达多种错误类型,所以只有分配给正常执行的情况。而在那些高级语言的编程环境中恰好相反,往往需要将正确执行的结果进行分类处理,而错误情况只需要直接抛给专属错误处理模块即可。


   此帖被 +1 点积分    点击查看详情   
评分人:【 分数: +1  时间:2009-10-31 08:23




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

一看二跟三动手


积分 396
发帖 188
注册 2005-10-23
来自 上海
状态 离线
『第 7 楼』:  

errorlevel 的比较方式是“大于或等于”。 这个我以前好象没有想得那么周到, 不过经你提示,我再看DOS执行时理解了, 在此,感谢你百忙之中给我回复。 [ Last edited by dosz on 2006-2-25 at 17:59 ]


2006-2-25 17:33
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
371770923
初级用户





积分 50
发帖 19
注册 2007-5-22
状态 离线
『第 8 楼』:  

if errorlevel好象还有这句用法(if "errorlevel"...... =????)具体的不怎么清楚 版主能不能介绍一下


2007-5-29 15:29
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
koala
初级用户

Batchs上議院參議長


积分 199
发帖 105
注册 2007-6-5
来自 江苏
状态 离线
『第 9 楼』:  发一个我翻译的 errorleve(译本)l

Allenware.com 批处理图书馆 批处理命令返回的ERRORLEVELs报告 仅用于 Windows 95/98/ME ===版本 此文档是1.04版 可以在我们的网站上找到这个ERRORLEVELs当前最新版本: www.allenware.com/mcsw/errorle ... ===坚决拒绝 此压缩包免费使用,并且他仅用于教育与学习用途.使用他完全是遵照你 个人的意愿,由此产生的问题由你自己负责.我们不担保此文件有可能给 您带来的损失.除非所有贵重数据已经安全的完成备份并且你知道怎样 进行恢复数据,否则请您决不要在电脑上测试使用. ===在批处理文件中使用 ERRORLEVELs 想要了解怎样进行测试的详细信息以及遵守章则和(我们免费提供的)批处理 命令返回的ERRORLEVEL值与交互式的批处理课程. 你可以通过以下地址了解 一下详细的课程提纲和课程索引: www.allenware.com/icsw/icswidx.htm ===Windows 95/98/ME 中的 ERRORLEVELs 大多数情况下普通外部命令操作返回的ERRORLEVEL值为0,并且这通常预示 着命令的运行并没有发生错误.在使用 FIND 的情况下,ERROELEVEL返回值 为0则预示着目标字符串已经发现(内存中表示为f0und),并且ERROELEVEL 返回值为1则预示着未发现目标字符串(内存中表示为m1ssing).以下列表 内容是通过外部程序运行反馈的ERRORLEVELs值的详细信息. 在 Windows 95/98/ME中,外部命令(既COMMAND.COM中的那些编码)则无须 更改当前ERRORLEVEL值. 注意: 命令名/? 除非另作说明,否则(使用在线帮助转到常规简短帮助)的 返回ERRORLEVEL值就为0. 注意:当命令行遇到一个未就绪的设备(可能会导致出现'中止,重试,失败'的信息) 你的回应(或者在COMMAND.COM /f/c自动提供的'失败-继续'命令解释器) 有时可能会影响到命令行预期返回的ERRORLEVEL值. ATTRIB.EXE (a) 未发现 目标文件/文件夹 = ERRORLEVEL 1 (b) 命令行开关无效 = ERRORLEVEL 1 (c) 属性分配冲突 (目标文件未在使用) = ERRORLEVEL 1 (d) 指明的驱动器无效 = ERRORLEVEL 1 (e) 驱动器未就绪 (回复要么中止要么失败) = ERRORLEVEL 1 (f) 输入的参数无效(或者错误) = ERRORLEVEL 1 CHOICE.COM (a) 用于具有问答性的回复菜单, 并且回复菜单中的nn = ERRORLEVEL nn (此问答性菜单跳转的批处理位置 = 由CHOICE返回的代码决定) (b) 无效命令行开关 = ERRORLEVEL 255 (c) 无效的命令行语法开关 = ERRORLEVEL 255 (d) 默认情况下超时选项不在回复菜单列 = ERRORLEVEL 255 (e) choice /? = ERRORLEVEL 255 CSCRIPT.EXE (a) 未发现脚本文件 = ERRORLEVEL 1 (b) 文件没有扩展的脚本引擎 = ERRORLEVEL 1 (c) 没有扩展的脚本文件 = ERRORLEVEL 1 (d) 驱动器未就绪 = ERRORLEVEL 1 (这里没有'中止, 重试, 失败'等选择余地) DELTREE.EXE (a) 缺少必要的参数 = ERRORLEVEL 1 (b) 无效命令行开关 = ERRORLEVEL 1 (c) deltree /? = ERRORLEVEL 1 (d) 预读取的驱动器为就绪 (回复:中止) = ERRORLEVEL 18 (注意: 如果失败则ERRORLEVEL的返回值为 0) EXTRACT.EXE (a) 无效命令行开关 = ERRORLEVEL 1 FC.EXE (a) 大量的文件规范不足 = ERRORLEVEL 1 (b) 命令行的文件名太长 = ERRORLEVEL 1 (c) 属性分配冲突(并且中止回应) = ERRORLEVEL 5 (注意: 如果失败则ERRORLEVEL的返回值为 0) (d) 驱动器未就绪 = ERRORLEVEL 18 (注意: 如果失败则ERRORLEVEL的返回值为 0) FIND.EXE (a) 目标字符串已发现(内存表示法=f0und) = ERRORLEVEL 0 (b) 未发现目标字符串(内存表示法=m1ssing) = ERRORLEVEL 1 (c) find /? = ERRORLEVEL 1 (d) 参数格式不正确 = ERRORLEVEL 2 (e) 未发现指定搜索的文件 = ERRORLEVEL 2 (f) 指定的文件正在使用(回复:失败) = ERRORLEVEL 2 (g) 驱动器未就绪(回复:失败) = ERRORLEVEL 2 (h) 指定的文件正在使用(回复:中止) = ERRORLEVEL 5 (i) 驱动器未就绪(回复:中止) = ERRORLEVEL 5 FORMAT.COM (a) 驱动器未就绪 = ERRORLEVEL 4 (这里没有'中止, 重试, 失败'等选择余地) FTP.EXE (a) 简短帮助 (使用: ftp -h 获得简短帮助) = ERRORLEVEL 2 (b) 打开脚本文件时发生错误 (文件丢失) = ERRORLEVEL 2 (c) 无效命令行开关 = ERRORLEVEL 2 KEYB.COM (a) 无效命令行开关 = ERRORLEVEL 1 (b) 指定的键盘编码无效 = ERRORLEVEL 1 (c) keyb /? = ERRORLEVEL 1 MEM.EXE (a) 无效命令行开关 = ERRORLEVEL 1 MODE.COM (a) 无效的参数 = ERRORLEVEL 1 (b) 无效命令行开关 = ERRORLEVEL 1 MORE.COM (a) 无效命令行开关 (MORE不接受命令行开关) = ERRORLEVEL 1 (b) 驱动器未就绪(回复:中止) = ERRORLELEL 5 (注意: 如果失败则ERRORLEVEL的返回值为 0) MOVE.EXE (a) 必要的参数丢失 = ERRORLEVEL 1 (b) 无法创建目标文件 = ERRORLEVEL 1 (c) 无法打开源文件 = ERRORLEVEL 1 (当你尝试着从一个驱动器的文件夹将文件移动到其他驱动器文件夹 的时候你将会看到提示此信息.跟随DELTREE着,你需要使用 XCOPY /S, 当 MOVE 未从一个文件夹操作移动到另一个文件夹的时候) (d) 属性分配冲突(回复:失败) = ERRORLEVEL 1 (注意: 在这种情况下, 文件仍然在复制(不是移动)) (e) 属性分配冲突(回复:中止) = ERRORLEVEL 5 (注意: 在这种情况下, 文件仍然在复制(不是移动)) (f) 驱动器未就绪(回复:中止) = ERRORLEVEL 18 (注意: 回复失败的情况下,通常ERRORLEVEL的值很少会返回 1) PING.EXE (a) 未知主机 = ERRORLEVEL 1 (通常是指在'域名服务系统'未发现这个主机名字) (b) 简短帮助(无须参数) = ERRORLEVEL 1 注意: 对于 使用 PING /? 开关获得简短帮助, ERRORLEVEL的返回值为 0 (c) 无效命令行开关 = ERRORLEVEL 1 (然而简短帮助却会正常显示) (d) 用 [Ctrl-C]打断批处理任务 = ERRORLEVEL 255 SORT.EXE (a) 无效命令行开关 = ERRORLEVEL 1 (b) 驱动器未就绪(回复:中止) = ERRORLEVEL 15 (注意: 如果失败则ERRORLEVEL的返回值为 0) START.EXE (a) start /? (实模式) = ERRORLEVEL 1 (b) start /? (图形界面模式) = ERRORLEVEL 255 (c) START无法查找到指明的文件 = ERRORLEVEL 255 (d) 指定的文件尚未关联 = ERRORLEVEL 255 (e) 驱动器未就绪 = ERRORLEVEL 255 (这里没有'中止, 重试, 失败'等选择余地) SUBST.EXE (a) 无效的参数 = ERRORLEVEL 1 (b) 无效命令行开关 = ERRORLEVEL 1 (c) 指定路径未发现 = ERRORLEVEL 1 (d) 驱动器未就绪(回复:中止) = ERRORLEVEL 21 (注意: 回复失败的情况下,通常ERRORLEVEL的值很少会返回 1) TRACERT.EXE (a) 不能解析目标系统名 = ERRORLEVEL 1 (通常是指在'域名服务系统'未发现这个主机名字) (b) 无效命令行开关 = ERRORLEVEL 1 (c) 简短帮助(无须参数) = ERRORLEVEL 1 (d) 用 [Ctrl-C]打断批处理任务 = ERRORLEVEL 255 注意:想要获取TRACERT的简短帮助, 输入不带参数的命令行 XCOPY.EXE (a) 未发现文件 = ERRORLEVEL 1 (b) 日期开关 /d 无效 = ERRORLEVEL 4 (c) 无效的命令行参数 = ERRORLEVEL 4 (d) 参数无效 = ERRORLEVEL 4 (e) 驱动器未就绪 = ERRORLEVEL 4 (f) 无法创建目录 = ERRORLEVEL 4 (g) 系统无法查找到指定文件 = ERRORLEVEL 5 (例如源文件指向NUL空设备的时候就会发生这种现象) 想要了解怎样进行测试的详细信息以及遵守章则和(我们免费提供的)批处理 命令返回的ERRORLEVEL值与交互式的批处理课程. 你可以通过以下地址了解 一下详细的课程提纲和课程索引: www.allenware.com/icsw/icswidx.htm William 和 Linda Allen合著 创造性的技术性著作 www.allenware.com/ (c) 著作权(C) Allen与其公司 2005 - 版权所有(C)




『生如夏花之绚烂 死若秋叶之静美』 dos做到了
2007-7-14 10:52
查看资料  发送邮件  发短消息  网志  OICQ (13019940)  编辑帖子  回复  引用回复
wordexport
初级用户




积分 87
发帖 42
注册 2007-9-27
状态 离线
『第 10 楼』:  

先顶一下.学到了


2007-10-4 23:04
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
soyo
新手上路





积分 18
发帖 10
注册 2007-10-29
状态 离线
『第 11 楼』:  

谢了


2007-10-30 21:49
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
hxwxyz
中级用户




积分 245
发帖 123
注册 2007-6-8
状态 离线
『第 12 楼』:  

学习了 谢谢


2007-10-31 19:10
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 13 楼』:  

好东西 不能沉了




2008-8-19 16:23
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (523066680)  编辑帖子  回复  引用回复

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


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



论坛跳转: