Próbuję zarejestrować wyjście net stop
, a także przechwycić jego ERRORLEVEL
.ERRORLEVEL w FOR/F Pętla sterująca zwraca nieoczekiwany wynik
podstawie this question próbowałem następujące od wewnątrz podprogramu zagnieżdżonego:
set /a loopIndex=0
for /F "usebackq delims=" %%i in (`net stop %SERVICE_NAME%`) do (
if !loopIndex! EQU 0 if !errorlevel! EQU 1 set statementError=1
set /a loopIndex+=1
call :logMessage "%%i"
)
echo statementError: %statementError%
Jednak to nie działa, rzucając 1
nawet gdy net stop
powiedzie.
Czy jest to możliwe bez pliku tymczasowego? Jeśli nie, jak będzie wyglądało rozwiązanie pliku tymczasowego?
ERRORLEVEL nie jest zmienną środowiskową. Nie musi być otoczony przez% lub! 'IF ErrorLevel 1' działa poprawnie. –
Przeczytaj ponownie połączony wpis. * Oprócz tego stanu wewnętrznego, ** możesz, jeśli chcesz, utworzyć zmienną środowiskową o nazwie ERRORLEVEL **, w ten sam sposób, w jaki możesz utworzyć zmienną środowiskową o nazwie FRED. Ale tak jak w przypadku FRED, zmienna ta nie będzie miała żadnego wpływu na poziom błędu. * (** podkreślenie moje **). –
@KenWhite 'ERRORLEVEL' * to * automatyczna zmienna środowiskowa, podobnie jak' CD', 'DATA' lub' RANDOM'. – dxiv