%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
但是,如果错误级别1()看起来工作。
一些例子给你:
@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
当手动设置ERRORLEVEL这通常发生。 据suppossed是一个动态的变量,但是当你将它设置为一个值,它的内容检查,将返回不正确的错误级别值,但该值设置它。
如果在命令行中键入你set errorlevel
和可变所示,那么这就是你的问题。 清除变量( set errorlevel=
),一切都将工作,直到值被重新设置。
除了在以前的答案所述的点,你必须明白,有不改变在某些情况下,错误级别值一定的内部命令。 如果有疑问,你应该假设某一命令后,ERRORLEVEL值改变之前做一个小测试。 一个简单的方法来设置错误级别为0,使用ver
命令:
ver > nul
rem Here the errorlevel value is always 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
文章来源: %errorlevel% doesn't work in Windows XP. But it works in Windows7