中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: ERRORLEVEL请教? 上一主题 | 下一主题
wordexport
初级用户




积分 87
发帖 42
注册 2007-9-27
状态 离线
『楼 主』:  ERRORLEVEL请教?

我想问一下ERRORLEVEL是命令执行后的返回退出值,这具体怎么解释啊。什么意思啊?譬如call set "c=%%a:00-14-78-42-93-7d=*%%" 这句命令有退出值吗?是多少呢?

2007-10-4 21:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wordexport
初级用户




积分 87
发帖 42
注册 2007-9-27
状态 离线
『第 2 楼』:  

请现身指教

2007-10-4 21:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wordexport
初级用户




积分 87
发帖 42
注册 2007-9-27
状态 离线
『第 3 楼』:  

echo off
dir z:
rem 如果退出代码为1(不成功)就跳至标题1处执行
IF ERRORLEVEL 1 goto 1
rem 如果退出代码为0(成功)就跳至标题0处执行
IF ERRORLEVEL 0 goto 0
:0
echo 命令执行成功!
Rem 程序执行完毕跳至标题exit处退出
goto exit
:1
echo 命令执行失败!
Rem 程序执行完毕跳至标题exit处退出
goto exit
:exit
Rem 这里是程序的出口

这段代码执行了dir z:后返回一个什么值呢就是0或1吗那么是不是每条命令执行后都会返回一个退回值呢?

2007-10-4 21:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wordexport
初级用户




积分 87
发帖 42
注册 2007-9-27
状态 离线
『第 4 楼』:  

请高手指教!先道谢了。

2007-10-4 21:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  

用%ERRORLEVEL%来查看上个命令的返回值。

通常%ERRORLEVEL%值为0表示命令成功执行完,若大于等于1,表示命令执行失败或者出错。

其它的请搜索论坛,以前很多讨论。

2007-10-4 22:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wordexport
初级用户




积分 87
发帖 42
注册 2007-9-27
状态 离线
『第 6 楼』:  

谢谢版主 !为什么我用set ERRORLEVEL 不能看它的返回值呢

2007-10-4 22:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 7 楼』:  

用echo %errorlevel%查看

2007-10-4 22:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wordexport
初级用户




积分 87
发帖 42
注册 2007-9-27
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by wudixin96 at 2007-10-4 10:48 PM:
用echo %errorlevel%查看

谢谢你的指教我知道可以用echo %errorlevel% 看返回值但是我原先认为errorlevel是个变量应该可以用set errorlevel 来看它的值,但是实践证明并非如此
那我就不明白了errorlevel不是一个变量吗

2007-10-4 23:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wordexport
初级用户




积分 87
发帖 42
注册 2007-9-27
状态 离线
『第 9 楼』:  

我看过一篇文章上面说它是系统变量啊 为什么像%systemdrive%的能显示但是set errorlevel不能显示呢?

2007-10-4 23:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wordexport
初级用户




积分 87
发帖 42
注册 2007-9-27
状态 离线
『第 10 楼』:  

顶一下.

2007-10-4 23:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 11 楼』:  

Re wordexport:

可以这么理解吧:
set中的部分变量都可以叫做“环境变量”,“环境变量”的主要作用是在程序运行前提供一些可供利用的环境选项,这些不是在程序运行之后才设定的,而是之前就设定好的,它们的值通常是不变化的。

而errorlevel可以理解成程序或者命令运行之后的一个返回值(ExitCode),通过这个返回值可以粗略判断程序的运行状态(是正常执行还是有错误出现),因此这个值是随着执行的命令的变化而变化的,就因这些和环境变量的不同,所以你set errorlevel得不到它的值吧。至于到底为什么,我也不知道,微软知道。

还有一个建议就是,判断程序的返回值时,最好是用“if errorlevel ExitCode”的格式,因为errorlevel还可以被定义成一个变量,此时如果用%Errorlevel%来判断的话,就不是ExitCode了,而是你定义的变量%errorlevel%的值了,这样就会导致判断错误而使程序流程“走偏”。

2007-10-5 00:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





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



  Quote:
Originally posted by wordexport at 2007-10-4 10:36 PM:
谢谢版主 !为什么我用set ERRORLEVEL 不能看它的返回值呢

SET得帮助写的很明白:

如果命令扩展名被启用,有几个动态环境变量可以被扩展,但
不会出现在 SET 显示的变量列表中。每次变量数值被扩展时,
这些变量数值都会被动态计算。如果用户用这些名称中任何
一个定义变量,那个定义会替代下面描述的动态定义:

%CD% - 扩展到当前目录字符串。

%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。

%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。

%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。

%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。

%CMDEXTVERSION% - 扩展到当前命令处理器扩展名版本号。

%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。

2007-10-5 09:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wordexport
初级用户




积分 87
发帖 42
注册 2007-9-27
状态 离线
『第 13 楼』:  

谢谢!又学到了

2007-10-5 09:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: