Назад | Перейти на главную страницу

Как извлечь вывод командной строки в переменную?

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