Quiero mostrar todas las aplicaciones dinámicamente dentro de una carpeta en una lista numerada e iniciarlas ingresando el número asociado con la aplicación.
Hasta ahora tengo la parte fácil funcionando, la pantalla numerada, pero no sé cómo asociar la entrada del número con una forma de iniciar la aplicación específica.
@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
Y el resultado se ve así:
NirSoft Tools
1 BulkFileChanger
2 FileTypesMan
3 IconsExtract
4 nircmd
5 nircmdc
6 ShellBagsView
7 ShellExView
8 ShellMenuNew
9 ShellMenuView
Enter Choice:
Falta la parte crucial, la forma de iniciar la aplicación seleccionada por su número. ¿Es eso posible incluso con la línea de comandos de Windows?
Respuesta1
Aquí hay algo que se me ocurrió con adiciones mínimas (3 líneas) y lo mantiene dinámico (para cuando cambia el contenido del directorio/número de opciones):
@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
¿Qué está pasando aquí con estas adiciones?
La set opt!num!=%%~ne
línea crea una nueva variable para cada opción ( opt1
,, opt2
etc.) y cada una de ellas contiene el nombre del archivo asociado a ella.
La set newchoice=opt%choice%
línea crea una nueva variable llamada "nueva opción" que hace referencia a la opt#
variable, donde #
es el número que eligió como elección en la línea anterior. Entonces, si eliges 5
, la newchoice
variable contendrá opt5
.
La start !%newchoice%!
línea ejecutará cualquier nombre de archivo que esté en esa opt#
variable.
Respuesta2
Hay 2 maneras. Continúe con lo que tiene ahora y agregue lo siguiente:
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
Alternativamente y mejor, reemplace el set /p
con lo siguiente:
choice /c 123456789 /m Enter Choice:
if errorlevel 2 goto FiletypesMan
if errorlevel 1 goto BulkFileChanger
etc...
La ventaja de elegir sobre configurar es que presionas la tecla y luego continúa. No es necesario ingresar. Además, no continuará con entradas falsas. Tenga en cuenta que debe enumerar las opciones de nivel de error del 9 al 1.