Показать полную графическую версию : определить основной шлюз для выбраннго адаптера
Несколько сетевых адаптеров, настройки получают по dhcp.
Нужно брать текущий шлюз для одного из адаптеров, и использовать его дальше в скрипте.
Примерно так:
Получить шлюз для "ethernet адаптер1"
route add 0.0.0.0 mask 0.0.0.0 'шлюз для "ethernet адаптер1"'
neth1, парсить вывод вот этой команды?
netsh interface ip show route
Готового батника не предложу, извините.
'interface' в данном случае имя интерфейса?
Как его узнать?
netsh 'Подключение по локальной сети - Ethernet адаптер' ip show route
не сработало.
Команда 'Подключение по локальной сети - Ethernet адаптер' ip show route не найдена.
Где посмотреть рабочие примеры парсинга?
neth1, извиняюсь, не то написал.
Вот:
netsh interface ip show addresses
Выведет конфиг для всех интерфейсов.
netsh interface ip show addresses name="Имя_интерфейса"
Выведет конфиг для нужного.
Впрочем, то же самое выведет и ipconfig.
netsh interface ip show addresses
Команда interface ip show addresses не найдена.
А что на счет парсинга?
Не представляю, как это реализуется средствами cmd.
Команда interface ip show addresses не найдена. »
Вы бы тогда озвучили среду исполнения.
win xp.
Помогите пожалуйста спарсить шлюз из ipconfig, кто может.
Я буду очень долго разбираться.
Странно, но не работает:
@echo off
for /f "tokens=7 delims=:" %%a in ('ipconfig /all ^| findstr "шлюз.*"') do (
if not defined gateway set gateway=%%a
)
echo gateway - %gateway%
а так?
@echo off
setlocal enabledelayedexpansion
for /f "usebackq tokens=1-2 delims=:" %%i in (`ipconfig ^| find "Основной шлюз"`) do echo.%%j
Работает.
У меня несколько адаптеров, шлюз нужен только для одного.
Как из %%j выбрать нужную строку?
Откуда ж нам знать, по каким критериям Вы выбираете потребный. Озвучьте.
Можно по названию сетевого подключения или просто первый, второй или третий шлюз. Они всегда выдаются в одном порядке.
Конечно лучше по названию сетевого подключения.
по названию сетевого подключения или просто первый »
@echo off
set "na1="
for /f "tokens=2 delims==" %%a in ('wmic path Win32_networkadapter where ^(NetConnectionStatus^="2"^) get NetConnectionID /value^|find "="') do (
set "na=%%a"
if not defined na1 set "na1=%%a"
)
echo Первое имя сетевого подключения - %na1%
echo Последнее имя сетевого подключения - %na%
pause>nul
надеюсь разберетесь как подставить в поиск парсера
И да, это если все всегда включено и подключено каждый раз идентично, если нет, понятно что имя первого займет другое, если сегодня первый отдыхает.
Проблема не в том, чтобы спарсить сетевые подключения, а в том чтобы поставить нужное в поиск парсера.
У меня слишком низкий скилл, знаю что хочу сделать, но не вижу реализацию:(
Если поизвращаться с парсингом ipconfig /all, то вывести нужный шлюз, например первого подключенного адаптера можно так:
@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
Конечно так было бы повеселее, но видимо на вашей системе netsh не работает
@echo off
for /f "tokens=2 delims=:" %%a in ('netsh interface ip show addresses name^="Имя подключения"^|find "Основной шлюз"') do set "shl=%%a"
echo %shl: =%
pause
На моей системе первый вариант также не работает:
Не удается получить доступ к файлу C:\Documents and Settings\comp_name\+
Почему может не работать netsh?
Он есть.
netsh>help
Применимы следующие команды:
Команды в этом контексте:
.. - Переход на один контекстный уровень вверх.
? - Отображение списка команд.
abort - Отмена изменений, сделанных в автономном режиме.
add - Добавление элемента конфигурации в список элементов.
alias - Добавление псевдонима.
bridge - Изменения в контексте 'netsh bridge'.
bye - Выход из программы.
commit - Применение изменений, сделанных в автономном режиме.
delete - Удаление элемента конфигурации из списка элементов.
diag - Изменения в контексте 'netsh diag'.
dump - Отображение сценария конфигурации.
exec - Запуск файла сценария.
exit - Выход из программы.
firewall - Изменения в контексте 'netsh firewall'.
help - Отображение списка команд.
interface - Изменения в контексте 'netsh interface'.
lan - Изменения в контексте 'netsh lan'.
nap - Изменения в контексте 'netsh nap'.
offline - Переход в автономный режим.
online - Переход в оперативный режим.
popd - Получение контекста из стека.
pushd - Помещение текущего контекста в стек.
quit - Выход из программы.
ras - Изменения в контексте 'netsh ras'.
routing - Изменения в контексте 'netsh routing'.
set - Обновление параметров конфигурации.
show - Отображение информации.
unalias - Удаление псевдонима.
winsock - Изменения в контексте 'netsh winsock'.
Доступны следующие дочерние контексты:
bridge diag firewall interface lan nap ras routing winsock
Конечно так было бы повеселее, но видимо на вашей системе netsh не работает
Код: Выделить весь код
@echo off
for /f "tokens=2 delims=:" %%a in ('netsh interface ip show addresses name^="Имя подключения"^|find "Основной шлюз"') do set "shl=%%a"
echo %shl: =%
pause »
Это отрабатывает, но "shl" пустая.
Имя подключения »
Во-первых сюда написать имя, например: "Подключение по локальной сети", или какое там у вас
Во-вторых, значения шлюза может и не быть на определенном адаптере
наберите в командной строке: ipconfig /all>"C:\file.txt" и посмотрите какие имена сетевых подключений, у кого есть Основной шлюз и какой у кого нет, скопируйте имя подключения для которого надо выводить значение шлюза, если оно есть как таковое, конечно
код сохраняйте в кодировке 866!
Во-первых сюда написать имя, например: "Подключение по локальной сети", или какое там у вас
Во-вторых, значения шлюза может и не быть на определенном адаптере
наберите в командной строке: ipconfig /all>"C:\file.txt" и посмотрите какие имена сетевых подключений, у кого есть Основной шлюз и какой у кого нет, скопируйте имя подключения для которого надо выводить значение шлюза, если оно есть как таковое, конечно
код сохраняйте в кодировке 866! »
Именно так все и делал.
C:\test.bat
=
Для продолжения нажмите любую клавишу . . .
Именно так все и делал »
Давайте чтобы я не ругался, показывать то что вы делали
1. Вывод этого: ipconfig /all>"C:\file.txt" (можете затереть цифры значений или изменить)
2. этот код
@echo on
for /f "tokens=2 delims=:" %%a in ('netsh interface ip show addresses name^="Имя подключения"^|find "Основной шлюз"') do set "shl=%%a"
echo %shl: =%
pause
где вместо Имя подключения стоит именно то что у вас, вернее именно тот код как есть который вы запускаете
3. скриншот окна cmd после запуска
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.