Я хочу определить, какой IP-адрес основного источника на рабочей станции (используется, когда соединение идет через шлюз по умолчанию)

На рабочей станции много IP-адресов / интерфейсов (много частных подсетей, виртуальный ящик, который скрипт должен игнорировать).

Я нашел% computername%, но он ненадежен, потому что он очень часто возвращает частный IP-адрес сети virtualbox.

Я думал найти его на "маршруте ПРИНТ"

for /f "tokens=4" %%a in ('route PRINT -4 ^| findstr 0.0.0.0') do set _IPaddr=%%a
echo IP is: %_IPaddr%

но "findstr 0.0.0.0" возвращает также другие маршруты:

>route PRINT -4 | findstr /s /i /m 0.0.0.0
          0.0.0.0          0.0.0.0      10.170.44.1    10.170.44.150      2
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link     192.168.177.1    281
        224.0.0.0        240.0.0.0         On-link     192.168.137.1    311
        224.0.0.0        240.0.0.0         On-link     10.170.44.150    257

как сказать findstr возвращать только первую строку, начинающуюся с пробелов, а затем 0.0.0.0? (линия маршрута по умолчанию)?

1 ответ1

2

Во-первых, у вас есть несколько лишних аргументов:

  • /s для поиска директорий и субдиректорий
  • /i - без учета регистра, что не имеет смысла при поиске чисел

Это должно делать то, что вы хотите:

route PRINT -4 | findstr /c:" 0.0.0.0"

/c сообщает findstr буквально искать следующую строку, то есть не допускать ее удаления лидирующего пробела.

В качестве альтернативы вы могли бы просто найти route чтобы выполнить немного больше работы за вас:

route PRINT 0.0.0.0 | findstr "0.0.0.0"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .