1

%errorlevel% 在 WindowsXP 中不起作用。

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

但是,即使没有错误,%errorlevel% 是 1。我设置 %errorlevel% 0,即使有错误 %errorlevel% 仍然是 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

4 回答 4

6

给你一些例子:

@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
于 2013-12-02T09:45:30.513 回答
4

它通常在手动设置错误级别时发生。它应该是一个动态变量,但是当您将其设置为一个值时,检查其内容将不会返回正确的 errorlevel 值,而是您为其设置的值。

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

于 2013-12-02T09:45:18.867 回答
2

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

ver > nul
rem Here the errorlevel value is always 0
于 2013-12-02T17:06:05.160 回答
0

正如这个答案中已经提到的,您的代码示例中的问题是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

替代方式:

rem Reset `ErrorLevel`:
ver > nul
cd .
dir > nul
type nul
verify > nul
(call )

rem Set `ErrorLevel` to `1`:
color 00
set = 2> nul
(call)
rem (many other internal commands with missing/invalid arguments)
于 2015-08-06T19:59:38.350 回答