%errorlevel% не работает в Windows XP. Но это работает в Windows7

%errorlevel% не работает в WindowsXP.

Насколько я знаю, при возникновении ошибки %errorlevel% устанавливает значение 1 или выше, а если ошибки нет, устанавливает 0.

Но, хоть ошибки и нет, %errorlevel% равен 1. И я поставил %errorlevel% 0, даже если есть ошибка %errorlevel% все равно 0.

Я думаю, что ОС не меняет %errorlevel% в XP.

В 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() выглядит сработавшим.


person Raymond    schedule 02.12.2013    source источник


Ответы (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
person Endoro    schedule 02.12.2013

Обычно это происходит, когда уровень ошибки устанавливается вручную. Предполагается, что это динамическая переменная, но когда вы установите для нее значение, проверки ее содержимого вернут не правильное значение уровня ошибки, а значение, которое вы для нее установили.

Если в вашей командной строке вы набираете set errorlevel и показывается переменная, то это ваша проблема. Очистите переменную (set errorlevel=) и все будет работать до тех пор, пока значение не будет установлено снова.

person MC ND    schedule 02.12.2013

Помимо пунктов, указанных в предыдущих ответах, вы должны знать, что существуют определенные внутренние команды, которые не изменяют значение уровня ошибки в определенных случаях. Если вы сомневаетесь, вы должны сделать небольшой тест, прежде чем предположить, что значение уровня ошибки изменилось после определенной команды. Простой способ установить уровень ошибки на 0 — использовать команду ver:

ver > nul
rem Here the errorlevel value is always 0
person Aacini    schedule 02.12.2013

Как уже упоминалось в этом ответе, проблема в вашем примере кода заключается в 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)
person aschipfl    schedule 06.08.2015