В рамках задачи, над которой я работаю для клиента, мне нужно внести некоторые изменения в корпоративный сценарий входа в систему. Командная строка Windows определенно не является моей областью знаний, но с большинством из них я справляюсь. Однако у меня есть одна проблема, и я не могу понять, как ее решить.
По сути, мне нужно получить IP-адрес шлюза по умолчанию для компьютеров в переменной среды (для последующего использования в сценарии). Я знаю, что он присутствует на выходе обоих ipconfig
и из tracert
, и я знаю, как найти в их выводе точную строку, которая мне нужна, но я не могу понять, как выйти за рамки этого.
Например, следующая команда производит следующий вывод:
>ipconfig|Find "Default Gateway"|Findstr/N "."|Findstr/B "1:"
1: Default Gateway . . . . . . . . . : 199.99.9.1
Но теперь мне нужно как-то извлечь из этой текстовой строки только IP-адрес, а затем назначить его переменной окружения. Итак, как я могу сделать это из командной строки Windows? (Windows XP и выше).
for /f
твой друг.
for /f "usebackq tokens=1,2,3 delims=:" %A in (`ipconfig ^| Find "Default Gateway" ^| Findstr/N "." ^| Findstr/B "1:"`) do @if not defined MYVAR set MYVAR=%~C
... может помочь.
Редактировать: изменил блок кода, чтобы прочитать третий значение не второе, а нужно для выхода из труб.
Вы мог также сократите до:
for /f "usebackq tokens=1,2,3 delims=:" %A in (`ipconfig ^| Find "Default Gateway" ^| Findstr/N "."`) do @if not defined MYVAR set MYVAR=%~C
...так как, технически, второй findstr
(где вы ограничиваетесь первым результатом) фактически обрабатывается if not defined