Как извлечь IP-адрес IPv4 из выходных данных 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 Machine.

5 ответов

Решение

Я хотел бы выделить "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.
  • enabledelayedexpansion - отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время разбора.
  • for / f - Циклическая команда против результатов другой команды.
  • ipconfig - настройка IP (настройка интернет-протокола)
  • set - отображать, устанавливать или удалять переменные окружения CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.
  • setlocal - устанавливает параметры для контроля видимости переменных среды в командном файле.
  • переменные - извлекать часть переменной (подстроку).

Попробуйте что-то вроде этого. "ipconfig /all > network_info.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

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

Чтобы получить IPv4-адрес отipconfig& присвоить значение переменнойa:

      for /f "delims=" %i in ('ipconfig ^| find "IPv4"') do set a=%i& echo !a:*: =!

Чтобы сохранить только первые 3 октета:

      for /f "delims=" %i in ('ipconfig ^| find "IPv4"') do set a=%i& set a=!a:*: =!
for %i in (%a%) do set a=%~ni

Чтобы назначить 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
()

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

      for /F "tokens=14" %A in ('"ipconfig | findstr IPv4"') do echo %A
Другие вопросы по тегам