中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【请教】DOS“内部”命令是不是不能返回ErrorLevel?
作者:
标题: 【请教】DOS“内部”命令是不是不能返回ErrorLevel? 上一主题 | 下一主题
uhnmki
初级用户





积分 73
发帖 11
注册 2008-1-8
状态 离线
『楼 主』:  【请教】DOS“内部”命令是不是不能返回ErrorLevel?

例如:
@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高手不吝赐教,这个问题跟我要给大家共享的一个
小程序有关。
多谢。

2008-1-8 16:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 2 楼』:  

貌似符号命令的错误不产生errorlevel

   此帖被 +2 点积分    点击查看详情   
评分人:【 uhnmki 分数: +2  时间:2008-1-26 07:37


2008-1-8 20:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 3 楼』:  

管道符也被视作一个命令

   此帖被 +2 点积分    点击查看详情   
评分人:【 uhnmki 分数: +2  时间:2008-1-27 21:59


2008-1-8 20:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
BatMan
初级用户

蝙蝠侠是写批处理的人



积分 54
发帖 24
注册 2008-1-4
状态 离线
『第 4 楼』:  

  内部命令是能返回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的那一句也打印出来,估计你也不是想那样子吧?;)

   此帖被 +2 点积分    点击查看详情   
评分人:【 uhnmki 分数: +2  时间:2008-1-23 23:57


2008-1-9 02:45
查看资料  发送邮件  发短消息 网志  OICQ (25013672)  编辑帖子  回复  引用回复
uhnmki
初级用户





积分 73
发帖 11
注册 2008-1-8
状态 离线
『第 5 楼』:  在Win98下未通过

谢谢各位热心解答,尤其蝙蝠侠,你的代码在WinXp下测试通过,但是Win98下还是不行,不知还有没有办法。

2008-1-24 00:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
VAF
中级用户





积分 242
发帖 134
注册 2006-12-11
状态 离线
『第 6 楼』:  

请参见: 谁能整理关于带反还值的常用的批处理程序? - DOS批处理 & 脚本技术(批处理室) - 中国DOS联盟论坛 - 中国DOS联盟之联合DOS论坛

http://www.cn-dos.net/forum/viewthread.php?tid=37261&fpage=1

   此帖被 +2 点积分    点击查看详情   
评分人:【 uhnmki 分数: +2  时间:2008-1-26 07:37


2008-1-24 01:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 7 楼』:  

首先分清两个问题:

第一,command.com(包括9X和NTs)中的内部命令是没有返回值的

第二,cmd.exe中的部分内部命令是有返回值的,比如dir,copy等
但也有很多没有返回值,比如set,if,for等

   此帖被 +2 点积分    点击查看详情   
评分人:【 uhnmki 分数: +2  时间:2008-1-27 21:58


2008-1-24 10:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 8 楼』:  

而且W9X下没有||这类的命令....

   此帖被 +2 点积分    点击查看详情   
评分人:【 uhnmki 分数: +2  时间:2008-1-26 07:36


2008-1-24 12:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
uhnmki
初级用户





积分 73
发帖 11
注册 2008-1-8
状态 离线
『第 9 楼』:  太谢谢各位了

多谢各位高手不吝赐教,指点迷津,作为回报,我送分,以后再发个小程序给大家用,和dir差不多,只是专用点。

2008-1-26 07:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: