Как извлечь IP-адреса IPv4 из выходных данных ipconfig, а затем отфильтровать их, чтобы мои выходные содержали только список IP-адресов?
Как извлечь IP-адрес IPv4 из выходных данных ipconfig
Я прочитал этот пост, и это было очень полезно. Мне просто интересно, если это способ, которым я могу извлечь только IP-адреса (xxx.xxx.xxx.xxx). Лучший способ использовать блокнот, чтобы найти все / заменить все.
Есть ли метод, который я могу использовать через командную строку?
2 ответа
Как я могу извлечь только список IP4-адресов из вывода ipconfig?
Используйте следующий пакетный файл (test.cmd):
@echo off
setlocal
setlocal enabledelayedexpansion
for /f "usebackq tokens=2 delims=:" %%a in (`ipconfig ^| findstr /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"`) do (
set _temp=%%a
rem remove leading space
set _ipaddress=!_temp:~1!
echo !_ipaddress!
)
endlocal
Пример использования и вывод:
> ipconfig | findstr /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"
IPv4 Address. . . . . . . . . . . : 192.168.42.78
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.42.129
> test
192.168.42.78
255.255.255.0
192.168.42.129
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- enabledelayedexpansion - отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время разбора.
- for / f - Циклическая команда против результатов другой команды.
- ipconfig - настройка IP (настройка интернет-протокола)
- set - отображать, устанавливать или удалять переменные окружения CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.
- setlocal - устанавливает параметры для контроля видимости переменных среды в командном файле.
- переменные - извлекать часть переменной (подстроку).
Основываясь на ответе Дэвида Постилл на вопрос, который вы связали,
@echo off
setlocal
setlocal enabledelayedexpansion
rem throw away everything except the IPv4 address line
for /f "usebackq tokens=*" %%a in (`ipconfig ^| findstr 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 _4octet=!_o1:~1!.!_o2!.!_o3!.!_o4!
echo !_4octet!
)
)
)
endlocal
перечислит адреса IPv4 для всех интерфейсов, о которых сообщает ipconfig
,