¿Cómo extraigo la dirección IP IPv4 de la salida de ipconfig?

¿Cómo extraigo la dirección IP IPv4 de la salida de ipconfig?

Estoy intentando que cmd copie solo un conjunto específico de caracteres de la salida de un comando. Pude seleccionar la línea en la que existe la frase pero a partir de ahí estoy perdido. Aquí está mi comando hasta ahora.

ipconfig | findstr /i "ipv4"

Estoy seguro de que está familiarizado con el ipconfigcomando y el findstrcomando. Básicamente, estoy aislando la dirección IPv4 de la computadora específica. Esto es lo que indica el comando anterior.

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

Me gustaría aislar "192.168.1". y guardarlo en una variable para usarlo mucho más tarde en un comando. Digamos que configuré "192.168.1". a variable a.

El siguiente comando que deseo ejecutar escanea todas las direcciones IP desde 192.168.1.1 a 192.168.1.254 y guarda las que se estén utilizando. Como este programa, que pronto será, se ejecutará en diferentes computadoras en varias ubicaciones, el "192.168.1". será diferente y estoy buscando aislar cualquier cosa que cmd coloque en su ubicación. Entonces la variable antes mencionadaapodría ser, entre otros, 192.168.10., 10.10.10. o incluso 1.1.1. dependiendo de la situación. Aquí está el código que usaré.

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

o si ayuda ver cómo se verá la variable.

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

Estoy usando una máquina con Windows 10 Pro de 64 bits.

Respuesta1

Me gustaría aislar "192.168.1". y guardarlo en una variable

Utilice el siguiente archivo por lotes (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:

  • El valor que desea se guarda en_3octet
  • Elimine el echoque está ahí para depurar.
  • Reemplace rem add additional commands herecon su "ping de red"

Ejemplo de uso y salida:

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

F:\test>test
192.168.42.

Otras lecturas

  • Un índice AZ de la línea de comando CMD de Windows- Una excelente referencia para todo lo relacionado con la línea cmd de Windows.
  • expansión retrasada habilitada- La expansión retrasada hará que las variables se expandan en el momento de la ejecución en lugar de en el momento del análisis.
  • para /f- Comando de bucle contra los resultados de otro comando.
  • ipconfig- Configurar IP (configuración del Protocolo de Internet)
  • colocar- Mostrar, configurar o eliminar variables de entorno CMD. Los cambios realizados con SET permanecerán solo durante la sesión CMD actual.
  • establecer local- Establecer opciones para controlar la visibilidad de las variables de entorno en un archivo por lotes.
  • variables- Extraer parte de una variable (subcadena).

Respuesta2

Esto me funciona en varias computadoras:

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

Respuesta3

Prueba algo como esto. "ipconfig /all > network_info.txt" simplemente crea un archivo txt para el programa

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

Esta opción lleva mucho tiempo pero es increíblemente sencilla. Tendrías que seguir haciendo

| findstr /v something

y reemplazando la palabra con lo que quieras. Tendría que decidir cómo le gustaría eliminar ciertas palabras de diferentes líneas, pero esto funcionaría si lo desea de manera simple. Lo uso en salidas de comandos para eliminar basura que no quiero. Lo ideal sería obtener la salida en un texto y leería la primera línea para que solo tuviera una línea del texto. Espero haber ayudado o ayudado a cualquiera que necesitara esta respuesta. Es complicado, pero también obtienes tu respuesta en un texto si eso es una ventaja.

Respuesta4

Asignar direcciones IP a variables de entorno numeradas sucesivamente (IP1, IP2). Para sistemas que tienen múltiples adaptadores de red.

@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
()

información relacionada