2010-08-11 71 views
3

由于ERRORLEVEL是一个环境变量,在我有机会在我的批处理文件中检查它之前,它的值是否可以更改?ERRORLEVEL是可靠的吗?

+2

%ERRORLEVEL%** ** IS可靠,为大家谁扮演通过它的规则。在这场比赛中,谁的确经常是不可靠的,通常是用户没有按照规则玩牌......(我并不责怪用户 - 微软在这里设置的规则非常模糊。) – 2010-08-11 17:45:21

回答

2

环境变量属于当前的“过程”,因此它们不能从外部改变。如果您在批处理文件中检查相关命令后的错误级别,则应该检查正确的值。

您可以通过打开两个命令窗口,并进入第一证实了这一点:

c:> set errorlevel=7 

然后第二:

c:> set errorlevel=9 

然后返回到第一和:

c:> echo %errorlevel% 
7 

您应该非常小心地设置errorlevel环境变量顺便说一下。这个特定的变量是一个特殊的变量,当你没有专门设置它时,它会自动提供前一个程序的返回码。

设置它显式覆盖此行为,唯一的恢复方法是使用if errorlevel N而不是环境变量(它绕过环境变量),或使用set errorlevel=删除覆盖。

+0

@paxdiable:对于在一个cmd.exe窗口中设置的任何(env)变量,您对'%errorlevel%'环境变量的说法是正确的。它永远不会自动出现在任何其他已经打开的cmd.exe窗口中。 – 2010-08-11 18:01:52

+0

是的,这是正确的。当我说错误级别是特殊的,那不是我所说的方面。没有env-var从流程跳转到流程。我只是警告反对设置错误级别,因为它具有特殊的行为通常,它设置防止。 – paxdiablo 2010-08-11 22:39:28

0

%errorlevel%(它不是大小写敏感)是一个非常特殊的环境变量。这完全不意味着由用户或批处理脚本进行设置。

此外,你可能会碰到你执行调用set errorlevel=15但张女士您成功执行set命令的问题,可能必须重新设置%errorlevel%你希望现在evaluete 0

如果您需要它

唯一“合法”的方式来评估%errorlevel%环境变量,使用重复的if errorlevel声明:

if errorlevel 0 do somecommand 
if errorlevel 1 do somethingelse 
... 
if errorlevel 255 do lastalternative 

一切是很危险的。如果您确实需要几行后使用当前%ERRORLEVEL%,然后使用类似

if errorlevel 0 do set myerrorlevel=0 

,然后读出%myerrorlevel% ...

+2

如果错误级别X对于错误级别> = X为真,则解析从0到255将导致始终执行0的命令。应该解析255到0(来自mod标志,不是我的评论..) – 2011-01-08 11:39:12