Как извлечь 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