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

Ray*_*ond 1 windows cmd batch-file errorlevel

%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
Run Code Online (Sandbox Code Playgroud)

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

End*_*oro 6

一些例子:

@ECHO OFF &SETLOCAL
echo errorlevel=%errorlevel%
call dir >nul
echo errorlevel=%errorlevel%
Run Code Online (Sandbox Code Playgroud)

输出:

errorlevel=0
errorlevel=0
Run Code Online (Sandbox Code Playgroud)

@ECHO OFF &SETLOCAL
echo errorlevel=%errorlevel%
call dor
echo errorlevel=%errorlevel%
Run Code Online (Sandbox Code Playgroud)

输出:

errorlevel=0
'dor' is not recognized as an internal or external command,
operable program or batch file.
errorlevel=1
Run Code Online (Sandbox Code Playgroud)

@ECHO OFF &SETLOCAL
::set errorlevel=0 illegal operation!
set test=1
set test
echo errorlevel=%errorlevel%
call dor
echo errorlevel=%errorlevel%
Run Code Online (Sandbox Code Playgroud)

输出:

test=1
errorlevel=0
'dor' is not recognized as an internal or external command,
operable program or batch file.
errorlevel=1
Run Code Online (Sandbox Code Playgroud)

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



@ECHO OFF &SETLOCAL
::set errorlevel=1 illegal operation!
set test
echo errorlevel=%errorlevel%
call dir >nul
echo errorlevel=%errorlevel%
Run Code Online (Sandbox Code Playgroud)

输出:

Environment variable test not defined
errorlevel=1
errorlevel=0
Run Code Online (Sandbox Code Playgroud)