![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-06 09:31 |
共 47,812 主题排行 / 349,914 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS启动盘 & LOGO技术 (启动盘室) » [讨论] "errorlevel" 你知多少?--------应用实例 |
| 可打印版本 2,919 / 12 |
| 第1楼 dosz | 发表于 2006-02-18 07:05 |
| 中级用户 发帖 188 积分 396 来自 上海 | |
|
[讨论] "errorlevel" 你知多少?--------应用实例 [讨论] "errorlevel" 你知多少?--------应用实例
要求: 1.添加注解, 用REM:或 :: 2.说明通过的测试环境 用法:IF [NOT] ERRORLEVEL 错误返回代号 命令 [命令参数] 意义:如果错误返回代号[不]大于或等于指定的代号将执行某个命令。 其中,ERRORLEVEL表示错误返回代号,很有用。对于很多DOS命令,由于执行的结果不同(如执行成功,执行失败,或被用户中断等),这些命令会返回不同的代号,以表示不同的结果。IF ERRORLEVEL命令就根据这个不同结果而产生的不同代号来执行不同的命令,通常用在某条命令之后。如IF ERRORLEVEL 1 ECHO OK!表示如果当前的错误返回代号大于或等于1时将在屏幕上显示“OK!”的字样。 |
|
| 第2楼 sxhc6868 | 发表于 2006-02-18 19:11 |
| 初级用户 发帖 19 积分 50 | |
|
好贴子,顶,基础的技术性贴子就要顶!
|
|
| 第3楼 dosz | 发表于 2006-02-18 20:56 |
| 中级用户 发帖 188 积分 396 来自 上海 | |
|
@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 =============================== |
|
| 第4楼 willsort | 发表于 2006-02-20 14:23 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re dosz:
建议兄将3楼的例程修改一下,以免使一些初学者迷惑: |
|
| 第5楼 dosz | 发表于 2006-02-25 12:02 |
| 中级用户 发帖 188 积分 396 来自 上海 | |
|
谢谢版主,我是在学习错误返回码,你给我指点我非常高兴.
:: 问题:为什么程序执行失败时,为同时显示"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 ] |
|
| 第6楼 willsort | 发表于 2006-02-25 14:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re dosz:
这是很正常的,因为你在主楼中也提到了 if errorlevel 的比较方式是“大于或等于”。而如果一个执行出错,通常会返回一个非0的错误号,同时因为DOS是以无符号整型数的方式处理错误号的,所以非0也即大于0,也即大于等于1的证书,那么 if errorlevel 1 和 if errorlevel 0 的条件当然都会被满足。 而至于 DOS 命令的错误返回码为何通常会是正常执行为0,出现错误后非0,与一些高级语言恰好相反。那是因为 DOS 命令往往需要根据错误类型对错误进行分类处理,而0只有一个序号,不能表达多种错误类型,所以只有分配给正常执行的情况。而在那些高级语言的编程环境中恰好相反,往往需要将正确执行的结果进行分类处理,而错误情况只需要直接抛给专属错误处理模块即可。 |
|
| 第7楼 dosz | 发表于 2006-02-25 17:33 |
| 中级用户 发帖 188 积分 396 来自 上海 | |
|
errorlevel 的比较方式是“大于或等于”。
这个我以前好象没有想得那么周到, 不过经你提示,我再看DOS执行时理解了, 在此,感谢你百忙之中给我回复。 [ Last edited by dosz on 2006-2-25 at 17:59 ] |
|
| 第8楼 371770923 | 发表于 2007-05-29 15:29 |
| 初级用户 发帖 19 积分 50 | |
|
if errorlevel好象还有这句用法(if "errorlevel"...... =????)具体的不怎么清楚
版主能不能介绍一下 |
|
| 第9楼 koala | 发表于 2007-07-14 10:52 |
| 初级用户 发帖 105 积分 199 来自 江苏 | |
|
发一个我翻译的 errorleve(译本)l Allenware.com 批处理图书馆
批处理命令返回的ERRORLEVELs报告 仅用于 Windows 95/98/ME ===版本 此文档是1.04版 可以在我们的网站上找到这个ERRORLEVELs当前最新版本: http://www.allenware.com/mcsw/errorlevels.zip ===坚决拒绝 此压缩包免费使用,并且他仅用于教育与学习用途.使用他完全是遵照你 个人的意愿,由此产生的问题由你自己负责.我们不担保此文件有可能给 您带来的损失.除非所有贵重数据已经安全的完成备份并且你知道怎样 进行恢复数据,否则请您决不要在电脑上测试使用. ===在批处理文件中使用 ERRORLEVELs 想要了解怎样进行测试的详细信息以及遵守章则和(我们免费提供的)批处理 命令返回的ERRORLEVEL值与交互式的批处理课程. 你可以通过以下地址了解 一下详细的课程提纲和课程索引: http://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) 用 打断批处理任务 = 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) 用 打断批处理任务 = 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值与交互式的批处理课程. 你可以通过以下地址了解 一下详细的课程提纲和课程索引: http://www.allenware.com/icsw/icswidx.htm William 和 Linda Allen合著 创造性的技术性著作 http://www.allenware.com/ (c) 著作权(C) Allen与其公司 2005 - 版权所有(C) |
|
| 第10楼 wordexport | 发表于 2007-10-04 23:04 |
| 初级用户 发帖 42 积分 87 | |
|
先顶一下.学到了
|
|
| 第11楼 soyo | 发表于 2007-10-30 21:49 |
| 新手上路 发帖 10 积分 18 | |
|
谢了
|
|
| 第12楼 hxwxyz | 发表于 2007-10-31 19:10 |
| 中级用户 发帖 123 积分 245 | |
|
学习了 谢谢
|
|
| 第13楼 523066680 | 发表于 2008-08-19 16:23 |
| 银牌会员 发帖 1,133 积分 2,362 | |
|
好东西 不能沉了
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |