То, что вы ищете, это 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