Wie extrahiere ich die IPv4-IP-Adresse aus der Ausgabe von ipconfig?

19718
Samuel Pauk

Ich versuche, cmd nur einen bestimmten Zeichensatz aus einer Befehlsausgabe kopieren zu lassen. Ich konnte die Zeile auswählen, in der die Phrase existiert, aber von dort bin ich verloren. Hier ist mein Befehl bis jetzt.

ipconfig | findstr /i "ipv4" 

Ich bin sicher, dass Sie mit dem ipconfigBefehl und dem findstrBefehl vertraut sind . Grundsätzlich isoliere ich die IPv4-Adresse des jeweiligen Computers. Dies ist, was der obige Befehl.

IPv4 Address. . . . . . . . . . . : 192.168.1.75 

Ich möchte "192.168.1" isolieren. und haben das in einer Variablen gespeichert, die später in einem Befehl verwendet werden soll. Sagen Sie, dass ich "192.168.1" eingestellt habe. zu variabel a.

Der nächste Befehl, den ich ausführen möchte, scannt alle IP-Adressen von 192.168.1.1 bis 192.168.1.254 und speichert die verwendeten Adressen. Da dieses in Kürze zu programmierende Programm auf verschiedenen Computern an verschiedenen Orten ausgeführt wird, wird die "192.168.1" ausgeführt. wird anders sein und ich freue mich darauf, zu isolieren, was cmd an seinem Ort platziert. Die vorgenannte Variable a könnte also 192.168.10., 10.10.10. Oder sogar 1.1.1 sein, ist aber nicht darauf beschränkt. kommt auf die Situation an. Hier ist der Code, den ich verwenden werde.

FOR /L %i IN (1,1,254) DO ping -n 1 (the 'a' variable)%i | FIND /i "bytes=">>c:\ipaddresses.txt 

oder wenn zu sehen, wie die Variable aussehen wird, hilft das.

FOR /L %i IN (1,1,254) DO ping -n 1 192.168.1.%i | FIND /i "bytes=">>c:\ipaddresses.txt 

Ich verwende eine 64-Bit-Windows 10 Pro-Maschine.

2
Wenn ich die Ausgabe von `ipconfig | exportieren muss findstr / i "ipv4" `zu einer Textdatei, die vollkommen akzeptabel ist. Samuel Pauk vor 8 Jahren 0
Ich bin kein Windows-Benutzer, aber Sie können 'sed' oder 'perl' oder einen anderen Regexp-Prozessor verwenden, um diese Zeichen mithilfe eines regulären Ausdrucks zu isolieren. Der reguläre Ausdruck wäre ungefähr ^. * (\ D \. \ D \. \ D \.) \ D . * $ Und dann behalten Sie nur die erste Erfassungsgruppe bei (innerhalb der Klammern, zum Beispiel mit \ 1 in sed). retrography vor 8 Jahren 0
@retrography Windows hat nicht `sed`,` perl` usw. eingebaut. Das Problem des OP kann mit integrierten Befehlen gelöst werden (siehe meine Antwort) DavidPostill vor 8 Jahren 1

2 Antworten auf die Frage

3
DavidPostill

Ich möchte "192.168.1" isolieren. und haben das in einer Variablen gespeichert

Verwenden Sie die folgende Batchdatei (test.cmd):

@echo off setlocal setlocal enabledelayedexpansion rem throw away everything except the IPv4 address line  for /f "usebackq tokens=*" %%a in (`ipconfig ^| findstr /i "ipv4"`) do ( rem we have for example "IPv4 Address. . . . . . . . . . . : 192.168.42.78" rem split on : and get 2nd token for /f delims^=^:^ tokens^=2 %%b in ('echo %%a') do ( rem we have " 192.168.42.78" rem split on . and get 4 tokens (octets) for /f "tokens=1-4 delims=." %%c in ("%%b") do ( set _o1=%%c set _o2=%%d set _o3=%%e set _o4=%%f rem strip leading space from first octet set _3octet=!_o1:~1!.!_o2!.!_o3!. echo !_3octet! ) ) ) rem add additional commands here endlocal 

Anmerkungen:

  • Der gewünschte Wert wird gespeichert _3octet
  • Entfernen Sie das, echowas für das Debugging vorhanden ist
  • Ersetzen Sie rem add additional commands heremit Ihrem "Netzwerk-Ping"

Verwendungsbeispiel und Ausgabe:

F:\test>ipconfig | findstr /i "ipv4" IPv4 Address. . . . . . . . . . . : 192.168.42.78  F:\test>test 192.168.42. 

Lesen Sie weiter

  • Ein AZ-Index der Windows-CMD-Befehlszeile - Eine hervorragende Referenz für alles, was mit Windows-Cmd-Zeilen in Verbindung steht.
  • enabledelayedexpansion - Eine verzögerte Erweiterung bewirkt, dass Variablen nicht zur Analysezeit, sondern zur Ausführungszeit erweitert werden.
  • for / f - Schleifenbefehl gegen die Ergebnisse eines anderen Befehls.
  • ipconfig - IP konfigurieren (Internet Protocol-Konfiguration)
  • set - CMD-Umgebungsvariablen anzeigen, festlegen oder entfernen. Mit SET vorgenommene Änderungen bleiben nur für die Dauer der aktuellen CMD-Sitzung erhalten.
  • setlocal - Legen Sie Optionen fest, um die Sichtbarkeit von Umgebungsvariablen in einer Batchdatei zu steuern.
  • variables - Extrahieren Sie einen Teil einer Variablen (Teilzeichenfolge).
Vielen Dank David! Ich habe den Code ausprobiert und er hatte genau das, was ich wollte. Mein einziges Problem ist, dass ich die Variable `! _3octet! 'Nicht verwenden kann. Bitte entschuldigen Sie meine Unwissenheit, wenn ich etwas falsch mache. Hier ist die erste Instanz, in der ich diese Variable verwenden werde. `cd C: \ Windows für / l% i IN (1,1,254) Ping -n 1! _3octet!% i` Statt den Variablenbefehl anzuschließen, erfolgt stattdessen ein Ping für"! _3octet!% i "mit`% Ich bin jede Zahl 1-254 Samuel Pauk vor 8 Jahren 0
@SamuelPauk wie angewiesen, ersetzen Sie "rem add zusätzliche Befehle hier" in der Batchdatei durch "für / l %% i in (1,1,254). Ping -n 1! _3octet! %% i` DavidPostill vor 8 Jahren 0
0
SoapBox

Versuchen Sie so etwas. Die "ipconfig / all> network_info.txt" erstellt lediglich eine TXT-Datei für das Programm

ipconfig /all > network_info.txt type network_info.txt | findstr /v Stuff | findstr /v Etc > whatyouwant.txt set /p Build=<whatyouwant.txt 

Diese Option ist zeitaufwändig, aber unglaublich einfach. Sie müssten weiter machen

| findstr /v something 

und das Wort durch das ersetzen, was Sie wollen. Sie müssen entscheiden, wie Sie bestimmte Wörter aus verschiedenen Zeilen entfernen möchten. Dies funktioniert jedoch, wenn Sie es einfach möchten. Ich benutze dies bei Ausgaben für Befehle, um Müll zu entfernen, den ich nicht will. Im Idealfall würden Sie die Ausgabe in einen Text einfügen, und die erste Zeile würde gelesen, so dass Sie nur eine Zeile des Textes haben würden. Ich hoffe, ich habe allen anderen geholfen, die diese Antwort brauchten. Es ist kompliziert, aber Sie erhalten Ihre Antwort auch in einem Text, wenn dies ein Plus ist