中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-05 23:56
48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » ERRORLEVEL请教?
可打印版本  1,589 / 12
第1楼 wordexport 发表于 2007-10-04 21:39
初级用户 发帖 42 积分 87
ERRORLEVEL请教?
我想问一下ERRORLEVEL是命令执行后的返回退出值,这具体怎么解释啊。什么意思啊?譬如call set "c=%%a:00-14-78-42-93-7d=*%%" 这句命令有退出值吗?是多少呢?
第2楼 wordexport 发表于 2007-10-04 21:42
初级用户 发帖 42 积分 87
请现身指教
第3楼 wordexport 发表于 2007-10-04 21:47
初级用户 发帖 42 积分 87
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吗那么是不是每条命令执行后都会返回一个退回值呢?
第4楼 wordexport 发表于 2007-10-04 21:48
初级用户 发帖 42 积分 87
请高手指教!先道谢了。
第5楼 lxmxn 发表于 2007-10-04 22:31
版主 发帖 4,938 积分 11,386
用%ERRORLEVEL%来查看上个命令的返回值。

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

其它的请搜索论坛,以前很多讨论。
第6楼 wordexport 发表于 2007-10-04 22:36
初级用户 发帖 42 积分 87
谢谢版主 !为什么我用set ERRORLEVEL 不能看它的返回值呢
第7楼 wudixin96 发表于 2007-10-04 22:48
银牌会员 发帖 931 积分 1,928
用echo %errorlevel%查看
第8楼 wordexport 发表于 2007-10-04 23:00
初级用户 发帖 42 积分 87
Originally posted by wudixin96 at 2007-10-4 10:48 PM:
用echo %errorlevel%查看

谢谢你的指教我知道可以用echo %errorlevel% 看返回值但是我原先认为errorlevel是个变量应该可以用set errorlevel 来看它的值,但是实践证明并非如此
那我就不明白了errorlevel不是一个变量吗
第9楼 wordexport 发表于 2007-10-04 23:03
初级用户 发帖 42 积分 87
我看过一篇文章上面说它是系统变量啊 为什么像%systemdrive%的能显示但是set errorlevel不能显示呢?
第10楼 wordexport 发表于 2007-10-04 23:12
初级用户 发帖 42 积分 87
顶一下.
第11楼 lxmxn 发表于 2007-10-05 00:24
版主 发帖 4,938 积分 11,386
Re wordexport:

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

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

还有一个建议就是,判断程序的返回值时,最好是用“if errorlevel ExitCode”的格式,因为errorlevel还可以被定义成一个变量,此时如果用%Errorlevel%来判断的话,就不是ExitCode了,而是你定义的变量%errorlevel%的值了,这样就会导致判断错误而使程序流程“走偏”。
第12楼 knoppix7 发表于 2007-10-05 09:55
银牌会员 发帖 634 积分 1,287 来自 cmd.exe
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% - 扩展到调用命令处理器的原始命令行。
第13楼 wordexport 发表于 2007-10-05 09:56
初级用户 发帖 42 积分 87
谢谢!又学到了
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023