
Ich versuche, cmd dazu zu bringen, nur einen bestimmten Zeichensatz aus einer Befehlsausgabe zu kopieren. Ich konnte die Zeile auswählen, in der die Phrase vorkommt, aber von da an bin ich verloren. Hier ist mein bisheriger Befehl.
ipconfig | findstr /i "ipv4"
Ich bin sicher, Sie kennen den ipconfig
Befehl und den findstr
Befehl. Im Grunde isoliere ich die IPv4-Adresse des jeweiligen Computers. Dies ist der obige Befehl.
IPv4 Address. . . . . . . . . . . : 192.168.1.75
Ich möchte "192.168.1." isolieren und in einer Variable speichern, um sie später in einem Befehl verwenden zu können. Nehmen wir an, ich lege "192.168.1." auf die Variable fest 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. Da dieses baldige Programm auf verschiedenen Computern an verschiedenen Standorten ausgeführt wird, ist „192.168.1.“ unterschiedlich und ich möchte alles isolieren, was cmd an diesem Standort eingibt. Die oben genannte VariableAkönnte, ist aber nicht beschränkt auf, 192.168.10., 10.10.10. oder sogar 1.1.1. sein, je nach Situation. 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 ob es hilfreich ist, zu sehen, wie die Variable aussehen wird.
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-Maschine mit Windows 10 Pro.
Antwort1
Ich möchte "192.168.1." isolieren und in einer Variable speichern
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 in
_3octet
- Entfernen Sie das
echo
, das zum Debuggen da ist - Ersetzen Sie
rem add additional commands here
durch Ihren „Netzwerk-Ping“
Beispielverwendung und -ausgabe:
F:\test>ipconfig | findstr /i "ipv4"
IPv4 Address. . . . . . . . . . . : 192.168.42.78
F:\test>test
192.168.42.
Weitere Informationen
- Ein AZ-Index der Windows CMD-Befehlszeile- Ein hervorragendes Nachschlagewerk zu allem, was mit der Windows-Eingabeaufforderung zu tun hat.
- aktivierte verzögerte Erweiterung- Die verzögerte Erweiterung führt dazu, dass Variablen zur Ausführungszeit und nicht zur Analysezeit erweitert werden.
- für /f- Befehl mit den Ergebnissen eines anderen Befehls wiederholen.
- ipconfig- IP konfigurieren (Internet Protocol-Konfiguration)
- Satz- CMD-Umgebungsvariablen anzeigen, festlegen oder entfernen. Mit SET vorgenommene Änderungen bleiben nur für die Dauer der aktuellen CMD-Sitzung bestehen.
- lokal festlegen- Legen Sie Optionen fest, um die Sichtbarkeit von Umgebungsvariablen in einer Batchdatei zu steuern.
- Variablen- Extrahieren Sie einen Teil einer Variablen (Teilzeichenfolge).
Antwort2
Das funktioniert bei mir auf mehreren Computern:
for /F "tokens=14" %A in ('"ipconfig | findstr IPv4"') do echo %A
Antwort3
Versuchen Sie so etwas. "ipconfig /all > network_info.txt" erstellt einfach 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 zeitaufwendig, aber unglaublich einfach. Sie müssten immer wieder
| findstr /v something
und ersetzen Sie das Wort durch das gewünschte. Sie müssen entscheiden, wie Sie bestimmte Wörter aus verschiedenen Zeilen entfernen möchten, aber dies würde funktionieren, wenn Sie es einfach haben möchten. Ich verwende dies bei Ausgaben für Befehle, um Müll zu entfernen, den ich nicht haben möchte. Sie würden die Ausgabe idealerweise in einem Text erhalten und die erste Zeile würde gelesen, sodass Sie nur eine Zeile des Textes hätten. Ich hoffe, ich habe geholfen oder jemandem geholfen, der diese Antwort brauchte. Es ist verworren, aber Sie erhalten Ihre Antwort auch in einem Text, wenn das ein Plus ist
Antwort4
Zur Zuweisung von IP-Adressen an fortlaufend nummerierte Umgebungsvariablen (IP1, IP2). Für Systeme mit mehreren Netzwerkadaptern.
@echo off
setlocal enabledelayedexpansion
set _count=1
for /f "usebackq tokens=*" %%a in (`ipconfig ^| findstr /i "ipv4"`) do (
for /f delims^=^:^ tokens^=2 %%b in ('echo %%a') do (
for /f "tokens=*" %%c IN ('echo %%b') do (set IP!_count!=%%c & echo IP!_count!=%%c & set /a _count+= 1)
)
)
set _count=
call :haltAndStore 2> nul
REM kludge: Forces batch processor to abort causing side-effect of persisting env vars.
:haltAndStore
()