我想在編號清單中動態顯示資料夾內的所有應用程序,並透過輸入與應用程式關聯的編號來啟動它們。
到目前為止,我已經完成了簡單的部分,即編號顯示 - 但我對如何將數位輸入與啟動特定應用程式的方式關聯起來感到困惑。
@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...
選擇相對於設定的優點是您按下該鍵,然後它就會繼續。無需輸入。此外,如果輸入錯誤,它也不會繼續。請注意,您必須列出從 9 到 1 的錯誤等級選項。