Показать полную графическую версию : определить основной шлюз для выбраннго адаптера
for /F "tokens=2 delims=:" %a in ('netsh inte
rface ip show addresses name="Подключение по локальной сети"|find "Основной шлюз
"') do set "shl=%a"
C:\Documents and Settings\COMP_NAME>echo =
=
C:\Documents and Settings\COMP_NAME>pause
Для продолжения нажмите любую клавишу . . .
Настройка протокола IP для Windows
Имя компьютера . . . . . . . . . : name
Основной DNS-суффикс . . . . . . :
Тип узла. . . . . . . . . . . . . : неизвестный
IP-маршрутизация включена . . . . : нет
WINS-прокси включен . . . . . . . : нет
Подключение по локальной сети - Ethernet адаптер:
DNS-суффикс этого подключения . . :
Описание . . . . . . . . . . . . : TAP-Win32 Adapter V9
Физический адрес. . . . . . . . . : здесь_мак
Dhcp включен. . . . . . . . . . . : да
Автонастройка включена . . . . . : да
IP-адрес . . . . . . . . . . . . : здесь_ип
Маска подсети . . . . . . . . . . : здесь_маска_подсети
Основной шлюз . . . . . . . . . . : здесь_основной_шлюз
DHCP-сервер . . . . . . . . . . . : здесь_DHCP-сервер
DNS-серверы . . . . . . . . . . . : здесь_DNS-серверы
NetBIOS через TCP/IP. . . . . . . : отключен
Аренда получена . . . . . . . . . : 9 апреля 2017 г. 16:11:48
Аренда истекает . . . . . . . . . : 9 апреля 2018 г. 16:11:48
Подключение по локальной сети 7 - Ethernet адаптер:
DNS-суффикс этого подключения . . :
Описание . . . . . . . . . . . . : LAN
Физический адрес. . . . . . . . . : здесь_мак
Dhcp включен. . . . . . . . . . . : да
Автонастройка включена . . . . . : да
IP-адрес . . . . . . . . . . . . : здесь_ип
Маска подсети . . . . . . . . . . : здесь_маска_подсети
Основной шлюз . . . . . . . . . . : здесь_основной_шлюз
DHCP-сервер . . . . . . . . . . . : здесь_DHCP-сервер
DNS-серверы . . . . . . . . . . . : здесь_DNS-серверы
NetBIOS через TCP/IP. . . . . . . : отключен
Аренда получена . . . . . . . . . : 9 апреля 2017 г. 16:11:48
Аренда истекает . . . . . . . . . : 10 апреля 2017 г. 16:11:48
так ведь у ТС WinXp, а там с netsh не все так хорошо...
neth1, код точно сохранен в кодировке 866? Также код из п15 должен работать в кодировке 866.
а каков вывод команды: netsh interface ip show addresses name="Подключение по локальной сети"
Кодировка 866.
Команда interface ip show addresses "name=Подключение по локальной сети" не найд
ена.
Странно, что это не работает. "show addresses" присутствует в help'е к netsh. Другие show отрабатывают нормально.
ну, а это? Там без netsh, wmic идет в поставке XP, если не почикано
Также код из п15 должен работать в кодировке 866 »
Команда interface »
кстати так здесь, записано или именно так и запускалась, если да, пропущено netsh вначале строки
Запускалось именно
netsh interface ip show addresses name="Подключение по локальной сети"
Ошибка
Команда interface ip show addresses "name=Подключение по локальной сети" не найд
ена.
Запускал в консоли netsh и делал пошагово:
netsh>interface>ip>show addresses name="Подключение по локальной сети"
Результат не изменился.
netsh interface ip>show config name="Подключение по локальной сети"
работает.
@echo off
set "na="& set "shl="
for /f "tokens=2 delims==" %%a in ('wmic path Win32_networkadapter where ^(NetConnectionStatus^="2"^) get NetConnectionID /value^|find "="') do if not defined na set "na=%%a"
for /f "delims=[]" %%a in ('ipconfig /all^|find /n "%na%"') do set "ns=%%a"
for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shl=%%a"
echo %shl: =%
pause
Не работает
Не удается получить доступ к файлу C:\Documents and Settings\comp_name\+
эта команда выдает список адаптеров?
wmic path Win32_networkadapter get name
иначе в вашем случае только так, без выбора, сугубо по имени и разбирая ipconfig:
@echo off
set "na=Подключение по локальной сети"
set "shl="
for /f "delims=[]" %%a in ('ipconfig /all^|find /n "%na%"') do set "ns=%%a"
for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shl=%%a"
echo %shl: =%
pause
не забываем - кодировка 866!
wmic path Win32_networkadapter get name »
Выдает. Все адаптеры, включая отключенные.
@echo off set "na=Подключение по локальной сети" set "shl=" for /f "delims=[]" %%a in ('ipconfig /all^|find /n "%na%"') do set "ns=%%a" for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shl=%%a" echo %shl: =% pause »
Не удается получить доступ к файлу C:\Documents and Settings\comp_name\+
=
Для продолжения нажмите любую клавишу . . .
neth1,
покажите скриншот окна после выполнения кода:
@echo on
set "na=Подключение по локальной сети"
set "shl="
for /f "delims=[]" %%a in ('ipconfig /all^|find /n "%na%"') do set "ns=%%a"
for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shl=%%a"
echo %shl: =%
pause
и скриншот этого же кода, записанного в bat файл в открытом виде файла, естественно
Все, я понял. Не стоило использовать notepad++.
Не знаю, что с ним не так. Если редактировать в блокноте, работает.
neth1,
чего, notepad++ неплохой редактор, но я лично пользуюсь AkelPad и кстати не только для удобства в настройках надо выставить перенос по строкам, возможно и к notepad++ это относится, ну и нужных плагинов включить для удобства, например подсветка кода в AkelPad мне очень нравиться, причем можно самому допилить что я успешно и сделал.
не только для удобства в настройках »
В нём и сохранять в разных кодировках можно (например, в 866, как нужно здесь).
Я не знаю в чем проблема с notepad++. Сохранял в 866.
Теперь проблема с использованием полученного адреса шлюза.
Как записать %shl: =% в "route add"?
Безрезультатно погуглил и поэксперементировал с кавычками, все время выдает "неверный адрес шлюза".
Как записать %shl: =% в "route add" »
в "route add" это куда, вы хоть поясняйте прозрачно, вставить в какой-то код?
"неверный адрес шлюза" »
а в каком случае верный? Если ручками прописывать - не ругается?
Вот так вырисовывается:
@echo off
set "na=openvpn"
set "shl="
for /f "delims=[]" %%a in ('ipconfig /all^|find /n "%na%"') do set "ns=%%a"
for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shl=%%a"
echo %shl: =%
set "na=ethernet"
set "shl="
for /f "delims=[]" %%b in ('ipconfig /all^|find /n "%nb%"') do set "ns=%%b"
for /f "tokens=2 delims=:" %%b in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shb=%%b"
echo %shb: =%
route delete 0.0.0.0 mask 0.0.0.0
route add -p %shb: =% mask 255.255.255.255 %shl: =%
route add 0.0.0.0 mask 0.0.0.0 %shl: =%
pause
Если адреса шлюзов вводить ручками, все работает.
set "na=openvpn"
set "shl=" »
REM Присвоить переменной na значение openvpn
set na=openvpn
REM Сбросить (удалить) переменную shl
set shl=(без кавычек; после знака равенства — ничего).
echo %shb: =%
..
route add -p %shb: =% mask 255.255.255.255 %shl: =%»
REM Вывести переменную shb с её значением
REM (после имени переменной — ничего)
set shb
REM Но можно и в форме
REM echo %shb%
REM — т.е. только её значение
REM
REM Добавить постоянный маршрут с использованием значений двух переменных
route add -p %shb% mask 255.255.255.255 %shl%
Ну и ещё есть минимум одна строка с неправильной (тот же принцип) работой с переменными.
mwz, а что не так с кавычками в set?
а что не так с кавычками в set? »
Да вроде не по феншую... И при команде "Help set" в Win-7 не показывает возможности использования кавычек — т.е. не документировано.
Но может и отстал от жизни.
PS
А, увидел:
При использовании любых логических или двоичных операторов необходимо
заключить строку выражения в кавычки. Любые нечисловые строки в выражении
рассматриваются как имена переменных среды, значения которых преобразуются
в числовой вид перед использованием. Если переменная с указанным именем
не определена в системе, вместо нее подставляется нулевое значение.
Рабочий вариант скрипта:
set na=openvpn
set shl=
for /f "delims=[]" %%a in ('ipconfig /all^|find /n "%na%"') do set "ns=%%a"
for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|more +%ns%^|find "Основной шлюз"') do if not defined shl set "shl=%%a"
echo %shl: =%
set na=ethernet
set vhb=
for /f "delims=[]" %%b in ('ipconfig /all^|find /n "%nb%"') do set "nv=%%b"
for /f "tokens=2 delims=:" %%b in ('ipconfig /all^|more +%nv%^|find "Основной шлюз"') do if not defined shl set "vhb=%%b"
echo %vhb: =%
route delete 0.0.0.0 mask 0.0.0.0
route add -p %vhb% mask 255.255.255.255 %shl%
route add 0.0.0.0 mask 0.0.0.0 %shl%
pause
Траффик не будет идти напрямую в случае дисконнекта openvpn.
Спасибо всем за помощь.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.