質問: バッチでのgotoコマンドエラーの処理 問題に直接取り組むには、バッチファイル自動クローズしない必要があります)gotoコマンドが有効でない場合(goto存在しない場所に移動)、はい、その後一時停止しますセクションは次のとおりです。set /p command= goto %command% pause ありがとうピザ
回答: このより安全なバージョンは、最初にすべてのラベルを文字列に収集し、一方が他方に続きます。 次のラベルのコロンは、前のラベルの終わりを示します。 文字列%labels%コロンがfindstrにエコーされ、入力されたラベルにもコロンが追加されるため、完全なラベルのみが一致します。 @echo off&setlocal enableextensions enabledelayedexpansion set "labels="&for /f %%a in ('findstr /i "^:[a-z]" %0') do set "labels=!labels!%%a" :redo set "label="&set /p "label=choose label %labels%:" if not defined label goto :eof echo %labels%:|findstr /i ":%label::=%:" >nul 2>&1 ||(echo invalid label %label% & goto :redo) goto %label% echo we'll never reach here :one echo label one goto :redo :two echo label two goto :redo :three echo label three goto :redo サンプル出力:> su_1204527.cmd choose label :redo:one:two:three:one label one choose label :redo:one:two:three:two label two choose label :redo:one:two:three:blah invalid label blah choose label :redo:one:two:three: >