从编号选项列表中启动应用程序

从编号选项列表中启动应用程序

我想以编号列表的形式动态显示文件夹内的所有应用程序,并通过输入与应用程序关联的编号来启动它们。

到目前为止,我已经完成了简单的部分,即编号显示 - 但我不知道如何将数字输入与启动特定应用程序的方式关联起来。

@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 命令行可以做到这一点吗?

答案1

以下是我想出的最少的补充(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行为每个选项(opt1opt2等)创建一个新变量,每个变量都包含与其关联的文件名。

set newchoice=opt%choice%行创建了一个名为“newchoice”的新变量,该变量引用了该opt#变量,其中 是#您在上一行中选择的数字。因此,如果您选择5,则该newchoice变量将包含opt5

start !%newchoice%!行将运行该opt#变量中的任何文件名。

答案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...

choice 比 set 的优势在于,你按下该键,它就会继续运行。无需输入。此外,如果输入错误,它不会继续运行。请注意,你必须列出从 9 到 1 的错误级别选项。

相关内容