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