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# .