Получить имя подключения по локальной сети и изменить его с помощью пакета - PullRequest
1 голос
/ 26 июня 2019

Я знаю, как извлечь активное соединение и изменить имя подключения по локальной сети, но мне хотелось бы знать, как сделать их в одном сценарии, т.е. получить имя активного подключения по локальной сети и изменить его на LAN.

Чтобы получить текущие активные соединения:

wmic.exe nic where "NetConnectionStatus=2" get NetConnectionID |more +1 

Изменить имя сети на:

NetSh interface set interface name="Ethernet" newname="LAN"

1 Ответ

3 голосов
/ 26 июня 2019

То, что вы ищете, это for /F цикл , который способен захватывать выходные данные команды:

for /F "tokens=1* delims==" %%J in ('
    wmic NIC where "NetConnectionStatus=2" get NetConnectionID /VALUE
') do (
    for /F "delims=" %%I in ("%%K") do (
        netsh interface set interface name="%%I" newname="LAN"
    )
)

Внутренний цикл for /F здесь необходим для того, чтобы избежать артефактов (например, осиротевших символов возврата каретки) при преобразовании текста Unicode wmic в текст ASCII / ANSI по внешнему for /F (см. также мой ответ мой).

Я также изменил формат вывода wmic с помощью опции /VALUE в соответствии с рекомендациями пользователя Compo в комментарии , что позволяет избежать проблем с возможным трейлингом Пробелы .


Обратите внимание, что запрос wmic может возвращать более одного адаптера, поэтому, возможно, вы захотите расширить предложение where, чтобы избежать этого, например:

for /F "tokens=1* delims==" %%J in ('
    wmic NIC where "NetConnectionStatus=2 and NetConnectionID like '%%Ethernet%%'" get NetConnectionID /VALUE
') do (
    for /F "delims=" %%I in ("%%K") do (
        netsh interface set interface name="%%I" newname="LAN"
    )
)

%% в пакетном файле представляет один литерал %, а % - это подстановочный знак в предложениях where, поэтому приведенный выше код возвращает только элементы с Ethernet в именах (в случае нечувствительным образом).


Чтобы гарантировать, что netsh затронул только один элемент, вы можете просто использовать goto в петлях for /F, чтобы разорвать их:

for /F "tokens=1* delims==" %%J in ('
    wmic NIC where "NetConnectionStatus=2" get NetConnectionID /VALUE
') do (
    for /F "delims=" %%I in ("%%K") do (
        netsh interface set interface name="%%I" newname="LAN"
        goto :NEXT
    )
)
:NEXT

Ссылка: Класс Win32_NetworkAdapter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...