Batch Ping script funktioniert nicht

ThePommesBude

Newbie
Registriert
Juli 2015
Beiträge
5
Hallo,

ich habe hier ein kleines script geschrieben, dass die IP adressen Pingen soll und zurück geben soll, ob der Ping erfolgreich war oder nicht.

Leider gibt der auch erfolgreich aus, wenn der Ping zur Zeitüberschreitung geführt hat. Kann mir da jemand helfen das er Offline ausgibt sobald eine Zeitüberschreitung stattfindet ?


ECHO OFF

echo.

CLS

set /a cnt=0

:Beginn
set /a cnt=%cnt% +1
if %cnt% LEQ 255 goto :Ping
if %cnt% GTR 255 goto :end

:Ping
ping /n 1 ipadresse.%cnt%
if %errorlevel% == 1 goto :falsch

:richtig
echo >> statusreportonline_%date%.txt "ipadresse.%cnt% Rechner ist online Uhrzeit des pings %time%"
goto :Beginn

:falsch
echo >> statusreportoffline_%date%.txt "ipadresse.%cnt% Rechner ist Offline Uhrzeit des pings %time%"
goto :Beginn

:end

pause

Ausgabe: Gültigkeitsdauer wurde bei der Übertragung überschritten. Aber es wird trotzdem als Online ausgeben und das soll nicht sein.



Vielen Dank.

Sorry bin noch Auszubildender wenn das ein ganz leichter fehler ist :D
 
Bei Ping scheint es einen Bug zu geben wenn die IP gar nicht erreichbar ist gibt es Errorcode 0 zurück, man kann aber explizit ein Timeout angeben, dann wird auch Errorcode 1 zurückgegeben:

ping /n 1 /w 2999 ipadresse.%cnt%
 
Suchmachine mit "ping" und "errorlevel" gefüttert gibt eigendlich sehr schnell die Antwort warum das so ist und wie man das Problem lösen kann.

ping setzt den errorlevel abhängig davon, ob der Befehl ping fehlerfrei beendet wurde; das ist immer der Fall, solange man nicht ungültige Parameter übergibt. (Welche Antwort ping erhält spielt keine Rolle.)
es eine Antwort gab, die Antwort muss aber nicht vom gewünschten Ziel kommen, z.B. eine Fehlermeldung vom Gateway ist eine gültige Antwort.

Betrachte also nicht den Errorlevel von Ping, sondern von find, mit welchem man die Textausgabe von Ping analysiert.
Nur bei einer "echten" Antwort taucht z.B. ein TTL auf.

Also statt z.B.:
Code:
ping /n 1 10.0.0.2

mach ein
Code:
ping /n 1 10.0.0.2 | find "TTL"
 
Zuletzt bearbeitet:
lynxx schrieb:
Bei Ping scheint es einen Bug zu geben wenn die IP gar nicht erreichbar ist gibt es Errorcode 0 zurück, man kann aber explizit ein Timeout angeben, dann wird auch Errorcode 1 zurückgegeben:

ping /n 1 /w 2999 ipadresse.%cnt%


Hallo Danke schonmal für den Tipp. Ich habe es mal ausprobiert, er gibt aber immer noch an das der PC online ist, ob das nicht stimmt
Ergänzung ()

@HDScratcher Vielen Dank es funktioniert jetzt.
 
Zuletzt bearbeitet:
@HDScratcher

Win 8.1 scheint Ping den Bug nicht mehr zu haben:

Ping funktioniert - Errorlevel: 0
Ping funktioniert nicht - Errorlevel: 1

Ping wird mit STRG-C abgebrochen: -1073741510

Hier würde wohl das Ursprungsscript laufen
 
Zurück
Oben