kalma73
Goto Top

Seltsames Verhalten bei Errorlevel abfrage in FOR DO Schleife

Hallo,

ich bin gerade dabei ein Stromausfall Shutdown Script zu schreiben.

Habe schon einiges Ausprobiert und mir ist etwas seltsames aufgefallen.

Dies ist ein Code Bereich aus einem Testscript.
setlocal
cls
@echo off
echo Start mit EL %errorlevel%

set servers=1.1.1.1 192.168.5.15
echo Start mit EL %errorlevel%
for %%i in (%servers%) do (
echo %%i anpingen
ping -n 1 %%i |Find "TTL="
echo Ergebnis ist EL %errorlevel%
)

ping -n 1 1.1.1.1 |Find "TTL="
echo Ergebnis ist EL %errorlevel%

endlocal

Sinn des Scripts ist es mit dem Errorlevel ein Schleife zubauen der alle Maschinen abfragt ob Sie noch online bzw. offline sind damit ich danach die ESX Server herunterfahren kann.

Wenn ich in der Schleife den Errorlevel abfrage bei IP 1.1.1.1 bekomme ich den Wert 0 (Das ist aber falsch)
Bei der IP 192.168.5.15 bekomme ich auch den Wert 0 (ist das richtig, da IP verfügbar)

Rufe ich den Errorlevel ohne Schleife bei IP 1.1.1.1 auf ist der Wert 1 (dies ist Richtig)


Ich möchte aber diese Schleife nutzen, da ich ca. 15 Server abfragen muss.

Wieso wird mir der Wert in der Schleife FALSCH angezeigt. Würde ich das so in mein Shutdownscript schreiben, würden die ESX Server nie herunterfahren und die MSA die danach kommt einfach radikal abstürzen.

Über Hilfe würde ich mich freuen.

Kalma

Content-Key: 310984

Url: https://administrator.de/contentid/310984

Printed on: April 26, 2024 at 10:04 o'clock

Member: Kalma73
Kalma73 Jul 27, 2016 at 09:04:18 (UTC)
Goto Top
Habe die Lösung in einer Batch Wiki gefunden

setlocal EnableDelayedExpansion
cls
@echo off
echo Start mit EL %errorlevel%
REM set servers=127.0.0.1 1.1.1.1 127.0.0.1
echo Start mit EL %errorlevel%

set servers=1.1.1.1 192.168.5.15
echo Start mit EL %errorlevel%
for %%i in (%servers%) do (
echo %%i anpingen
ping -n 1 %%i |Find "TTL="
echo Ergebnis ist EL %ERRORLEVEL% und !errorlevel!
IF !ERRORLEVEL! EQU 0 (echo 000)
IF !ERRORLEVEL! EQU 1 (echo 111)
)

ping -n 1 1.1.1.1 |Find "TTL="
echo Ergebnis ist EL %errorlevel% und !errorlevel!

endlocal


Jetzt wird er Wert richtig ausgegeben.

Laut der Batch Wiki wird der Wert %errorlevel% erst am ende der Schleife gefüllt und somit hier nicht richtig ausgegeben.
Der Wert setlocal EnableDelayedExpansion aktiviert den Wert !errorlevel! und gibt den Wert trotz nicht beendeter Schleife richtig aus.

Kalma