Uruchom aplikację z numerowanej listy opcji

1

Chcę dynamicznie wyświetlać wszystkie aplikacje w folderze na liście numerowanej i uruchamiać je, wprowadzając numer powiązany z aplikacją.

Do tej pory mam łatwą część do pracy, wyświetlanie numerowane - ale jestem zaskoczony, jak powiązać wprowadzanie liczb z sposobem uruchomienia określonej aplikacji.

@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

Wyjście wygląda następująco:

NirSoft Tools

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

Enter Choice:

Brakuje kluczowej części, sposobu uruchomienia wybranej aplikacji według jej numeru. Czy to w ogóle możliwe w wierszu poleceń systemu Windows?

dfkt
źródło

Odpowiedzi:

2

Oto coś, co wymyśliłem z minimalnymi dodatkami (3 linie) i utrzymuję je dynamicznie (na wypadek zmiany zawartości katalogu / liczby opcji):

@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

Co się tutaj dzieje z tymi dodatkami?

set opt!num!=%%~neLinia tworzy nową zmienną dla każdej opcji ( opt1, opt2etc.), a każdy z nich zawiera nazwę pliku, który jest z nim związane.

set newchoice=opt%choice%Linia tworzy nową zmienną o nazwie „newchoice”, który odwołuje się do opt#zmiennej, gdzie #jest numer, który wybrał jako swojego wyboru w poprzednim wierszu. Więc jeśli wybierzesz 5, newchoicezmienna będzie zawierać opt5.

start !%newchoice%!Linia będzie działać niezależnie od nazwy pliku jest w tej opt#zmiennej.

Ƭᴇcʜιᴇ007
źródło
Dziękuję bardzo, to działa pięknie. Będę musiał przeczytać o kombinacjach opóźnionego rozszerzenia (! ...!) I regularnych (% ...%) zmiennych - wydaje się to dość potężne.
dfkt
1

Istnieją 2 sposoby. Kontynuuj z tym, co masz teraz i dodaj:

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

Alternatywnie i lepiej zastąp set /pnastępujące:

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

etc...

Zaletą wyboru nad zestawem jest to, że naciskasz klawisz, a następnie kontynuuje. Nie trzeba wprowadzać. Ponadto nie będzie kontynuowane przy fałszywych danych wejściowych. Pamiętaj, że musisz podać opcje poziomu błędu od 9 do 1.

LPChip
źródło
1
Dzięki, ale chcę zachować cały proces selekcji dynamiczny, ponieważ programy są dodawane lub usuwane z tego folderu. Powinienem był wspomnieć o tym bardziej szczegółowo w moim pytaniu.
dfkt
Obie opcje działają, chociaż wybór wymaga nieco większej konfiguracji, jeśli to się zmieni. Pierwszy nadal działa idealnie. Po prostu dodaje do skryptu, uruchamiając programy. Wydaje mi się jednak, że zapomniałem o goto enduruchomieniu programu. Ale brakowało mi części o dynamicznym tworzeniu menu.
LPChip