我想以编号列表的形式动态显示文件夹内的所有应用程序,并通过输入与应用程序关联的编号来启动它们。
到目前为止,我已经完成了简单的部分,即编号显示 - 但我不知道如何将数字输入与启动特定应用程序的方式关联起来。
@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
行为每个选项(opt1
、opt2
等)创建一个新变量,每个变量都包含与其关联的文件名。
该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 的错误级别选项。