Batch file 错误级别可靠吗?
因为ERRORLEVEL是一个环境变量,所以在我有机会在批处理文件中检查它之前,它的值不可能被更改吗?环境变量属于当前的“进程”,因此它们不能从外部更改。如果在批处理文件中的相关命令之后检查错误级别,则应该检查正确的值 您可以通过打开两个命令窗口并输入第一个命令窗口来确认这一点:Batch file 错误级别可靠吗?,batch-file,Batch File,因为ERRORLEVEL是一个环境变量,所以在我有机会在批处理文件中检查它之前,它的值不可能被更改吗?环境变量属于当前的“进程”,因此它们不能从外部更改。如果在批处理文件中的相关命令之后检查错误级别,则应该检查正确的值 您可以通过打开两个命令窗口并输入第一个命令窗口来确认这一点: c:> set errorlevel=7 然后是第二个: c:> set errorlevel=9 然后回到第一个问题,然后: c:> echo %errorlevel% 7 顺便说一下,在设置
c:> set errorlevel=7
然后是第二个:
c:> set errorlevel=9
然后回到第一个问题,然后:
c:> echo %errorlevel%
7
顺便说一下,在设置errorlevel
环境变量时应该非常小心。这个特定的变量是一个特殊的变量,当您没有特别设置它时,它将自动提供上一个程序的返回代码
设置它会显式覆盖此行为,恢复的唯一方法是使用if errorlevel N
(a)而不是环境变量(它绕过环境变量),或者使用set errorlevel=
删除覆盖
(a) 如果错误级别大于或等于指定的值,则
errorlevel
表达式为true,这是执行此操作的正确方法。因此,你应该按照相反的顺序来做,比如:
if errorlevel 3 goto :got3ormore
if errorlevel 2 goto :got2
if errorlevel 1 goto :got1
if errorlevel 0 goto :got0
goto :gotnegative
%errorlevel%
(它实际上不区分大小写)是一个非常特殊的环境变量。它根本不是用来由用户或批处理脚本内部进行设置的
此外,您可能会遇到执行调用set errorlevel=15
的问题,但您成功执行set
命令这一事实可能已经重置了您现在希望评估0
的%errorlevel%
你需要它吗
评估%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%
..%ERRORLEVEL%对于每个遵守规则的玩家来说都是可靠的。在这个游戏中经常不可靠的人通常是不按规则玩的用户。。。(不过,我并不怪用户——微软在这里设置的规则非常模糊。)@paxdiable:您所说的%errorlevel%
环境变量适用于在一个cmd.exe窗口中设置的任何(env)变量。它永远不会自动出现在任何其他已打开的cmd.exe窗口中。是的,这是正确的。当我说errorlevel很特别时,那不是我所说的方面。没有环境变量从一个进程跳到另一个进程。我只是警告不要特别设置errorlevel,因为它通常有特殊的行为,这会阻止设置。如果errorlevel X对于errorlevel>=X为真,那么从0到255的解析将导致始终执行0的命令。应将255解析为0(从mod标志,而不是我的注释..)