Смотря на документацию 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. У меня все равно работает.