Como extraio o endereço IP IPv4 da saída do ipconfig

Como extraio o endereço IP IPv4 da saída do ipconfig

Estou tentando fazer com que o cmd copie apenas um conjunto específico de caracteres de uma saída de comando. Consegui selecionar a linha em que a frase existe, mas a partir daí estou perdido. Aqui está meu comando até agora.

ipconfig | findstr /i "ipv4"

Tenho certeza que você está familiarizado com o ipconfigcomando e o findstrcomando. 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 salve-o em uma variável para ser usada muito mais tarde em um comando. Digamos que eu configurei “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 este programa, que será lançado em breve, será executado em diferentes computadores em vários locais, o "192.168.1." será diferente e estou tentando isolar tudo o que o cmd colocar em seu local. Então a variável mencionadaapoderia ser, mas não está limitado a, 192.168.10., 10.10.10. ou mesmo 1.1.1. dependendo da situação. Aqui está o código que irei 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 será a aparência da variável 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 Windows 10 Pro de 64 bits.

Responder1

Gostaria de isolar "192.168.1." e salve isso em uma variável

Use o seguinte arquivo em 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 echoque está lá para depuração
  • Substitua rem add additional commands herepelo 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 AZ da linha de comando do Windows CMD- Uma excelente referência para todas as coisas relacionadas à linha cmd do Windows.
  • habilitadodelayedexpansion- A expansão atrasada fará com que as variáveis ​​sejam expandidas no tempo de execução, e não no tempo de análise.
  • para /f- Comando de loop em relação aos resultados de outro comando.
  • ipconfig- Configurar IP (configuração do protocolo de Internet)
  • definir- Exibir, definir ou remover variáveis ​​de ambiente CMD. As alterações feitas com SET permanecerão apenas durante a sessão CMD atual.
  • definirlocal- Defina opções para controlar a visibilidade das variáveis ​​de ambiente em um arquivo em lote.
  • variáveis- Extraia parte de uma variável (substring).

Responder2

Isso funciona para mim em vários computadores:

for /F "tokens=14" %A in ('"ipconfig | findstr IPv4"') do echo %A

Responder3

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 gostaria de remover certas palavras de linhas diferentes, mas isso funcionaria se você quiser algo simples. Eu uso isso nas saídas de comandos para remover o lixo que não quero. O ideal é que você coloque a saída em um txt, e ele leia a primeira linha, então você terá apenas uma linha do txt. Espero ter ajudado ou ajudado alguém que precisava desta resposta. É complicado, mas você também recebe sua resposta em um txt, se isso for uma vantagem

Responder4

Para atribuir endereços IP a variáveis ​​de ambiente numeradas sucessivamente (IP1, IP2). Para sistemas com vários adaptadores de rede.

@echo off
setlocal enabledelayedexpansion
set _count=1
for /f "usebackq tokens=*" %%a in (`ipconfig ^| findstr /i "ipv4"`) do (
    for /f delims^=^:^ tokens^=2 %%b in ('echo %%a') do (
        for /f "tokens=*" %%c IN ('echo %%b') do (set IP!_count!=%%c & echo IP!_count!=%%c & set /a _count+= 1)
  )
)
set _count=
call :haltAndStore 2> nul

REM kludge: Forces batch processor to abort causing side-effect of persisting env vars.
:haltAndStore
()

informação relacionada