Wenn ich mir die Dokumentation für for
(Ausführen for /?
, um sie zu sehen) ansehe, denke ich nicht, dass for /f
sie aus einer Pipe gelesen wird. Die einzigen gültigen Quellen sind Dateisatz, "Zeichenfolge" und "Befehl".
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
Sie können den Befehl for
wie folgt eingeben :
for /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f
192.168.x.x
192.168.y.y
(Dank der Neurolyse für den Hinweis, dass es sein muss ^|
und nicht nur |
)
Oder Sie können versuchen, ipconfig | findstr "Address"
ein separates Batch-Skript einzufügen und Folgendes aufzurufen:
for /f "tokens=14" %f in ('ipaddresses') do @echo %f
(vorausgesetzt, Sie haben das Skript aufgerufen ipaddresses
).
Oder Sie könnten for
auch die Arbeit von findstr
so machen:
for /f "tokens=2,14" %i in ('ipconfig') do @if %i==Address. @echo %j
192.168.x.x
192.168.y.y
Es ist nicht ganz dasselbe, da es nicht mit IPv6-Adressen übereinstimmt, aber etwas in dieser Richtung könnte funktionieren.
Beachten Sie auch, dass ich zu geändert tokens=15
habe tokens=14
. Ich denke, das letzte Feld in der Zeile ist Token 14. Funktioniert sowieso für mich.
for
stattipconfig
. Tun Sie einfachfor /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f
, wann^
der Fluchtcharakter ist.