unterschiedliche errrorlevel mit ping
Ein herzliches Hallo(bin noch neu),
folgender Fall:
ich hab eine Datei(pcliste.txt) die ich für eine Pingabfrage benutze um zu sehen ob der entsprechende PC noch da ist.
Anhand des %ERRORLEVEL% wird dann die weitere Verarbeitung gesteuert.
Die erste Abfrage schaut wie folgt aus:
funktioniert wunderbar!
Mit dem zweiten ping will ich aber nicht gezielt einen PC auschalten sondern alle in der Datei pcliste.txt:
dummerweise kommt als errorlevel immer 0 heraus, egal ob der ping erfolgreich war oder nicht.
Was macht mir die for-schleife mit dem errrorlevel?
Dickes Danke im Vorraus
folgender Fall:
ich hab eine Datei(pcliste.txt) die ich für eine Pingabfrage benutze um zu sehen ob der entsprechende PC noch da ist.
Anhand des %ERRORLEVEL% wird dann die weitere Verarbeitung gesteuert.
Die erste Abfrage schaut wie folgt aus:
for /f "tokens=1,2,3,4 delims= " %%i in ('findstr +%pc%+ pcliste.txt') do ping -n 1 -w 5 %%l >nul
Mit dem zweiten ping will ich aber nicht gezielt einen PC auschalten sondern alle in der Datei pcliste.txt:
for /f "tokens=1,2,3,4 delims= " %%a in (pcliste.txt) do (
echo prüfe ob der PC "%%b" online ist:
ping -n 1 -w 5 %%d >nul
if %errorlevel%==0 (shutdown -s -t 120 -m \%%b) else echo "der PC "%%b" "%%d" ist bereits offline!"
)
dummerweise kommt als errorlevel immer 0 heraus, egal ob der ping erfolgreich war oder nicht.
Was macht mir die for-schleife mit dem errrorlevel?
Dickes Danke im Vorraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 63145
Url: https://administrator.de/forum/unterschiedliche-errrorlevel-mit-ping-63145.html
Ausgedruckt am: 27.04.2025 um 16:04 Uhr
7 Kommentare
Neuester Kommentar
Moin Danick,
willkommen im Forum.
Suche mal im Forum (oder speziell im Bereich Batch & Shell) nach "DelayedExpansion".
Oder lies in der Hilfe bei Set/Setlocal am CMD-Prompt unter den Stichworten "verzögerte Variablenauflösung/Delayed Expansion" nach, warum eine dynamische Auflösung einer %variablen% innerhalb einer FOR-Anweisung nicht funktioniert.
Mit meinen Worten kurz umrissen:
Für den CMD-Interpreter ist Deine optisch mehrzeilig formatierte FOR-Anweisung eine Anweisung.
In einer Anweisung werden Variablen einmalig aufgelöst. Nicht mehrmals.
Abhilfe:
Beispiel:
[ungetestete Skizze]
Grüße
Biber
willkommen im Forum.
Suche mal im Forum (oder speziell im Bereich Batch & Shell) nach "DelayedExpansion".
Oder lies in der Hilfe bei Set/Setlocal am CMD-Prompt unter den Stichworten "verzögerte Variablenauflösung/Delayed Expansion" nach, warum eine dynamische Auflösung einer %variablen% innerhalb einer FOR-Anweisung nicht funktioniert.
Mit meinen Worten kurz umrissen:
Für den CMD-Interpreter ist Deine optisch mehrzeilig formatierte FOR-Anweisung eine Anweisung.
In einer Anweisung werden Variablen einmalig aufgelöst. Nicht mehrmals.
Abhilfe:
- im Normalfall: Mit "Setlocal EnableDelayedExpansion" und der "!variable!"-Schreibweise
- oder Alternativ: durch Einbauen eines geCALLten SubBlocks und Setzen/Prüfen der %variable% dort
- Alternative III überspring ich mal - zu abwegig.. CALL und viele Prozentzeichen
- oder, was in Deinem Fall zu empfehlen ist: Eine Prüfung auf IF [NOT] ERRORLEVEL (Teil der IF-Syntax) statt auf %ERRORLEVEL% (Umgebungsvariable).
Beispiel:
for /f "tokens=1,2,3,4 delims= " %%a in (pcliste.txt) do (
echo prüfe ob der PC "%%b" online ist:
ping -n 1 -w 5 %%d >nul
if not errorlevel 1 (shutdown -s -t 120 -m \%%b) else echo "der PC "%%b" "%%d" ist bereits offline!"
)
Grüße
Biber

Nabend, ich bin auch neu.
Interessieren würde mich einmal, was mit einem bereits ausgeschalteten PC passiert, wenn man versucht, ihn per shutdown auszuschalten.
Bleibt der ausgeschaltet oder geht er kaputt? :D
Ich frage deshalb, weil die if ... else Bedingung m. E. keinerlei Sinn ergibt.
Interessieren würde mich einmal, was mit einem bereits ausgeschalteten PC passiert, wenn man versucht, ihn per shutdown auszuschalten.
Bleibt der ausgeschaltet oder geht er kaputt? :D
Ich frage deshalb, weil die if ... else Bedingung m. E. keinerlei Sinn ergibt.
Na, ernstaugust,
dann lies die Bedingung noch mal in Ruhe.... *gg
Was wird denn geprüft?
Natürlich würde nichts Schlimmes passieren, wenn Du einem nicht erreichbaren Rechner den Befehl zum Shutdown erteilst...
Aber besserer Stil ist es schon, solche Aufforderungen nur an anpingbare Rechner zu stellen.
Auch wenn es nur ein Batch, braucht doch niemand gleich so brachiale Methoden anwenden.
Grundsätzlich streben es die meisten Coder an, Fehler abzufangen/abzuprüfen und nicht einfach Fehler auf IGNORE zu setzen.
Grüße
Biber
dann lies die Bedingung noch mal in Ruhe.... *gg
Was wird denn geprüft?
Natürlich würde nichts Schlimmes passieren, wenn Du einem nicht erreichbaren Rechner den Befehl zum Shutdown erteilst...
Aber besserer Stil ist es schon, solche Aufforderungen nur an anpingbare Rechner zu stellen.
Auch wenn es nur ein Batch, braucht doch niemand gleich so brachiale Methoden anwenden.
Grundsätzlich streben es die meisten Coder an, Fehler abzufangen/abzuprüfen und nicht einfach Fehler auf IGNORE zu setzen.
Grüße
Biber

@Biber
Grundsätzlich stimmt das schon, was du anführst. Nur sehe ich immer noch keinen Sinn darin, Klimmzüge zu veranstalten, nur um alle PCs auszuschalten.
Grundsätzlich stimmt das schon, was du anführst. Nur sehe ich immer noch keinen Sinn darin, Klimmzüge zu veranstalten, nur um alle PCs auszuschalten.

@Danick
Man könnte das auch über den Taskplaner lösen, indem man z. B. den Rechner täglich nach Dienstschluss automatisch herunterfahren lässt, falls der User das vergessen haben sollte.
Man könnte das auch über den Taskplaner lösen, indem man z. B. den Rechner täglich nach Dienstschluss automatisch herunterfahren lässt, falls der User das vergessen haben sollte.