Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 错误级别可靠吗?_Batch File - Fatal编程技术网

Batch file 错误级别可靠吗?

Batch file 错误级别可靠吗?,batch-file,Batch File,因为ERRORLEVEL是一个环境变量,所以在我有机会在批处理文件中检查它之前,它的值不可能被更改吗?环境变量属于当前的“进程”,因此它们不能从外部更改。如果在批处理文件中的相关命令之后检查错误级别,则应该检查正确的值 您可以通过打开两个命令窗口并输入第一个命令窗口来确认这一点: c:> set errorlevel=7 然后是第二个: c:> set errorlevel=9 然后回到第一个问题,然后: c:> echo %errorlevel% 7 顺便说一下,在设置

因为ERRORLEVEL是一个环境变量,所以在我有机会在批处理文件中检查它之前,它的值不可能被更改吗?

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

您可以通过打开两个命令窗口并输入第一个命令窗口来确认这一点:

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标志,而不是我的注释..)