Вы не можете быть уверены, что последняя часть 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.
и остальная часть строки, если таковые имеются.