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

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

Я пытаюсь заставить cmd копировать только определенный набор символов из вывода команды. Мне удалось выбрать строку, в которой находится фраза, но дальше я теряюсь. Вот моя команда на данный момент.

ipconfig | findstr /i "ipv4"

Я уверен, что вы знакомы с ipconfigкомандой и findstrкомандой. По сути, я изолирую IPv4-адрес конкретного компьютера. Вот что такое команда выше.

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

Я хотел бы изолировать "192.168.1." и сохранить его в переменной, чтобы использовать его гораздо позже в команде. Допустим, я установил "192.168.1." в переменную a.

Следующая команда, которую я хочу запустить, сканирует все IP-адреса от 192.168.1.1 до 192.168.1.254 и сохраняет те, которые используются. Поскольку эта, которая скоро станет программой, будет запущена на разных компьютерах в разных местах, "192.168.1." будет отличаться, и я хочу изолировать все, что cmd помещает в его местоположение. Поэтому вышеупомянутая переменнаяаможет быть, но не ограничивается, 192.168.10., 10.10.10., или даже 1.1.1. в зависимости от ситуации. Вот код, который я буду использовать.

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

или если поможет то, как будет выглядеть переменная.

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

Я использую 64-битную версию Windows 10 Pro.

решение1

Я хотел бы изолировать «192.168.1.» и сохранить его в переменной.

Используйте следующий пакетный файл (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

Примечания:

  • Необходимое вам значение сохраняется в_3octet
  • Удалите то echo, что там для отладки
  • Замените rem add additional commands hereна ваш "сетевой пинг"

Пример использования и вывода:

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

F:\test>test
192.168.42.

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • включеноотложенное расширение- Отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время анализа.
  • для /ф- Циклическая команда по результатам другой команды.
  • ipconfig- Настройка IP (конфигурация интернет-протокола)
  • набор- Отображение, установка или удаление переменных среды CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.
  • установитьлокальный- Установите параметры для управления видимостью переменных среды в пакетном файле.
  • переменные- Извлечь часть переменной (подстроку).

решение2

У меня это работает на нескольких компьютерах:

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

решение3

Попробуйте что-то вроде этого. "ipconfig /all > network_info.txt" просто создает txt-файл для программы.

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

Этот вариант требует много времени, но невероятно прост. Вам придется продолжать делать

| findstr /v something

и замена слова на то, что вам нужно. Вам придется решить, как вы хотите удалить определенные слова из разных строк, но это сработает, если вам нужно просто. Я использую это на выходах для команд, чтобы удалить мусор, который мне не нужен. В идеале вы должны получить выход в txt, и он будет читать первую строку, так что у вас будет только одна строка txt. Надеюсь, я помог или помог кому-то еще, кому нужен этот ответ. Он запутанный, но вы также получите свой ответ в txt, если это плюс

решение4

Для назначения IP-адресов последовательно пронумерованным переменным среды (IP1, IP2). Для систем с несколькими сетевыми адаптерами.

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

Связанный контент