Batch Erstes Wort der Ping Antwort speichern

lynx^

Ensign
Registriert
Nov. 2004
Beiträge
217
Hallo,

ich suche eine Möglichkeit in einer Batch Datei das erste Wort der Antwort eines erfolgreichen Ping Befehls zu speichern und als Variable weiterzuverwenden. Hintergrund ist, dass ich eine batch Datei universell für verschiedene Länder bzw. OS Sprachen erstellen will. Für einen Remote Zugriff überprüfe ich dabei, ob der Rechner anzupingen ist. Falls das erfolgreich ist, kommt ja "Antwort von ..." zurück. Im englischen wäre das Wort dann "Reply" und für andere Sprachen eben andere Worte. Dieses Wort will ich nun automatisch abfragen indem ich zB. erst den eigenen Rechner anpinge über "Ping 127.0.0.1" und dann dieses erste Antwort Wort irgendwie als Variable speicher und im nächsten Schritt darauf prüfen kann.

Ich hoffe es war halbwegs verständlich was ich meine und ihr könnt mir helfen.

Gruß lynx
 
Was ich vergessen hab..es muss auch auf Windows 7 funktionieren und auch möglichst ohne dass noch irgendwas installiert werden muss.
Soweit ich das sehen konnte funktioniert Test-NetConnection nicht so einfach auf Win7?

Gruß lynx
 
leipziger1979 schrieb:
Wie kommst darauf ?
Win7 hat von Hause aus PS 2.0 drauf und da gibt es Test-Connection

Test-NetConnection ist erst mit Powershell 4.0 dabei, soviel ich mich erinnere. Test-Connection ist aber auf alle Fälle bei Powershell 2.0 dabei. :)
 
Ok mag sein, dass es mit der Powershell viel eleganter und praktischer geht. Da der ganze Rest jetzt aber schon über die batch datei läuft würde ich ganz gern dabei bleiben, falls es irgendwie machbar ist. Es geht auch nicht darum, dass es besonders "schön" funktionieren muss, hauptsache es funktioniert irgendwie. Außerdem scheint Test-Connection viel länger zu dauern als ein einfacher ping?

@ryan_blackdrago: Könntest du mir trotzdem auf diese Art helfen, auch wenn es unschön und unübersichtlich ist? Dass TCP/IP als Protokoll vorhanden ist davon kann ich ausgehen. Deine 2. Möglichkeit würde funktionieren, allerdings muss ich dafür erstmal in allen Sprachen wissen, was "help" heißt. Deshalb würde ich erstere bevorzugen.

Gruß lynx
 
Zuletzt bearbeitet:
Code:
@echo off

set tok=

for /f "tokens=1 delims= " %%i  in ('ping -n 1 127.0.0.1 ^| findstr /i "="') do (
	set tok=%%i
	goto :outofloop
)
:outofloop

echo %tok%
%tok% beinhaltet dann den ersten token, in meinem fall "Antwort".
beachte dazu:
  • ein erfolgloser ping liefert (zumindest bei mir) einen leeren string
  • zeilen 7 und 9 dienen dazu, nur die erste durch findstr in zeile 5 gematchte zeile der ping-ausgabe zu untersuchen
  • batch ist scheisse
 
Code:
ping -n 1 127.0.0.1 > nul

if errorlevel 1 (
  echo "fehler"
) else (
  echo "erfolg"
)
Nix Schleife, nix Lokalisierung, nix nix. Rückgabe prüfen, Sache erledigt.
 
Danke euch.
@Yuuri: Das ist tatsächlich die einfachste Lösung. Frag mich grade warum ich nicht selber auf das errorlevel gestoßen bin :confused_alt:
Funktioniert auf jeden Fall gut. Danke
Ergänzung ()

Funktioniert leider doch nicht so wie ich dachte. Ich hatte es erst mit einer nicht existierenden IP-Adresse versucht. Dabei ist er korrekt in "fehler" reingelaufen. Wenn ich allerdings die echte IP nehme, kommt "erfolg" zurück, egal ob der Zielrechner an oder aus ist.

Was mich auch verwirrt. Wenn der Rechner aus ist und ich ihn anpinge kommt:

Antwort von xxx.xxx.xx.xx: Zielhost nicht erreichbar
...
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0.

Wieso werden trotzdem 4 empfangene Pakete gewertet, obwohl der host nicht erreichbar ist? Ich vermute das ist auch der Grund warum das errorlevel nicht getriggert wird, da der Ping irgendwie als erfolgreich gewertet wird?

Gruß lynx
 
lynx^ schrieb:
Was mich auch verwirrt. Wenn der Rechner aus ist und ich ihn anpinge kommt:

Antwort von xxx.xxx.xx.xx: Zielhost nicht erreichbar
...
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0.

"xxx.xxx.xx.xx" ist nicht die Adresse, die du angepingt hast.
Aber ping hat seine Antwort erhalten und gibt den ERRORLEVEL=0 zurück. :)
 
ein windowsprogramm, das unerwartete ausgaben liefert, nanu... :)
Code:
ping -n 1 <ip> | findstr "TTL"
liefert vermutlich sprachunabhaengig gute ergebnisse. das ergebnis ist entweder ein string, oder ein leerer string.
 
Also zusammengefasst:

Code:
ping -n 1 <ip> | find "TTL" >nul && echo Rechner ist online. || echo Rechner ist offline
 
Zurück
Oben