Глядя на документацию for
(беги, for /?
чтобы увидеть ее), я не думаю, что for /f
будет читать из трубы. Единственными допустимыми источниками являются набор файлов, «строка» и «команда».
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]
Вы можете поместить команду внутри for
так:
for /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f
192.168.x.x
192.168.y.y
(спасибо невролизу за то, что указал на это должно быть, ^|
а не только |
)
Или вы можете попробовать вставить ipconfig | findstr "Address"
отдельный пакетный скрипт и вызвать:
for /f "tokens=14" %f in ('ipaddresses') do @echo %f
(при условии, что вы назвали сценарий ipaddresses
).
Или вы можете использовать, for
чтобы сделать работу findstr
тоже, как это:
for /f "tokens=2,14" %i in ('ipconfig') do @if %i==Address. @echo %j
192.168.x.x
192.168.y.y
это не совсем то же самое, потому что он не будет соответствовать адресам IPv6, но что-то в этом роде может работать.
Также обратите внимание, что я изменился tokens=15
на tokens=14
. Я думаю, что последнее поле в строке - это токен 14. У меня все равно работает.
for
вместо того, чтобы использовать егоipconfig
. Просто сделайтеfor /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f
, когда^
это побег персонаж.