中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 关于 errorlevel 的问题? 上一主题 | 下一主题
mgq
中级用户





积分 206
发帖 103
注册 2008-5-6
来自 广东 肇庆
状态 离线
『楼 主』:  关于 errorlevel 的问题?

例:
if %errorlevel% == 1 goto end
if errorlevel 1 goto end
这两个结果是一样的吗?

2008-7-5 10:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 2 楼』:  

以下都是一个意思:
if "%errorlevel%"=="1"
if %errorlevel% equ 1
if %errorlevel% neq 0(在只有两个返回值时1和0时成立)
if errorlevel 1



批处理之家新域名:www.bathome.net
2008-7-5 10:18
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 3 楼』:  

不是完全一样, 请看 http://www.cn-dos.net/forum/view ... p;highlight=%2Bquya



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-5 10:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 4 楼』:  

老土,这四句命令确实是一个意思,你所说的还是系统判断返回值的问题,我就再简单说一次吧:
在运行程序时,系统会对每句命令的执行结果返回一个值errorlevel,首先系统会进行判断,判断命令是否成功执行,如命令没有成功执行则返回值为1,如在cmd中依次输入:ping /n 127.1>nul echo %errorlevel%,最后会显示1。如命令成功执行系统就会返回数值0,如在cmd中依次输入:ping /n 1 127.1>nul echo %errorlevel%,最后则会显示0。
我们在对返回值errorlevel进行判断时要注意必须在一行内实现,下面的这段代码是个错误示例:
@echo off
ping /n 127.1>nul
if errorlevel 1 echo 不正常
if errorlevel 0 echo 正常
pause>nul
结果不正常和正常都会显示出来
如修改成如下,就正确了:
@echo off
ping /n 1 127.1>nul
if errorlevel 1 (echo 不正常) else (echo 正常)
pause>nul
[ Last edited by zw19750516 on 2008-7-5 at 10:59 AM ]



批处理之家新域名:www.bathome.net
2008-7-5 10:51
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 5 楼』:  

还是不敢苟同,既然你以前说过 errorlevel 从高值开始判断, 事实也确实是这样。

那么我们为什么不用if %errorlevel% == 1, 偏要坚持用if errorlevel 1呢? 我们为什么不能为了避免很难察觉的错误,从而抛弃if errorlevel 1的用法呢?

类似的还有

set test=OK &echo %test%  其实 test值是“OK ” 很难发现
set “test=OK” &echo &test%  test值是 "OK"
set test=OK&echo %test% test值是 "OK"

所以为了防止歧义,我决定抛弃 if errorlevel 的用法。

我再贴一次我以前帖过的代码, 你把 if %errorlevel% == 换成 if errorlevel 试试看。不一样就是不一样啊 。
@echo off

rem call:test error 再换成 dir

call:test error 1>nul 2>nul
IF %ERRORLEVEL%==0 (ECHO FOR语句运行无误) ELSE (ECHO FOR 语句出错)
pause&exit
:test
    for /f "usebackq delims==" %%i in (`%1`) do (echo %%i)
[ Last edited by quya on 2008-7-5 at 12:09 PM ]



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-5 12:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 6 楼』:  

if errorlevel 1有点不一样吧,只要errorlevel大于等于1都会执行后面的命令,有的返回值是大于1的,虽然不是很多。



┌───────┐
├→学习→实践→┤
└───────┘
2008-7-5 19:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zqz0012005
中级用户




积分 297
发帖 135
注册 2006-10-21
状态 离线
『第 7 楼』:  

if errorlevel number相当于IF %errorlevel% geq number,而不只是equ



hh.exe ntcmds.chm::/ntcmds.htm
2008-7-5 20:32
查看资料  发短消息 网志  OICQ (411976538)  编辑帖子  回复  引用回复

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


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



论坛跳转: