Я тестировал этот код в 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
.
используется
*
.