![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-19 11:35 |
共 47,814 主题排行 / 349,908 发帖 / 今日 0 篇 / 48,259 会员排行 |
| DOS疑难解答 & 问题讨论 (解答室) » 怎样在纯 DOS 下随时查看 ERRORLEVEL 的值? |
| 可打印版本 1,265 / 8 |
| 第1楼 stevenldj | 发表于 2008-08-20 23:20 |
| 初级用户 发帖 15 积分 36 | |
|
怎样在纯 DOS 下随时查看 ERRORLEVEL 的值? 我想写一个批处理,用于在纯 DOS 下查看当前 ERRORLEVEL 的值,可是总不成功。 ECHO %ERRORLEVEL% 这个总显示 ECHO IS ON 还有一个办法,就是启动 COMMAND.EXE /Z ,可以实时查看 ERRORLEVEL 的值。这个办法不怎么好,能不能有什么办法,在需要的时候就可以直接查看的? 我写了下面的一个批处理,也不行,有时候它会把所有值都列出来。 ------------------------------------------------------------ @Echo Off For %%i in (5 4 3 2 1 0) do if ErrorLevel 25%%i Echo ErrorLevel: 25%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 24%%i Echo ErrorLevel: 24%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 23%%i Echo ErrorLevel: 23%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 22%%i Echo ErrorLevel: 22%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 21%%i Echo ErrorLevel: 21%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 20%%i Echo ErrorLevel: 20%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 19%%i Echo ErrorLevel: 19%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 18%%i Echo ErrorLevel: 18%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 17%%i Echo ErrorLevel: 17%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 16%%i Echo ErrorLevel: 16%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 15%%i Echo ErrorLevel: 15%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 14%%i Echo ErrorLevel: 14%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 13%%i Echo ErrorLevel: 13%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 12%%i Echo ErrorLevel: 12%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 11%%i Echo ErrorLevel: 11%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 10%%i Echo ErrorLevel: 10%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 9%%i Echo ErrorLevel: 9%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 8%%i Echo ErrorLevel: 8%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 7%%i Echo ErrorLevel: 7%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 6%%i Echo ErrorLevel: 6%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 5%%i Echo ErrorLevel: 5%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 4%%i Echo ErrorLevel: 4%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 3%%i Echo ErrorLevel: 3%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 2%%i Echo ErrorLevel: 2%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel 1%%i Echo ErrorLevel: 1%%i For %%i in (9 8 7 6 5 4 3 2 1 0) do if ErrorLevel %%i Echo ErrorLevel: %%i ------------------------------------------------------------ |
|
| 第2楼 Climbing | 发表于 2008-08-21 03:09 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
| 第3楼 stevenldj | 发表于 2008-08-21 09:37 |
| 初级用户 发帖 15 积分 36 | |
|
谢谢,代码很精彩,我简化了一下,不知道有没有什么缺陷,请看一下: ------------------------------------------------------------ @ECHO OFF :: 复位变量 FOR %%A IN (1 10 100) DO SET ERR%%A= :: 检查 ERRORLEVEL 的百位值 FOR %%A IN (0 1 2) DO IF ERRORLEVEL %%A00 SET ERR100=%%A :: 是否显示 0 前导符 IF %ERR100%==0 IF NOT "%1"=="/0" SET ERR100= :: 检查 ERRORLEVEL 的十位值 FOR %%A IN (0 1 2 3 4 5 6 7 8 9) DO IF ERRORLEVEL %ERR100%%%A0 SET ERR10=%%A :: 是否显示 0 前导符 IF "%ERR100%"=="" IF %ERR10%==0 SET ERR10= :: 检查 ERRORLEVEL 的个位值 FOR %%A IN (0 1 2 3 4 5 6 7 8 9) DO IF ERRORLEVEL %ERR100%%ERR10%%%A SET ERR1=%%A :: 设置结果 SET ERRORLEV=%ERR100%%ERR10%%ERR1% :: 限制 ERRORLEV 最大为 255 IF ERRORLEVEL 255 SET ERRORLEV=255 :: 清理临时变量 FOR %%A IN (1 10 100) DO SET ERR%%A= :: 显示结果 ECHO ERRORLEVEL %ERRORLEV% ------------------------------------------------------------ [ Last edited by stevenldj on 2008-8-21 at 09:46 AM ] |
|
| 第4楼 stevenldj | 发表于 2008-08-21 09:50 |
| 初级用户 发帖 15 积分 36 | |
|
`
还有个问题不懂,就是 上面代码中 IF NOT "%1"=="/0" 能不能写成 IF NOT %1#==/0# 或 IF NOT %1==/0 我觉得这句不加引号或 # 号也可以,不知道判断语句中等号两边的字符有没有什么要求 最后觉得还是加引号好一些,在代码着色的编辑器中看着清晰一些 ` [ Last edited by stevenldj on 2008-8-21 at 10:35 AM ] |
|
| 第5楼 Climbing | 发表于 2008-08-21 09:52 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
楼上的,你精简的有问题,最好按照人家的原样运行。
|
|
| 第6楼 stevenldj | 发表于 2008-08-21 10:31 |
| 初级用户 发帖 15 积分 36 | |
|
我在 DOS 下用 DREADY 测试过了,可以正确显示 ERRORLEVEL 的值,包括 255,不知道问题在哪里,请指明,谢谢
|
|
| 第7楼 Climbing | 发表于 2008-08-21 11:10 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
你精简后,组合中会出现超过255的值,这有可能造成问题。原批处理是充分考虑到这些特殊情况的。另外,我发现这个批处理无法运行在XP环境下,因为XP的for命令会设置errorlevel值为1。
|
|
| 第8楼 stevenldj | 发表于 2008-08-21 14:07 |
| 初级用户 发帖 15 积分 36 | |
|
`
组合中超过 255 的值在最后 IF ERRORLEVEL 255 SET ERRORLEV=255 这个地方都被转换成 255 了啊,最后结果中是不会有超过 255 的值存在的。 转换结果正确就可以了,转换过程中出现的超过 255 的值有什么影响吗? 你说的“有可能造成问题”是指这个批处理执行过程中会出问题,会得到不正确的结果,还是指什么。 关于 XP 中的 ERRORLEVEL 值,我觉得可以这样来修改一下: ------------------------------------------------------------ @ECHO OFF IF NOT "%ERRORLEVEL%"=="" GOTO XP :: 复位变量 FOR %%A IN (1 10 100) DO SET ERR%%A= :: 检查 ERRORLEVEL 的百位值 FOR %%A IN (0 1 2) DO IF ERRORLEVEL %%A00 SET ERR100=%%A :: 是否显示 0 前导符 IF "%ERR100%"=="0" IF NOT "%1"=="/0" SET ERR100= :: 检查 ERRORLEVEL 的十位值 FOR %%A IN (0 1 2 3 4 5 6 7 8 9) DO IF ERRORLEVEL %ERR100%%%A0 SET ERR10=%%A :: 是否显示 0 前导符 IF "%ERR100%"=="" IF "%ERR10%"=="0" SET ERR10= :: 检查 ERRORLEVEL 的个位值 FOR %%A IN (0 1 2 3 4 5 6 7 8 9) DO IF ERRORLEVEL %ERR100%%ERR10%%%A SET ERR1=%%A :: 设置结果 SET ERRORLEV=%ERR100%%ERR10%%ERR1% :: 限制 ERRORLEV 最大为 255 IF ERRORLEVEL 255 SET ERRORLEV=255 :: 清理临时变量 FOR %%A IN (1 10 100) DO SET ERR%%A= :: 显示结果 ECHO ERRORLEVEL %ERRORLEV% :: 退出 GOTO QUIT :XP ECHO ERRORLEVEL %ERRORLEVEL% :QUIT ------------------------------------------------------------ 在 XP 中居然有 9009 这样的 ERRORLEVEL 值(当你执行了一个错误命令的时候),值真丰富。 ` [ Last edited by stevenldj on 2008-8-21 at 02:13 PM ] |
|
| 第9楼 stevenldj | 发表于 2008-08-24 17:35 |
| 初级用户 发帖 15 积分 36 | |
|
`
简化后果然有问题,原来 ERRORLEVEL 在纯 DOS 下还有这样的表现方式: 当刚进入 DOS 系统的时候,用 ECHO OFF FOR %%A IN (0 1 2 3 4 5 6 7 8 9) DO IF ERRORLEVEL 2%%A0 ECHO 2%%A0 查看 ERRORLEVEL 的值,居然显示 200 210 220 260 270 280 290 最后确定了一下 ERRORLEVEL 的值是 226 后来执行了一个外部命令,再用这个方法查看 ERRORLEVEL 的值,发现当 ERRORLEVEL 超过 200 的时候,都会出现上面的情况。 看来真的要在批处理过程中限定 ERRORLEVEL 的判断范围。 还是用 Climbing 给的代码准确,注释了一下(加了 XP 的判断): ------------------------------------------------------------ @ECHO OFF IF NOT "%ERRORLEVEL%"=="" GOTO XP :: 复位临时变量 FOR %%A IN (1 10 100) DO SET ERR%%A= :: 检查 ERRORLEVEL 的百位值 FOR %%A IN (0 1 2) DO IF ERRORLEVEL %%A00 SET ERR100=%%A :: 判断百位是否超过 200,另行处理 IF "%ERR100%"=="2" GOTO 200 :: 是否显示 0 前导符(通过参数判断) IF "%ERR100%"=="0" IF NOT "%1"=="/0" SET ERR100= :: 检查 ERRORLEVEL 的十位值 FOR %%A IN (0 1 2 3 4 5 6 7 8 9) DO IF ERRORLEVEL %ERR100%%%A0 SET ERR10=%%A :: 是否显示 0 前导符(通过百位是否为空判断) IF "%ERR100%"=="" IF %ERR10%==0 SET ERR10= :1 :: 检查 ERRORLEVEL 的个位值 FOR %%A IN (0 1 2 3 4 5) DO IF ERRORLEVEL %ERR100%%ERR10%%%A SET ERR1=%%A :: 检查 小于 250 的情况下的个位值(这里似乎不用判断 250 也可以,下面判断过了) IF NOT ERRORLEVEL 250 FOR %%A IN (6 7 8 9) DO IF ERRORLEVEL %ERR100%%ERR10%%%A SET ERR1=%%A GOTO END :200 :: 当 ERRORLEVEL 大于 200 时的十位值 FOR %%A IN (0 1 2 3 4 5) DO IF ERRORLEVEL 2%%A0 SET ERR10=%%A :: 当 ERRORLEVEL 大于 250 时的个位值 IF ERR10==5 FOR %%A IN (0 1 2 3 4 5) DO IF ERRORLEVEL 25%%A SET ERR1=%%A :: 当 ERRORLEVEL 小于 250 时的个位值 IF NOT ERR10==5 GOTO 1 :END :: 设置结果 SET ERRORLEV=%ERR100%%ERR10%%ERR1% :: 清理临时变量 FOR %%A IN (1 10 100) DO SET ERR%%A= :: 显示结果 ECHO ERRORLEVEL %ERRORLEV% :: 清理结果变量 SET ERRORLEV= :: 退出 GOTO QUIT :XP ECHO ERRORLEVEL %ERRORLEVEL% :QUIT ------------------------------------------------------------ ` |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |