%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()看起来有效。
答案 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