
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 ipconfig
comando y el findstr
comando. 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
echo
que está ahí para depurar. - Reemplace
rem add additional commands here
con 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
()