Stapel-ERRORLEVEL-Ping-Antwort

8

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

    
LastStar007 17.02.2012, 14:12
quelle

12 Antworten

2

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:

%Vor%

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.

    
Jon 17.02.2012, 14:24
quelle
16

Eine zuverlässigere ping Fehlerprüfmethode:

%Vor%

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 .

    
Jelle Geerts 15.10.2015 21:09
quelle
4

Wenn Sie es waren

%Vor%

Sie würden sehen, dass % entfernt ist. Sie müssen es umgehen, da % in einer Batchdatei eine besondere Bedeutung hat:

%Vor%

Es ist jedoch einfacher, TTL als Zeichen des Erfolgs zu verwenden;

%Vor%     
Alex K. 17.02.2012 14:23
quelle
4

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.

    
RolfBly 25.12.2012 22:32
quelle
2
%Vor%     
Chandan 03.03.2017 14:02
quelle
1

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

    
Martin Binder 11.07.2013 16:33
quelle
1

Eine weitere Variante ohne Verwendung einer Variablen

%Vor%     
Toni Lazazzera 07.11.2013 11:01
quelle
0

Ja Ping liefert nicht den korrekten Fehlerlevel. Um die Netzwerkverbindung und den Computer zu überprüfen, benutzte ich "net view computername" und dann% errorlevel% - simple and easy

    
Brian 24.06.2015 00:10
quelle
0

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.

    
Justin Duijn 11.07.2013 14:27
quelle
0

ping hat einen Fehlerlevel-Ausgabewert. Erfolg ist 0, Fehler ist 1. Tun Sie das einfach:

%Vor%

Wie Sie sehen können, müssen Sie diesen Skript-Overkill nicht verwenden.

    
Mr. Pink 24.07.2013 03:10
quelle
0

Nach Alex Ks Notiz funktioniert das für mich unter Windows 7:

%Vor%     
Andrew S 11.12.2012 17:57
quelle
0
%Vor%

ErrorLevel ist 0 , wenn example.com online ist, 1 andernfalls.

HINWEIS: Getestet nur auf Win8!

    
Fabio Iotti 28.04.2014 16:08
quelle