Como extrair a saída da linha de comandos para uma variável?

2

Como parte de uma tarefa em que estou trabalhando para um cliente, preciso fazer algumas modificações no script de logon corporativo. A linha de comando do Windows definitivamente não é minha área de especialização, mas estou indo bem com a maioria dela. No entanto, tenho um problema que não consigo descobrir como fazer.

Basicamente, eu preciso obter o endereço IP do gateway padrão da máquina em uma variável de ambiente (para uso posterior no script). Eu sei que existe na saída de ipconfig e tracert , e sei como encontrar a linha exata em sua saída que eu preciso, mas não consigo descobrir como ir além disso.

Por exemplo, o comando a seguir produz uma saída assim:

>ipconfig|Find "Default Gateway"|Findstr/N "."|Findstr/B "1:"

 1:   Default Gateway . . . . . . . . . : 199.99.9.1

Mas, agora, preciso extrair apenas o endereço IP dessa linha de texto e, em seguida, atribuí-lo a uma variável de ambiente. Então, como posso fazer isso a partir de uma linha de comando do Windows? (Windows XP e superior).

    
por RBarryYoung 14.01.2013 / 23:30

1 resposta

5

for /f é seu amigo.

for /f "usebackq tokens=1,2,3 delims=:" %A in ('ipconfig ^| Find "Default Gateway" ^| Findstr/N "." ^| Findstr/B "1:"') do @if not defined MYVAR set MYVAR=%~C

... pode fazer o truque.

Editar: alterou o bloco de código para ler o valor terceiro e não o segundo, e precisou escapar dos canais.

Você poderia também diminuir para:

for /f "usebackq tokens=1,2,3 delims=:" %A in ('ipconfig ^| Find "Default Gateway" ^| Findstr/N "."') do @if not defined MYVAR set MYVAR=%~C

... como, tecnicamente , o segundo findstr (onde você limita ao primeiro resultado) é realmente tratado pelo if not defined

    
por 14.01.2013 / 23:34