Inicia o aplicativo a partir de uma lista numerada de opções

1

Desejo exibir todos os aplicativos dinamicamente em uma pasta em uma lista numerada e iniciá-los inserindo o número associado ao aplicativo.

Até agora eu tenho a parte fácil de trabalhar, o display numerado - mas estou perplexo como associar a entrada de números a uma maneira de lançar o aplicativo específico.

@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

E a saída é assim:

NirSoft Tools

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

Enter Choice:

A parte crucial está faltando, a maneira de iniciar o aplicativo selecionado pelo seu número. Isso é possível com a linha de comando do Windows?

    
por dfkt 02.07.2014 / 23:03

2 respostas

2

Aqui está algo que eu criei com adições mínimas (3 linhas) e o mantém dinâmico (para quando o conteúdo do diretório / número de opções mudar):

@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

O que está acontecendo aqui com essas adições?

A linha set opt!num!=%%~ne cria uma nova variável para cada opção ( opt1 , opt2 , etc.) e cada uma delas contém o nome do arquivo associado a ela.

A linha set newchoice=opt%choice% cria uma nova variável denominada "newchoice" que faz referência à variável opt# , em que # é o número escolhido por você na linha anterior. Portanto, se você escolher 5 , a variável newchoice conterá opt5 .

A linha start !%newchoice%! executará o nome do arquivo que estiver na variável opt# .

    
por 02.07.2014 / 23:54
1

Existem 2 maneiras. Continue com o que você tem agora e adicione o seguinte:

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

Como alternativa e melhor, substitua o set /p pelo seguinte:

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

etc...

A vantagem da escolha sobre o set é que você pressiona a tecla e depois continua. Não insira necessário. Além disso, não continuará com entradas falsas. Observe que você precisa listar as opções de nível de erro de 9 para 1.

    
por 02.07.2014 / 23:23