Como faço para extrair o endereço IP IPv4 da saída do ipconfig

2

Estou tentando copiar cmd apenas um conjunto específico de caractere de uma saída de comando. Eu fui capaz de selecionar a linha em que a frase existe, mas a partir daí estou perdida. Aqui está o meu comando até agora.

ipconfig | findstr /i "ipv4"

Tenho certeza de que você está familiarizado com o comando ipconfig e o comando findstr . Basicamente estou isolando o endereço IPv4 do computador específico. Isto é o que o comando acima.

IPv4 Address. . . . . . . . . . . : 192.168.1.75

Gostaria de isolar "192.168.1". e ter isso salvo em uma variável para ser usado muito mais tarde em um comando. Digamos que eu defina "192.168.1". para variável a .

O próximo comando que desejo executar verifica todos os endereços IP de 192.168.1.1 a 192.168.1.254 e salva o que estiver sendo usado. Como isso, em breve para ser programa, será executado em computadores diferentes em vários locais, o "192.168.1." será diferente e eu estou olhando para isolar o que o cmd coloca em sua localização. Assim, a variável acima mencionada a pode ser, mas não está limitada a, 192.168.10., 10.10.10., Ou mesmo 1.1.1. dependendo da situação. Aqui está o código que vou usar.

FOR /L %i IN (1,1,254) DO ping -n 1 (the 'a' variable)%i | FIND /i "bytes=">>c:\ipaddresses.txt

ou se ver como a variável se parece ajuda.

FOR /L %i IN (1,1,254) DO ping -n 1 192.168.1.%i | FIND /i "bytes=">>c:\ipaddresses.txt

Estou usando uma máquina de 64 bits do windows 10 pro.

    
por Samuel Pauk 02.02.2016 / 06:17

2 respostas

3

Eu gostaria de isolar "192.168.1." e ter isso salvo em uma variável

Use o seguinte arquivo de lote (test.cmd):

@echo off
setlocal
setlocal enabledelayedexpansion
rem throw away everything except the IPv4 address line 
for /f "usebackq tokens=*" %%a in ('ipconfig ^| findstr /i "ipv4"') do (
  rem we have for example "IPv4 Address. . . . . . . . . . . : 192.168.42.78"
  rem split on : and get 2nd token
  for /f delims^=^:^ tokens^=2 %%b in ('echo %%a') do (
    rem we have " 192.168.42.78"
    rem split on . and get 4 tokens (octets)
    for /f "tokens=1-4 delims=." %%c in ("%%b") do (
      set _o1=%%c
      set _o2=%%d
      set _o3=%%e
      set _o4=%%f
      rem strip leading space from first octet
      set _3octet=!_o1:~1!.!_o2!.!_o3!.
      echo !_3octet!
      )
    )
  )
rem add additional commands here
endlocal

Notas:

  • O valor que você deseja é salvo em _3octet
  • Remova o echo que está lá para depuração
  • Substitua rem add additional commands here pelo seu "ping de rede"

Exemplo de uso e saída:

F:\test>ipconfig | findstr /i "ipv4"
   IPv4 Address. . . . . . . . . . . : 192.168.42.78

F:\test>test
192.168.42.

Leitura Adicional

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
  • enabledelayedexpansion - Expansão com atraso fará com que as variáveis sejam expandidas em tempo de execução e não no tempo de análise.
  • para / f - Comando Loop contra os resultados de outro comando.
  • ipconfig - Configurar IP (configuração do protocolo da Internet)
  • definir - Exibir, definir ou remover variáveis de ambiente do CMD. As alterações feitas com o SET permanecerão apenas pela duração da sessão atual do CMD.
  • setlocal - Defina opções para controlar a visibilidade de variáveis de ambiente em um arquivo em lotes.
  • variáveis - Extrai parte de uma variável (substring).
por 02.02.2016 / 13:01
0

Tente algo assim. o "ipconfig / all > network_info.txt" apenas cria um arquivo txt para o programa

ipconfig /all > network_info.txt
type network_info.txt | findstr /v Stuff | findstr /v Etc > whatyouwant.txt
set /p Build=<whatyouwant.txt

Esta opção é demorada, mas incrivelmente simples. Você teria que continuar fazendo

| findstr /v something

e substituindo a palavra pelo que você deseja. Você teria que decidir como você gostaria de remover certas palavras de linhas diferentes, mas isso funcionaria se você quiser simples. Eu uso isso em saídas de comandos para remover o lixo que eu não quero. Você teria o ideal de colocar o texto em um texto, e ele iria ler a primeira linha para que você tivesse apenas uma linha do texto. Espero ter ajudado ou ajudado quem mais precisava dessa resposta. É complicado, mas você recebe sua resposta em um texto também, se isso é um plus

    
por 02.07.2017 / 15:49