%errorlevel%在Windows XP中不起作用。但它适用于Windows7

时间:2013-12-02 09:09:21

标签: batch-file errorlevel

%errorlevel%在WindowsXP中不起作用。

据我所知,当发生错误时%errorlevel%设置为1或更高的值,如果没有错误则设置为0.

但是,即使没有错误,%errorlevel%也是1。 我设置%errorlevel%0,即使有错误%errorlevel%是sill 0。

我认为操作系统在XP中没有改变%errorlevel%。

在Win7中它完全可以工作。

@echo off

setlocal enabledelayedexpansion

call dir
echo errorlevel=%errorlevel%
REM expected errorlevel=0 but 1

call dor
echo errorlevel=%errorlevel%
REM expected errorlevel=1

set errorlevel=0
call dor
echo errorlevel=%errorlevel%
REM expected errorlevel=1 but 0

但是如果errorlevel 1()看起来有效。

4 个答案:

答案 0 :(得分:4)

一些例子:

@ECHO OFF &SETLOCAL
echo errorlevel=%errorlevel%
call dir >nul
echo errorlevel=%errorlevel%

输出:

errorlevel=0
errorlevel=0


@ECHO OFF &SETLOCAL
echo errorlevel=%errorlevel%
call dor
echo errorlevel=%errorlevel%

输出:

errorlevel=0
'dor' is not recognized as an internal or external command,
operable program or batch file.
errorlevel=1


@ECHO OFF &SETLOCAL
::set errorlevel=0 illegal operation!
set test=1
set test
echo errorlevel=%errorlevel%
call dor
echo errorlevel=%errorlevel%

输出:

test=1
errorlevel=0
'dor' is not recognized as an internal or external command,
operable program or batch file.
errorlevel=1

set errorlevel不是合法命令。如果需要设置errorlevel系统环境变量,请使用常规命令执行此操作。



@ECHO OFF &SETLOCAL
::set errorlevel=1 illegal operation!
set test
echo errorlevel=%errorlevel%
call dir >nul
echo errorlevel=%errorlevel%

输出:

Environment variable test not defined
errorlevel=1
errorlevel=0

答案 1 :(得分:2)

通常在手动设置errorlevel时发生。它被假定为一个动态变量,但是当你将它设置为一个值时,检查它的内容将不会返回正确的errorlevel值,而是返回你设置的值。

如果在命令行中键入set errorlevel并显示变量,那么这就是您的问题。清除变量(set errorlevel=),一切都会有效,直到再次设置一个值。

答案 2 :(得分:1)

除了前面答案中陈述的要点之外,您必须知道某些内部命令在某些情况下更改错误级别值。如果有疑问,在假定某个命令后错误级别值发生变化之前,您应该进行一个小测试。将errorlevel设置为0的简单方法是使用ver命令:

ver > nul
rem Here the errorlevel value is always 0

答案 3 :(得分:0)

正如this answer中已经提到的,代码示例中的问题是set errorlevel=0 要将errorlevel设置为任意值,请使用:

cmd /C exit 0 & rem to set errorlevel to 0 (same as omitting the number)
cmd /C exit 1 & rem to set errorlevel to 1