Это должно сработать! - То, что мы здесь делаем, довольно просто. Основываясь на вашем фрагменте, я настроил его так, чтобы в нем отображались имена без пустых строк. Оттуда мы используем строку подсчета для подсчета каждого результата в +1
. - Используя это число, мы можем сделать из него уникальную строку!
В примере: Set "Num!i!=%%B"
- Мы принимаем Num
Plus !i!
(Num1, Num2, Num3, Exc
) равным %%B
(NetConnectionID
). Простое право! - Видите, где мы это берем?
Теперь, когда мы можем назначить каждому NetConnectionID
число и уникальную строку, мы повторяем это с Echo !i! - %%B
в качестве формата, который вы опубликовали. Этот список будет увеличиваться с числами 1-Infin
для всех NetConnectionID
, присутствующих на вашем устройстве или в сети.
Пример:
Select Network Interface
1 - Bluetooth Network Connection
2 - Ethernet
3 - Wi-Fi
4 - VPN - VPN Client
5 - Hamachi
6 - Ethernet 2
7 - VirtualBox Host-Only Network
0 - Exit
Set Your Choice And Press Enter:
Исходя из этого, если вы еще не выяснили, при выборе числа с set /P
мы используем команду set, чтобы установить строку input
как Num#
. - НО Мы используем %Input%
, чтобы получить уникальный #
. Это будет настройка Input=!Num1!, Input=!Num2!, Input=!Num3!, Exc!
.
Set "INPUT=!Num%INPUT%!"
Отсюда мы просто очищаем строку, и вы готовы идти!
GetUniqueNetConnectionList.bat:
@ECHO OFF
@setlocal EnableDelayedExpansion
@goto MenuList
:MenuList
cls
Set "INPUT="
Set "i=0"
Echo Select Network Interface
Echo(
Rem | Get NetConnectionID To String
For /F "Tokens=* Skip=1" %%A In ('WMIC NIC Get NetConnectionID') Do (
Rem | Remove Empty Lines
For /F "Tokens=*" %%B In ("%%A") Do (
Rem | Set Strings
Set /A "i+=1"
Rem | Save Variable As String
Set "Num!i!=%%B"
Rem | Print String To Console
Echo !i! - %%B
)
)
Echo 0 - Exit
Echo(
Set /P INPUT=Set Your Choice And Press Enter:
IF /I "!INPUT!"=="0" GOTO :EOF
Rem | Check For Valid Listing
IF /I "!Num%INPUT%!"=="" (
Rem | Number Not Listed!
Echo(
Echo ERROR: Number Was Not On The List.
Pause>NUL
goto MenuList
)
cls
Rem | Set String Based On Number
Set "INPUT=!Num%INPUT%!"
Rem | Remove Spaces From End Of String
for /l %%A in (1,1,100) do (if "!INPUT:~-1!"==" " set INPUT=!INPUT:~0,-1!)
Set "net_int=!INPUT!"
Echo !net_int! Selected
pause
EDIT:
Благодаря отзывам о скрипте я забыл о безопасной сети (случаются ошибки), когда или если вы выберете номер, которого нет в списке, он продолжит и запустит скрипт. Это может вызвать большие проблемы, в зависимости от того, что вы используете, чтобы строка была пустой.
Чтобы исправить это, я просто добавил оператор IF
ниже set /P
, чтобы найти результат. Если действительный результат не найден, он вернет вас в меню.
IF /I "!Num%INPUT%!"=="" (
Echo(
Echo ERROR: Number Was Not On The List.
Pause>NUL
goto MenuList
)
Для получения справки по любой из команд выполните следующее:
call /?
set /?
for /?
if /?
find /?
- И так далее.