Olhando para a documentação for
(corra for /?
para vê-la), acho que não for /f
será lido em um pipe. As únicas fontes válidas são o conjunto de arquivos, "string" e 'command'.
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]
Você pode colocar o comando dentro for
desta maneira:
for /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f
192.168.x.x
192.168.y.y
(graças à neurólise por apontar que tem que ser ^|
e não apenas |
)
Ou você pode tentar inserir ipconfig | findstr "Address"
um script em lote separado e chamar:
for /f "tokens=14" %f in ('ipaddresses') do @echo %f
(supondo que você tenha chamado o script ipaddresses
).
Ou você pode usar for
o trabalho findstr
também, assim:
for /f "tokens=2,14" %i in ('ipconfig') do @if %i==Address. @echo %j
192.168.x.x
192.168.y.y
não é exatamente o mesmo porque não corresponde aos endereços IPv6, mas algo nesse sentido pode funcionar.
Observe também que mudei tokens=15
para tokens=14
. Acho que o último campo da linha é o token 14. Funciona para mim de qualquer maneira.
for
vez deipconfig
. Apenas façafor /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f
, quando^
é o caractere de escape.