Возник вопрос, как написать сценарий , используя только командную строку Windows (паетный файл cmd), проанализировав вывод команд:
или
ПК каждый день получает новый адрес от DHCP.
Стоит задача отфильтровать только адрес определенного адаптера и из него вытянуть IP, данный IP вставить в команду по добавлению статического маршрута.
При этом нужно из команды
отфильтровать постоянные маршруты и запустить проверку, и если маршрут существует, то маршрут будет удален и создается новый, если маршрут - не существует, то просто создается новый маршрут.
Создал сценарий, но он слишком громоздкий и не выполняет в полностью автоматичексом режиме поставленных задач.
В Linux , например, есть утилиты - sed, grep, есть регулярные выражения.
В данном случае я затрудняюсь как в Windows - может подскажите (с пояснениями).
Нет гибкости в фильтровке вывода, а для того чтобы написать управляющую конструкцию для проверки условий, много подводных камней при использовании переменных....
Вот пробный сценарий
Код:
ipconfig
или
Код:
netsh interface ip show address
ПК каждый день получает новый адрес от DHCP.
Стоит задача отфильтровать только адрес определенного адаптера и из него вытянуть IP, данный IP вставить в команду по добавлению статического маршрута.
При этом нужно из команды
Код:
route print -4
отфильтровать постоянные маршруты и запустить проверку, и если маршрут существует, то маршрут будет удален и создается новый, если маршрут - не существует, то просто создается новый маршрут.
Создал сценарий, но он слишком громоздкий и не выполняет в полностью автоматичексом режиме поставленных задач.
В Linux , например, есть утилиты - sed, grep, есть регулярные выражения.
В данном случае я затрудняюсь как в Windows - может подскажите (с пояснениями).
Нет гибкости в фильтровке вывода, а для того чтобы написать управляющую конструкцию для проверки условий, много подводных камней при использовании переменных....
Вот пробный сценарий
Код:
@echo off
setlocal enabledelayedexpansion
echo.
echo -----------------1-----------------
echo.
ipconfig
TIMEOUT /T 5
echo.
for /f "tokens=*" %%i in ('netsh interface ip show address ^| findstr "172." ^| findstr "IP-адрес"') do set a1=%%i
echo %a1%
TIMEOUT /T 5
:: echo. - символ "точка", после команды echo , позволет убрать лишние сообщения с экрана
echo.
set result2=%a1:~15%
:: выделяем фрагмент текста в строке, с конца строки, на 15 символов
:: как раз такой размер занимает написание IP-адреса
echo %result2%
echo.
TIMEOUT /T 3
echo.
:: удалим пробелы, начиная от начала строки
set gateway=%result2: =%
echo.
echo.
echo -----------------2-----------------
echo.
echo %gateway%
echo.
TIMEOUT /T 2
echo.
route delete 192.168.10.0
echo.
route print -4
TIMEOUT /T 5
echo.
echo -----------------3-----------------
echo.
route add -p 192.168.10.0 MASK 255.255.255.0 %gateway% METRIC 1
echo.
route print -4
echo.
:: символ экранирования '^'
:: tokens=* приводит к тому же результату, что и delims=. Означает прекратить разбивку по
:: разделителю после "0-го" токена, т.е. сразу же.
:: * Этот вариант необходим для работы с файлом, путь или имя которого содержит пробелы.
:: %%i - переменная цикла
:: * маска файлов - это набор файлов, заданный с помощью подстановочных знаков * и/или ?
:: где * - обозначает 0 или больше любых символов в имени файла.
:: а ? - означает 0 или 1 любой символ в имени файла.
:: delims= означает, что в переменную %%i будет записана вся строка (без разделения по пробелу :: или знаку табуляции, т.к. стандартный разделитель заменен на NULL (пустой символ).
:: tokens - количество получаемых токенов (подстрок) в теле цикла и пределы разбивки по
:: разделителю.
:: Также можно задать конкретный № токена, который попадет в первую переменную цикла.
:: * Токены - это подстроки, которые попадают в переменные цикла %% в каждой из итераций.
:: Они получаются в результате разбивки строки, заданной в IN (...), по разделителю, заданному :: в Delims= (по умолчанию, пробел и знак табуляции).
:: В отличие, от FOR без ключа, в FOR /F все токены (все подстроки одной строки) попадают сразу :: В ПЕРВУЮ ИТЕРАЦИЮ цикла.
:: Они будут распределены по РАЗНЫМ переменным цикла, идущим в алфавитном порядке*, начиная с
:: буквы, заданной после FOR /F %%
Последнее редактирование: