1

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

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

@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?

2 ответа2

2

Вот кое-что, что я придумал с минимальными добавлениями (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# .

1

Есть 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...

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .