2016-05-25 5 views
2

Okay, also hier ist die Situation. Ich habe eine sehr große Textdatei, die viele verschiedene IP-Adressen enthält. Ich möchte eine Batch-Datei erstellen oder alles, was die Arbeit erledigt, um alle Host-Namen für diese IP-Adressen aufzulösen.Holen Sie Hostnamen von Ping und speichern Sie Ergebnisse in Text

Derzeit, ich habe die IP-Adressen eine Zeile pro Zeile in einer Datei namens addresss.txt gespeichert.

Ich habe auch eine Batch-Datei mit dem folgenden Code:

@echo off 
for /f "delims=" %%a in (addresses.txt) do ping -a %%a >> PING_LOG.txt && (echo %%a Passed) || (echo %%a Failed) 
pause 

Dies scheint in Ordnung zu arbeiten. Es füllt meine Textdatei mit allen Ergebnissen aus dem Ping; der Hostname, die Antworten, die Statistiken, die Pakete, usw.

Hier ist das Problem: ich nur die Adresse Ich möchte pinged und den Hostnamen in meine Ausgabedatei geschrieben werden. Kann ich das irgendwie schaffen? Durch die Stapelbefehle? Mit anderen Mitteln (z. B. indem Sie die Ausgabedatei verwenden und sie durch etwas anderes führen, um die Informationen zu erfassen)? Ich versuche immer noch aktiv zu sehen, was ich herausfinden kann, aber jegliche Hilfe würde immens geschätzt werden.

(Das Endziel ist es, die Hostnamen und Adressen in einer Excel-Tabelle Seite an Seite zu platzieren, und wenn man bedenkt es gibt buchstäblich Tausende von ihnen tun es manuell schrecklich klingt)

MY ENDLÖSUNG

@echo off 
setlocal EnableDelayedExpansion 
for /f "tokens=*" %%A in (addresses.txt) do (
    set "_res=%%A" 
    for /f "tokens=2" %%B in ('^(nslookup %%A ^) ^| findstr /c:"Name:"') do set "_res=!_res!, %%B" 
    echo !_res! >> LOG.txt 
    echo !_res! 
) 
endlocal 

Dank Dmitry und Gravity für die Hilfe^

Als nächstes nahm ich die Daten und ließ ihn in ein Tabellenkalkulationsprogramm (nur eine Spalte). Ich schrieb ein Makroskript, das jede Zelle betrachtete, die Daten in ein String-Array unter Verwendung des Kommas als Delimeter aufteilte und dann jede resultierende Zeichenfolge in eine Spalte nebeneinanderlegte (ip | name).

+1

eine IP-Adresse erzeugen Pingen wird nicht (normalerweise) gib den Hostnamen zurück dieser IP-Adresse für Sie. Klingt ein wenig mehr wie "nslookup" -Funktion ist was Sie brauchen .. aber Sie sagen, dass _ "... füllt meine Datei mit allen Ergebnissen ... ** Hostname ** ..." _ Es gibt Umgebungen, in denen einige Leute sehen Hostnamen in 'ping' Ergebnissen, aber ich würde nicht empfehlen, sie hier zu verwenden. – gravity

+0

@gravity: 'ping -a' tut normalerweise. – Stephan

+0

@gravity -a erhielt die Informationen, die ich brauchte, aber Sie haben Recht, nslookup ist besser. Das habe ich total vergessen. Ich werde versuchen, die Lösung von Dmitry mit nslookup neu zu schreiben, und ich werde posten, was auch immer ich mir vorstellen kann. – Thomas

Antwort

0

Pass ping ... Befehl findstr und dann die Ausgabe in der zweiten for Schleife analysieren:

@echo off 
setlocal EnableDelayedExpansion 
for /f "tokens=*" %%A in (addresses.txt) do (
    set "_res=%%A" 
    for /f "tokens=2" %%B in ('^(ping -a %%A ^&^& echo --- ok^|^| echo --- failed^) ^| findstr /c:" [" /c:"---"') do set "_res=!_res!, %%B" 
    echo !_res! 
) 
endlocal 

Für addresses.txt

8.8.8.8 
88.88.77.77 

wird

8.8.8.8, google-public-dns-a.google.com, ok 
88.88.77.77, ti0150a400-1603.bb.online.no, failed 
+0

FAST perfekte Lösung. Ich brauchte die Ausgabe in eine Textdatei, also habe ich diese Änderung vorgenommen: 'echo! _res! >> LOG.txt' und es scheint zu funktionieren. Die einzige Sache ist, jetzt habe ich keine Möglichkeit, den Fortschritt im Befehlsfenster zu verfolgen. Gibt es eine Möglichkeit, sowohl das Befehlsfenster als auch eine Textdatei auszugeben? – Thomas

+0

Fügen Sie einfach ein weiteres 'echo! _res!' Nach dem ersten 'echo' hinzu. –

+0

Das hat funktioniert. Eine andere Frage an dich. Ich versuche, nslookup zu verwenden. Soweit ich das sagen kann, beziehen sich die Token nur auf die erste Zeile, und ich kann anscheinend nicht in der Lage sein, irgendeine der Antwortinformationen aus dem nslookup (oder irgendetwas nach 8 für den Ping-a) zu greifen. Wie genau funktioniert das? (nslookup reagiert viel schneller, und wenn man bedenkt, dass es Tausende gibt, denke ich, dass es besser funktionieren würde) – Thomas

Verwandte Themen