У меня есть два сетевых адаптера Intel, которые мне нужно переименовать в соответствии с их индексными номерами. WMIC хорош тем, что, кажется, всегда возвращает индексные номера в числовом порядке, поэтому мы можем получить выходные данные напрямую, без необходимости сортировки или выполнения каких-либо операций сравнения результатов. ,
К сожалению, я сталкиваюсь с ошибкой, когда если в цикле FOR я использую netsh для отображения информации об интерфейсе, используя переменную в теге index, он возвращает «Неверный индекс». Я считаю, что проблема заключается в необходимости использования обратных кавычек в FOR /F для переключения на обработку команд, а не на обработку файлов. Надеясь, что кто-то может указать на простую ошибку или дать более четкое решение того, что я пытаюсь сделать. Код следующим образом:
SET INTERFACENAME=LAN1
FOR /F "skip=1 tokens=1 delims=" %%a in (
'WMIC path Win32_NetworkAdapter where "Manufacturer='Intel'" get index'
) do (
call :sub1 %%a
)
:sub1
:: %1 = index
FOR /F "skip=2 tokens=1,2 delims=:" %%b in (
'netsh interface ip show interface index=%index%'
) do (
if "%%b"=="User-friendly Name" (
netsh interface set interface name = "%%c" newname = "%INTERFACENAME%" && set INTERFACENAME=LAN2 && exit /b
)
)
Первый цикл FOR разрешается правильно и передает порядковый номер подпрограмме, но команда netsh во второй подпрограмме возвращает недопустимый индекс. Остальная часть кода в подпрограмме еще не была протестирована, поэтому я не уверен, что переменная INTERFACENAME обновляется правильно. В идеале весь этот процесс должен проходить через двойное переименование первого результата команды WMIC в LAN1 и второго результата команды WMIC в LAN2.