Использовать извлеченный параметр как переменную в командном файле - PullRequest
0 голосов
/ 08 марта 2019

Я полный новичок в пакетных файлах, я просто хочу сделать одну вещь получить интерфейс ip для определенного маршрутизируемого ip и использовать этот же интерфейс для получения списка ip.

оглядываясь по сторонам Мне удалось извлечь интерфейс ip, но я не могу обойтись, чтобы впоследствии использовать его в коде для части маршрутизации.

со следующим кодом вы получите идею

set _netstat_cmd=netstat -nr
FOR /F "tokens=5" %G IN ('%_netstat_cmd% ^|find "10.11.3.31"') Do echo Result is %G
set rslt=%G

route delete 10.11.30.188 
route delete 10.11.30.103
route delete 10.11.30.68
route delete 10.11.0.140
route delete 10.11.30.63

route add 10.11.30.188 mask 255.255.255.255 %rslt% METRIC 1
route add 10.11.30.103 mask 255.255.255.255 %rslt% METRIC 1
route add 10.11.30.68 mask 255.255.255.255 %rslt% METRIC 1
route add 10.11.0.140 mask 255.255.255.255 %rslt% METRIC 1
route add 10.11.30.63 mask 255.255.255.255 %rslt% METRIC 1

что мне не хватает? Я сделал несколько проб и ошибок, но трудно понять основные правила ...

1 Ответ

0 голосов
/ 08 марта 2019

При работе с cmdline мы используем один %, однако внутри пакетного файла вам необходимо удвоить % для таких переменных токена, как: %%G

Также для запуска каждого результата вам нужен блок кода, поэтому мы можем сделать это без необходимости delayedexpansion, если мы не установим переменную.

@echo off
set "_netstat_cmd=netstat -nr"
FOR /F "tokens=5" %%G IN ('%_netstat_cmd% ^|find "10.11.3.31"') Do (
    echo Result is %%G
    route delete 10.11.30.188 
    route delete 10.11.30.103
    route delete 10.11.30.68
    route delete 10.11.0.140
    route delete 10.11.30.63

    route add 10.11.30.188 mask 255.255.255.255 %%G METRIC 1
    route add 10.11.30.103 mask 255.255.255.255 %%G METRIC 1
    route add 10.11.30.68 mask 255.255.255.255 %%G METRIC 1
    route add 10.11.0.140 mask 255.255.255.255 %%G METRIC 1
    route add 10.11.30.63 mask 255.255.255.255 %%G METRIC 1
)

Если вы действительно хотите установить переменную, вам нужно delayedexpansion, чтобы развернуть переменные внутри блока кода.

@echo off
setlocal enabledelayedexpansion
set "_netstat_cmd=netstat -nr"
FOR /F "tokens=5" %%G IN ('%_netstat_cmd% ^|find "10.11.3.31"') Do (
    echo Result is %%G
    set "rslt=%%G"
    route delete 10.11.30.188 
    route delete 10.11.30.103
    route delete 10.11.30.68
    route delete 10.11.0.140
    route delete 10.11.30.63

    route add 10.11.30.188 mask 255.255.255.255 !rslt! METRIC 1
    route add 10.11.30.103 mask 255.255.255.255 !rslt! METRIC 1
    route add 10.11.30.68 mask 255.255.255.255 !rslt! METRIC 1
    route add 10.11.0.140 mask 255.255.255.255 !rslt! METRIC 1
    route add 10.11.30.63 mask 255.255.255.255 !rslt! METRIC 1
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...