2017-01-10 2 views
1

Ich versuche, einen automatisierten Ping-Test zu erstellen, der eine .cmd-Datei verwendet, die die IP-Adressen aus einer Datei namens Computer abruft. Es sieht so aus, als ob es größtenteils funktioniert, aber alle Ping-Tests nach dem ersten kommen wieder negativ oder tot.
A picture of the resultsAutomatisierter Ping-Test-Fehler

@echo off 
set fnm=C:\Users\jelliott\Desktop\computers.txt 
set lnm=C:\Users\jelliott\Desktop\results.txt 

if exist %fnm% goto Label1 

echo. 
echo Cannot find %fnm% 
echo. 
Pause 
goto :eof 

:Label1 
echo PingTest STARTED on %date% at %time% > %lnm% 
echo ================================================= >> %lnm% 
echo. 
for /f %%i in (%fnm%) do call :Sub %%i 
echo. 
echo ================================================= >> %lnm% 
echo PingTest ENDED on %date% at %time% >> %lnm% 
echo ... now exiting 
goto :eof 

:Sub 
echo Testing %1 
set state=alive 
ping -n 1 %1 
if errorlevel 1 set state=dead 
echo %1 is %state% >> %lnm% 
+0

Werfen Sie einen Blick auf dieses Skript: [Befehl auf der Basis der IP-Adresse aus der Textdatei ausführen] (http://stackoverflow.com/questions/41102657/run-command-based-on-ip-address-from-text- Datei? answertab = active # tab-top) – Hackoo

+0

Dumme Frage, aber ... von Ihrer Ausgabe lesen Sie Maschinennamen nicht IP-Adressen. Haben Sie überprüft, ob die Namensauflösung funktioniert? –

+0

Erster Schritt zum Batch-Debugging: ** Entfernen Sie "@echo off" von der Spitze Ihrer Datei und lesen Sie die Fehler. ** Diese Zeile unterdrückt die Debugging-Informationen, und Sie bitten die Leute auf SO zu raten, was schief läuft ganze Batch-Datei. –

Antwort

0

Ich weiß nicht, ob dies die Ursache des Problems, aber die Fehlerebene nach einer ping Anfrage ist nicht zuverlässig ist: Es ist nicht immer auf 0 nach einem erfolgreichen ping festgelegt ist. Die zuverlässigste Möglichkeit, einen erfolgreichen Ping zu überprüfen, besteht darin, in der Ausgabe des Befehls ping nach "TTL =" zu suchen. Die Ausgabe eines erfolgreichen Ping enthält immer die TTL der Ping-Antwort. In anderen Fällen wird die Ausgabe nicht "TTL =" enthalten. statt
die Errorlevel dieses Befehls überprüfen:

ping -n 1 %1 | find "TTL=" 

find ermöglicht eine Zeichenkette in einem Text zu suchen. Es wird den Fehlerlevel auf 0 setzen, wenn es gefunden wird, und andernfalls auf 1. Sie können auch findstr anstelle von find verwenden.

EDIT: Dies ist nur für den Fall, dass die Adressen, die Sie anpingen, IPv4 sind. Bei IPv6-Adressen ist der Errorlevel korrekt eingestellt. Für IPv6 wird kein TTL gedruckt, daher muss der errorlevel verwendet werden, um zu überprüfen, ob der Ping erfolgreich war oder nicht. [Hier] finden Sie eine allgemeine Möglichkeit zu überprüfen, ob der Ping erfolgreich war oder nicht (entweder IPv4 oder IPv6). Danke MC ND für die Anmerkung und den Link. Wenn Sie IPv4 oder IPv6 erzwingen möchten, können Sie die -4 oder die -6 Flags von ping verwenden.

+1

Es ist besser, nach 'TTL =' zu suchen (es gibt Fehler, die die 'TTL'-Zeichenfolge enthalten) und ** nur **, wenn Sie testen ipv4-Adressen. (mehr [hier] (http://Stackoverflow.com/a/27748080/2861476)) –

+0

Ja, du hast Recht. Danke! –

+0

Es hat immer noch nicht funktioniert. Ich bemerkte, dass nach dem ersten Ping, der eine sagt es ist lebendig, es gibt die Antwort mit der Bytes Zeit und so weiter, aber mit dem Rest es einfach sagt Überprüfung "was auch immer IP" – JacobElliott

Verwandte Themen