番号付きの選択肢リストから申請を開始する

番号付きの選択肢リストから申請を開始する

フォルダー内のすべてのアプリケーションを番号付きリストで動的に表示し、アプリケーションに関連付けられた番号を入力して起動したいと考えています。

これまでのところ、番号表示という簡単な部分は機能していますが、番号入力を特定のアプリケーションを起動する方法と関連付ける方法がわかりません。

@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#ここで、 は#前の行で選択肢として選択した番号です。したがって、 を選択した場合5newchoice変数には が含まれますopt5

このstart !%newchoice%!行は、その変数内のファイル名が何であれそれを実行しますopt#

答え2

方法は 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...

set に対する choice の利点は、キーを押すと次に進むことです。Enter は必要ありません。また、誤った入力では続行されません。errorlevel の選択肢を 9 から 1 までリストする必要があることに注意してください。

関連情報