楼 主
【请教】DOS“内部”命令是不是不能返回ErrorLevel?
发表于 2008-01-08 16:40 · 中国 北京 科技网
初级用户
★
积分 73 发帖 11 注册 2008-01-08 16:07 18年会员 UID 107997 性别 男
状态 离线
例如:
@echo off
dir > test.txt
if errorlevel 1 echo ERRORLEVEL IS 1 OR GREATER
if errorlevel 0 echo ERRORLEVEL IS 0
运行一次返回:ERRORLEVEL IS 0
没问题,应该是这样。
但是现在我把test.txt的属性改为只读,然后再运行,应该出现错误,
所以我希望看到显示:ERRORLEVEL IS 1 OR GREATER
的确DOS报错:File creation error,可是接着 ERRORLEVEL IS 0,奇怪了。
我用各种方式使dir出错,然后测试Errorlevel,返回的都是0,
我观察过几个用 if errorlevel 测试错误的例子,没看到有针对DOS内部命令使用
if errorlevel测试错误的,本人见识不多,感觉是不是DOS的外部命令才会返回错误,
而内部命令则不能,请坛内的DOS高手不吝赐教,这个问题跟我要给大家共享的一个
小程序有关。
多谢。
第 2 楼
发表于 2008-01-08 20:35 · 中国 北京 海淀区 联通
银牌会员
★★★
积分 1,287 发帖 634 注册 2007-05-02 15:06 19年会员 UID 87277 性别 男 来自 cmd.exe
状态 离线
貌似符号命令的错误不产生errorlevel
本帖最近评分记录
(共 1 条)
点击查看详情
评分人 分数 时间
uhnmki
+2
2008-01-26 07:37
第 3 楼
发表于 2008-01-08 20:58 · 中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564 发帖 1,127 注册 2006-12-25 22:57 19年会员 UID 74552 性别 男
状态 离线
管道符也被视作一个命令
本帖最近评分记录
(共 1 条)
点击查看详情
评分人 分数 时间
uhnmki
+2
2008-01-27 21:59
第 4 楼
发表于 2008-01-09 02:45 · 中国 广东 深圳 南山区 电信
初级用户
★
蝙蝠侠是写批处理的人
积分 54 发帖 24 注册 2008-01-04 20:34 18年会员 UID 107683 性别 男
状态 离线
内部命令是能返回ERRORLEVEL的。
嗯...也许正如楼上的大大们所言,那个>重定向可能带来了一些side effect...我不清楚,我做了一下实验...但还没理清头绪,暂不发表过多言论了...
但是要解决你的问题我倒是可以提供个方法:
DIR > test.txt || ECHO > NUL
IF ERRORLEVEL 1 (
ECHO ERRORLEVEL is 1 or greater
) ELSE (
IF ERRORLEVEL 0 ECHO ERRORLEVEL is 0
)
即在前语句失败的情况下做一下ECHO > nul的无用功,发现ERRORLEVEL就能正确传出来了,你试一试。
另外,之所以要把ERRORLEVEL 0的判断放进ELSE段,是因为如果你能通过ERRORLEVEL 1,那么ERRORLEVEL 0当然是会成功的,你原来的写法会把0的那一句也打印出来,估计你也不是想那样子吧?;)
本帖最近评分记录
(共 1 条)
点击查看详情
评分人 分数 时间
uhnmki
+2
2008-01-23 23:57
第 5 楼
在Win98下未通过
发表于 2008-01-24 00:02 · 中国 北京 海淀区 联通
初级用户
★
积分 73 发帖 11 注册 2008-01-08 16:07 18年会员 UID 107997 性别 男
状态 离线
谢谢各位热心解答,尤其蝙蝠侠,你的代码在WinXp下测试通过,但是Win98下还是不行,不知还有没有办法。
第 6 楼
发表于 2008-01-24 01:07 · 中国 河北 邢台 电信
中级用户
★★
积分 242 发帖 134 注册 2006-12-11 15:14 19年会员 UID 73203 性别 男
状态 离线
本帖最近评分记录
(共 1 条)
点击查看详情
评分人 分数 时间
uhnmki
+2
2008-01-26 07:37
第 7 楼
发表于 2008-01-24 10:08 · 中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343 发帖 636 注册 2004-03-06 00:00 22年会员 UID 19350 性别 男
状态 离线
首先分清两个问题:
第一,command.com(包括9X和NTs)中的内部命令是没有返回值的
第二,cmd.exe中的部分内部命令是有返回值的,比如dir,copy等
但也有很多没有返回值,比如set,if,for等
本帖最近评分记录
(共 1 条)
点击查看详情
评分人 分数 时间
uhnmki
+2
2008-01-27 21:58
第 8 楼
发表于 2008-01-24 12:28 · 中国 北京 联通
银牌会员
★★★
积分 1,287 发帖 634 注册 2007-05-02 15:06 19年会员 UID 87277 性别 男 来自 cmd.exe
状态 离线
而且W9X下没有||这类的命令....
本帖最近评分记录
(共 1 条)
点击查看详情
评分人 分数 时间
uhnmki
+2
2008-01-26 07:36
第 9 楼
太谢谢各位了
发表于 2008-01-26 07:36 · 中国 北京 联通
初级用户
★
积分 73 发帖 11 注册 2008-01-08 16:07 18年会员 UID 107997 性别 男
状态 离线
多谢各位高手不吝赐教,指点迷津,作为回报,我送分,以后再发个小程序给大家用,和dir差不多,只是专用点。
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正