Ich versuche, eine Batch-Datei zu verwenden, um eine Netzwerkverbindung mit Ping zu bestätigen. Ich möchte Batch-Lauf und dann drucken, wenn der Ping erfolgreich war oder nicht. Das Problem ist, dass es immer "Fehler" anzeigt, wenn es als Stapel ausgeführt wird. Hier ist der Code:
%Vor%'racer' ist der Name meines Computers. Ich lasse meinen Computer selbst pingen, damit ich die Variable einer schlechten Verbindung eliminieren kann. Wie ich bereits sagte, führt der Batch immer zu einem Fehler. Seltsamerweise funktioniert das Programm gut, wenn ich den Code in die Eingabeaufforderung kopiere. Weiß jemand, warum das Programm in der Eingabeaufforderung funktioniert, aber nicht als Stapel? Danke
Ich bin mir nicht ganz sicher, was die Interaktion zwischen FIND
und der Einstellung der Fehlerstufe ist, aber Sie können das ganz leicht tun:
Dies druckt 0
, wenn der Ping fehlgeschlagen ist, 1
, wenn es erfolgreich war. Ich habe es nur für "0% Verlust" (nicht speziell für 4 Pings) gemacht, damit die Anzahl der Pings angepasst werden kann.
Das Prozentzeichen wurde verdoppelt, damit es nicht mit einer Variablen verwechselt wird, die ersetzt werden sollte.
Der Trick FOR
dient lediglich dazu, die Ausgabe eines Befehls als Wert einer Umgebungsvariablen festzulegen.
Eine zuverlässigere ping
Fehlerprüfmethode:
Dies funktioniert, indem überprüft wird, ob eine Zeichenfolge wie 69 ms
oder 314ms
von ping
gedruckt wird.
(Übersetzte Versionen von Windows drucken möglicherweise 42 ms
(mit Leerzeichen), daher prüfen wir das.)
Grund:
Andere Vorschläge, wie die Übereinstimmung von time=
oder TTL
, sind nicht so zuverlässig, da das Pingen von IPv6-Adressen TTL
nicht anzeigt (zumindest nicht auf meinem Windows 7-Rechner) und übersetzte Versionen von Windows möglicherweise ein übersetzte Version der Zeichenfolge time=
. Außerdem kann time=
nicht nur übersetzt werden, sondern manchmal auch time<
anstatt time=
, wie im Fall von time<1ms
.
Das Testen auf 0% Verlust kann in diesem Szenario zu einem falschen Ergebnis führen: Angenommen, Sie haben normalerweise ein Netzwerklaufwerk unter some_IP-address und Sie möchten herausfinden, ob es angeschaltet ist oder nicht.
Wenn dieses Laufwerk ausgeschaltet ist und Sie eine IP-Adresse pingen, antwortet die IP-Adresse, von der aus Sie pingen:
Answer from your_own_IP-address: target host not reachable
... 0% loss
Sie können besser if exist
oder if not exist
an diesem Netzwerkspeicherort verwenden.
Die einfachste Lösung dafür kann ich mir vorstellen:
%Vor%Natürlich muss -w angepasst werden, wenn auf einer langsamen Verbindung (100 ms zu kurz über Dialup sein; -))
Grüße
Vor allem
%Vor%Funktioniert nicht. Wenn es nicht fehlschlägt, erkennt es 0%, weil es 0% hat. Wenn es fehlschlägt, funktioniert es auch nicht, weil es 100% Verlust hat, was bedeutet, dass es den 0% Verlustteil hinter den 10 gefunden hat 10 (0% Verlust)
Haben Sie für 100% Verlust wie folgt erkannt:
%Vor%Errorlevel ist vielleicht etwas durcheinander, aber es funktioniert wie ein Zauber:
%Vor%1 bedeutet, dass es fehlgeschlagen ist 0 bedeutet, dass es gelungen ist
In meinem Skript verwenden Sie Links. Goto fail geht zu: scheitern in meinem Skript, das mir mitteilen wird, dass% pc% (die ich die Benutzereingabe am Anfang haben werde) offline ist und für einen weiteren Lauf gehen wird.
%Vor%Ich hoffe, das hilft.
ErrorLevel
ist 0
, wenn example.com online ist, 1
andernfalls.
HINWEIS: Getestet nur auf Win8!
Tags und Links windows ping batch-file command-prompt