最初に、"tokens=1*"
を使用して、for /f
ループを使用して、最初の単語| notfirstwordでテキストを分割できます。詳細については、コンソールウィンドウのhelp for
を参照してください。
次に、call :label
への試みを使用できます。ここで、:label
は最初の単語が何であってもかまいません。本質的には、batch functionsを作成し、ユーザーに実行される機能を選択させることになります。ファンクションラベルが存在しない場合、errorlevelはゼロではなく、conditional executionを使用して適切に処理できます。これにより、追加する各選択肢または同義語にif /i
ステートメントを追加しなくても、スクリプトを簡単に拡張できます。 (2>NUL
をリダイレクトすることによってcall
存在しないラベルを試みるため、エラーメッセージを非表示にするには良い考えかもしれません。)ここでは、完全な例を示します
@echo off & setlocal
:entry
set /P "command=Command? "
for /f "tokens=1*" %%I in ("%command%") do (
2>NUL call :%%I %%J || (
if errorlevel 1000 (exit /b 0) else call :unsupported %%I
)
goto :entry
)
:display
:echo
:say
:show
echo(%*
exit /b 0
:ping
ping %~1
exit /b 0
:exit
:quit
:bye
:die
echo OK, toodles.
exit /b 1000
:unsupported <command>
1>&2 echo %~1: unrecognized command
exit /b 0
ありがとう!これは私のために働く:) –