Эхо выключено (пакетный скрипт) - PullRequest
0 голосов
/ 17 сентября 2018

Это мой скрипт (он выдал ip из ipconfig)

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-2 delims=:" %%A in ('ipconfig^|find "IP"^|find ":10."') do set ip==%%B
set "ipaddress=%ip:~1%"
set "ipk=%ipaddress:~1,-2%"
echo %ipk%

Что я получаю: Эхо выключено

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

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

Здесь я просто использую настроенную подсеть, получаю IP-адрес в этом диапазоне и сопоставляю его с вашим IP-адресом, а затем отображаю его. Он не требует жесткого кодирования начального диапазона IP-адреса:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=2,3 delims={,}" %%a in ('"wmic nicconfig where IPEnabled="True" get DefaultIPGateway /value | find "I" "') do set gate_test=%%~a
set gate_test=!gate_test: =!
for /f "tokens=1-2 delims=^." %%i in ("!gate_test!") do set range=%%i.%%j
    for /f "delims=:" %%l in ('ipconfig ^| findstr IPv4') do (
      set ip=%%m
      set ip=!ip: =!
      for /f "tokens=1-2 delims=^." %%n in ("!ip!") do set iprange=%%n.%%o
     if !iprange! == !range! set ipaddress=!ip!
   )
)
echo !ipaddress!
0 голосов
/ 17 сентября 2018

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

К счастью для этого случая, поскольку IP-адреса разделены ., они могут обрабатываться как расширения имени файла модификаторами FOR.

И, используя findstr (с условиями поиска регулярных выражений) вместо find для поиска по ip-адресу, вы можете уменьшить количество каналов с 2 до 1.

@echo off
set "ipk=IP_NOT_FOUND"
for /f "tokens=2 delims=:" %%A in ('ipconfig^|findstr /IRC:"IPv4.*: *10\."') do set "ipk=%%~nA."
set "ipk=%ipk: =%"
echo %ipk%
pause

Однако не ясно, что именно представляет ipk. Если вы намеревались отобразить сетевой адрес, то, скорее всего, это будет неправильный способ сделать это, потому что сетевой адрес зависит от значения маски подсети, которая необходимо получить отдельно и выполнить вычисления с использованием ipaddress и маски подсети, чтобы получить правильный сетевой адрес.

Но это выходит за рамки вашего вопроса, поэтому я оставляю все как есть.

И вы должны знать, что если существует более одного сетевого адаптера с 10. IP-адресом, то он вернет IP-адрес последнего перечисленного адаптера.

Интерпретация findstr регулярного выражения: "IPv4.*: *10\."
IPv4 Строка, содержащая строку «IPv4» (без учета регистра, так как переключатель /I)
.*:, за которым следует ноль или более любого символа, за которым следует двоеточие :
*10\., за которым следует ноль или более пробелов, затем 10. и остальная часть строки, если таковые имеются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...