Как извлечь IP-адреса IPv4 из выходных данных ipconfig, а затем отфильтровать их, чтобы мои выходные содержали только список IP-адресов?

1601
Hassan Daudzai

Как извлечь IP-адрес IPv4 из выходных данных ipconfig

Я прочитал этот пост, и это было очень полезно. Мне просто интересно, если это способ, которым я могу извлечь только IP-адреса (xxx.xxx.xxx.xxx). Лучший способ использовать блокнот, чтобы найти все / заменить все.

Есть ли метод, который я могу использовать через командную строку?

1
Каким образом связанный с вами вопрос не предоставляет вам всю необходимую информацию? Пожалуйста, не отвечайте в комментариях; [править] Ваш вопрос будет понятнее и полнее. G-Man 6 лет назад 0
@ G-Man Ясно, что мой ответ на другой вопрос дает некоторые подсказки относительно того, как он может быть решен, но нуждается в настройке, чтобы обеспечить результат, который хочет ОП. Большинство пользователей недостаточно осведомлены о пакетном программировании, чтобы внести эти изменения. Я предоставил ответ для ФП, который, я полагаю, отвечает на его вопрос. DavidPostill 6 лет назад 0
@ G-Man Я достаточно опытен в работе с пакетными файлами, но мне все еще нужно было подумать о том, как добавить регулярное выражение в findstr для сопоставления с точечными четырехъядерными IP-адресами. DavidPostill 6 лет назад 0
@DavidPostill: Но моя точка зрения, вам не нужно. Работает подход «поиск` IPv4` / split on ``: `` / strip лидирование ”. И не всегда ли модераторы ругают пользователей тем, что «если вы обнаружите, что отправляете по существу один и тот же ответ на два отдельных вопроса (в одном сообществе), вам следует остановиться и пометить один из них как дубликат»? G-Man 6 лет назад 0
@ G-Man Нет, это не так. Этот подход находит только ** первый ** пунктирный четырехугольный адрес (который является строкой, содержащей строку IP4). Если вы действительно потрудились прочитать мой ответ, вы увидите, что он извлекает список из 3 IP-адресов. Что касается вашего второго пункта, мой ответ здесь существенно ** отличается от моего другого ответа. DavidPostill 6 лет назад 0
@ G-Man Обратите внимание, что заголовок вопроса запрашивает ** список ** IP-адресов, а не только один адрес, помеченный как IP4. DavidPostill 6 лет назад 0
И вам действительно стоит заглянуть в PowerShell. eckes 6 лет назад 0

2 ответа на вопрос

1
DavidPostill

Как я могу извлечь только список 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 - устанавливает параметры для контроля видимости переменных среды в командном файле.
  • переменные - извлечение части переменной (подстроки).
0
G-Man

Основываясь на ответе Дэвида Постилл на вопрос, который вы связали ,

@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.