Начните подачу заявки из пронумерованного списка вариантов

Начните подачу заявки из пронумерованного списка вариантов

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

Пока что у меня работает самая простая часть — отображение цифр, но я в замешательстве, как связать ввод цифр со способом запуска конкретного приложения.

@echo off

echo NirSoft Tools
echo.

setlocal enabledelayedexpansion

set num=0

for %%e in (*.exe) do (
    set /a num += 1
    echo !num! %%~ne
)

echo.
set /p choice="Enter Choice: "

endlocal

echo.
pause

И вывод выглядит так:

NirSoft Tools

1 BulkFileChanger
2 FileTypesMan
3 IconsExtract
4 nircmd
5 nircmdc
6 ShellBagsView
7 ShellExView
8 ShellMenuNew
9 ShellMenuView

Enter Choice:

Отсутствует важная часть, способ запуска выбранного приложения по его номеру. Возможно ли это вообще с командной строкой Windows?

решение1

Вот что я придумал с минимальными дополнениями (3 строки) и сохраняю динамику (на случай изменения содержимого каталога/количества опций):

@echo off

echo NirSoft Tools
echo.

setlocal enabledelayedexpansion

set num=0

for %%e in (*.exe) do (
    set /a num += 1
    set opt!num!=%%~ne
    echo !num! %%~ne
)

echo.
set /p choice="Enter Choice: "

set newchoice=opt%choice%
start !%newchoice%!

endlocal

echo.
pause

Что происходит с этими дополнениями?

Строка set opt!num!=%%~neсоздает новую переменную для каждой опции ( opt1, opt2, и т.д.), и каждая из них содержит имя файла, связанное с ней.

Строка set newchoice=opt%choice%создает новую переменную с именем "newchoice", которая ссылается на opt#переменную, где #— это число, которое вы выбрали в качестве своего выбора в предыдущей строке. Так что если вы выберете 5, newchoiceпеременная будет содержать opt5.

Строка start !%newchoice%!выполнит любое имя файла, указанное в этой opt#переменной.

решение2

Есть 2 способа. Либо продолжить с тем, что есть сейчас, и добавить следующее:

if %choice%==1 goto BulkFileChanger
if %choice%==2 goto FiletypesMan
...
if %choice%==9 goto ShellMenuView

goto end

:BulkFileChanger
REM command here

:FiletypesMan
REM command here

etc...

:end

В качестве альтернативы и лучшего варианта замените set /pна следующее:

choice /c 123456789 /m Enter Choice:
if errorlevel 2 goto FiletypesMan
if errorlevel 1 goto BulkFileChanger

etc...

Преимущество выбора над набором в том, что вы нажимаете клавишу, а затем он продолжает. Ввод не требуется. Кроме того, он не продолжит работу при ложном вводе. Обратите внимание, что вам нужно перечислить варианты errorlevel от 9 до 1.

Связанный контент