Пакетный файл для получения имени подключения по локальной сети в Windows XP - PullRequest
3 голосов
/ 22 марта 2012

В настоящее время я пишу простой пакетный скрипт для автоматической установки DNS-соединения. Вот скрипт:

REM Set DNS 
netsh interface ip set dns name="Local Area Connection" static X.X.X.X
netsh interface ip add dns name="Local Area Connection" Y.Y.Y.Y index=2
netsh interface ip add dns name="Local Area Connection" Z.Z.Z.Z index=3

Но дело в том, что если имя локальной сети не является именем по умолчанию (т.е. подключение по локальной сети), сценарий не будет работать.

Можно ли как-то обнаружить все имена локальных подключений и установить DNS всех этих локальных подключений с помощью командного файла?

Любая помощь будет оценена:)

Ответы [ 2 ]

10 голосов
/ 22 марта 2012

Я тестировал этот код в Windows 7 . Возможно, вам придется внести некоторые изменения для Windows XP .

@Echo Off
For /f "skip=2 tokens=4*" %%a In ('NetSh Interface IPv4 Show Interfaces') Do (
    Call :UseNetworkAdapter %%a "%%b"
)
Exit /B

:UseNetworkAdapter
:: %1 = State
:: %2 = Name (quoted); %~2 = Name (unquoted)
If %1==connected (
    :: Do your stuff here, for example:
    Echo %2
)
Exit /B

Замечу, что я всегда использую Call операторы, а не скобки в скобках. Слишком часто люди смущаются, когда переменные среды ведут себя не так, как ожидалось в скобках. Я считаю, что вызов метки облегчает работу со скриптом.

РЕДАКТИРОВАТЬ: Объяснение.

Команда For читает каждую строку файла или результат команды.
In ('command') говорит ему прочитать каждую строку результатов command.
skip=2 пропускает первые две строки вывода, в данном случае заголовок столбца.
tokens=4* говорит, что нужно читать четвертую вещь в каждой строке как одну переменную (4), а все, что после этого, как другую переменную (*). %%a говорит о необходимости хранить вышеуказанные токены в %%a и %%b соответственно.
Do (commands) выполняет commands для каждой строки.

Мой вывод NetSh Interface IPv4 Show Interface:

Idx     Met         MTU          State                Name
---  ----------  ----------  ------------  ---------------------------
  1          50  4294967295  connected     Loopback Pseudo-Interface 1
 15          50        1500  disconnected  Bluetooth Network Connection
 24          10        1500  connected     Network Bridge

Итак, я беру четвертый токен (State) и все токены после него (Name) и передаю их вызову функции скрипта. Здесь они извлекаются как параметры командной строки, а именно %1 и %2.
Обратите внимание, что каждое Имя состоит из двух или трех токенов из-за пробелов, поэтому вместо 5.

используется *.
0 голосов
/ 01 декабря 2013

Вывод первой строки Windows XP команды 'netsh int ip show config':

Конфигурация для интерфейса "Подключение по локальной сети"

@echo off
for /F tokens^=2^ delims^=^" %%a in ('netsh int ip show config') do set "sUserFriendyName=%%a"
echo/set http://www.opendns.com/ DNS for interface "%sUserFriendyName%"
netsh int ip delete dns "%sUserFriendyName%" all
netsh interface ip set dns name="%sUserFriendyName%" source=static addr=208.67.222.222 register=PRIMARY
netsh interface ip add dns name="%sUserFriendyName%" addr=208.67.220.220 index=2
ipconfig /flushdns
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...