Определите имя сетевой карты из netsh и сделайте что-нибудь

Я расширяю один из моих предыдущих сообщений.

Цель этого состоит в том, чтобы дважды проверить, существуют ли сетевые метки, если да, сценарий продолжит применять детали IP, если нет, то нам нужно проверить, не удалось ли запустить devcon или неправильно ли были добавлены виртуальные сетевые карты.

К вашему сведению: это для миграции виртуальной машины, после миграции нет сетевых карт, мы запускаем devcon, чтобы очистить все предыдущие адаптеры/оборудование и добавить новые сетевые карты, которые должны быть в правильном порядке (подключение по локальной сети, подключение по локальной сети 2). и Подключение по локальной сети 3), но поскольку Windows это не всегда так :( поэтому требуются некоторые проверки работоспособности.

То, что у меня есть до сих пор, выглядит следующим образом.

SET NICNaming=OTHER
FOR /F "Tokens=2 Delims=[]" %%a IN ('VER') DO SET _VerNo=%%a
FOR /F "Tokens=2-3 Delims=. " %%b IN ("%_VerNo%") DO (
    IF "%%b.%%c" LEQ  "6.1" SET NICNaming=Local Area Connection
    IF "%%b.%%c" GEQ  "6.2" SET NICNaming=Ethernet

)

for /f "skip=2 tokens=3*" %%A in ('netsh interface show interface') do (

IF "%%B" EQU "%NICNaming%" (ECHO %NICNaming% FOUND!) ELSE (ECHO %NICNaming% MISSING!)
IF "%%B" EQU "%NICNaming% 2" (ECHO %NICNaming% 2 FOUND!) ELSE (ECHO %NICNaming% 2 MISSING!)
IF "%%B" EQU "%NICNaming% 3" (ECHO %NICNaming% 3 FOUND!) ELSE (ECHO %NICNaming% 3 MISSING!)
)

Он выводит вроде правильно, но удваивает информацию, вот так - есть идеи, почему?

Local Area Connection MISSING!
Local Area Connection 2 FOUND!
Local Area Connection 3 MISSING!
Local Area Connection MISSING!
Local Area Connection 2 MISSING!
Local Area Connection 3 MISSING!

Так что в идеале, когда он работает правильно, и если какой-либо из 3 новых добавленных сетевых адаптеров отсутствует или имеет неправильное имя, он предупредит пользователя об устранении проблем.

Спасибо Б

EDIT: исправлена ​​проблема с ответом Wox — исправьте код ниже!

SET NICNaming=OTHER
FOR /F "Tokens=2 Delims=[]" %%a IN ('VER') DO SET _VerNo=%%a
FOR /F "Tokens=2-3 Delims=. " %%b IN ("%_VerNo%") DO (
    IF "%%b.%%c" LEQ  "6.1" SET NICNaming=Local Area Connection
    IF "%%b.%%c" GEQ  "6.2" SET NICNaming=Ethernet

)

for /f "skip=2 tokens=3*" %%A in ('netsh interface show interface') do (

IF "%%B" EQU "%NICNaming%" (ECHO %NICNaming% FOUND!) ELSE (ECHO %NICNaming% MISSING!)
IF "%%B" EQU "%NICNaming% 2" (ECHO %NICNaming% 2 FOUND!) ELSE (ECHO %NICNaming% 2 MISSING!)
IF "%%B" EQU "%NICNaming% 3" (ECHO %NICNaming% 3 FOUND!) ELSE (ECHO %NICNaming% 3 MISSING!)
Goto Done
)
:Done

person Vanelder    schedule 13.09.2015    source источник


Ответы (1)


По-видимому, netsh interface show interface показывает две строки, поэтому последний цикл выполняется дважды.

Выйти из цикла после одной итерации:

for ......... (
    ..........
    goto done
)
:done
person wOxxOm    schedule 13.09.2015