Czy ktoś może mi pomóc zrozumieć zachowanie %ERRORLEVEL%
zmiennej i dlaczego to nie jest ustalona po CALL
będąc wewnątrz IF
, czyli linia ECHO %ERRORLEVEL%.2
?IF, CALL, EXIT i% ERRORLEVEL% w .bat
@ECHO OFF
SET ERRORLEVEL
VERIFY > NUL
ECHO %ERRORLEVEL%.0
IF ERRORLEVEL 1 ECHO SNAFU
IF %ERRORLEVEL% == 0 (
ECHO %ERRORLEVEL%.1
CALL :FOO
ECHO %ERRORLEVEL%.2
IF ERRORLEVEL 42 ECHO 42.3
)
GOTO :EOF
:FOO
EXIT /B 42
GOTO :EOF
STDOUT
C:\Users\Ilya.Kozhevnikov\Dropbox>foo.bat
Environment variable ERRORLEVEL not defined
0.0
0.1
0.2
42.3
Jednak bez IF
zmienna %ERRORLEVEL%
jest ustawiony prawidłowo.
@ECHO OFF
SET ERRORLEVEL
VERIFY > NUL
ECHO %ERRORLEVEL%.0
IF ERRORLEVEL 1 ECHO SNAFU
REM IF %ERRORLEVEL% == 0 (
ECHO %ERRORLEVEL%.1
CALL :FOO
ECHO %ERRORLEVEL%.2
IF ERRORLEVEL 42 ECHO 42.3
REM)
GOTO :EOF
:FOO
EXIT /B 42
GOTO :EOF
STDOUT
C:\Users\Ilya.Kozhevnikov\Dropbox>foo.bat
Environment variable ERRORLEVEL not defined
0.0
0.1
42.2
42.3
możliwe duplikat [Windows partii ustawić wewnątrz jeśli nie pracuje] (http : //stackoverflow.com/questions/9102422/windows-batch-set-inside-if-not-working) – Laf
Zobacz pytanie, które oznaczyłem jako duplikat. To wyjaśnia dokładnie, co dzieje się z twoim skryptem i co musisz zrobić, aby rozwiązać problem. – Laf