中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 23:04
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » ERRORLEVEL请教? 查看 1,588 回复 12
楼 主 ERRORLEVEL请教? 发表于 2007-10-04 21:39 ·  中国 浙江 宁波 电信
初级用户
积分 87
发帖 42
注册 2007-09-27 19:25
18年会员
UID 98424
性别 男
状态 离线
我想问一下ERRORLEVEL是命令执行后的返回退出值,这具体怎么解释啊。什么意思啊?譬如call set "c=%%a:00-14-78-42-93-7d=*%%" 这句命令有退出值吗?是多少呢?
2 发表于 2007-10-04 21:42 ·  中国 浙江 宁波 电信
初级用户
积分 87
发帖 42
注册 2007-09-27 19:25
18年会员
UID 98424
性别 男
状态 离线
请现身指教
3 发表于 2007-10-04 21:47 ·  中国 浙江 宁波 电信
初级用户
积分 87
发帖 42
注册 2007-09-27 19:25
18年会员
UID 98424
性别 男
状态 离线
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 发表于 2007-10-04 21:48 ·  中国 浙江 宁波 电信
初级用户
积分 87
发帖 42
注册 2007-09-27 19:25
18年会员
UID 98424
性别 男
状态 离线
请高手指教!先道谢了。
5 发表于 2007-10-04 22:31 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
用%ERRORLEVEL%来查看上个命令的返回值。

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

其它的请搜索论坛,以前很多讨论。
6 发表于 2007-10-04 22:36 ·  中国 浙江 宁波 电信
初级用户
积分 87
发帖 42
注册 2007-09-27 19:25
18年会员
UID 98424
性别 男
状态 离线
谢谢版主 !为什么我用set ERRORLEVEL 不能看它的返回值呢
7 发表于 2007-10-04 22:48 ·  中国 香港 腾讯云
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
用echo %errorlevel%查看
8 发表于 2007-10-04 23:00 ·  中国 浙江 宁波 电信
初级用户
积分 87
发帖 42
注册 2007-09-27 19:25
18年会员
UID 98424
性别 男
状态 离线
Originally posted by wudixin96 at 2007-10-4 10:48 PM:
用echo %errorlevel%查看

谢谢你的指教我知道可以用echo %errorlevel% 看返回值但是我原先认为errorlevel是个变量应该可以用set errorlevel 来看它的值,但是实践证明并非如此
那我就不明白了errorlevel不是一个变量吗
9 发表于 2007-10-04 23:03 ·  中国 浙江 宁波 电信
初级用户
积分 87
发帖 42
注册 2007-09-27 19:25
18年会员
UID 98424
性别 男
状态 离线
我看过一篇文章上面说它是系统变量啊 为什么像%systemdrive%的能显示但是set errorlevel不能显示呢?
10 发表于 2007-10-04 23:12 ·  中国 浙江 宁波 电信
初级用户
积分 87
发帖 42
注册 2007-09-27 19:25
18年会员
UID 98424
性别 男
状态 离线
顶一下.
11 发表于 2007-10-05 00:24 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
Re wordexport:

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

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

还有一个建议就是,判断程序的返回值时,最好是用“if errorlevel ExitCode”的格式,因为errorlevel还可以被定义成一个变量,此时如果用%Errorlevel%来判断的话,就不是ExitCode了,而是你定义的变量%errorlevel%的值了,这样就会导致判断错误而使程序流程“走偏”。
12 发表于 2007-10-05 09:55 ·  中国 北京 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 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 发表于 2007-10-05 09:56 ·  中国 浙江 宁波 电信
初级用户
积分 87
发帖 42
注册 2007-09-27 19:25
18年会员
UID 98424
性别 男
状态 离线
谢谢!又学到了
论坛跳转: