@echo off if "%1" == "" (echo コマンド番号を指定して下さい & goto end) if "%1" == "0" (echo 番号は1以上です & goto end) call :ErrorCheck %1 %~dp0_list.bat 2> null if "%ERRORLEVEL%" == "1" (goto end) for /F "delims= skip=%1" %%i in (%~dp0_list.bat) do ( %%i goto end ) REM サブルーチン用エリアを作る為の JUMP goto end REM ループ処理の事前エラーチェック :ErrorCheck call :setErrorLevel 1 for /F "skip=%1" %%i in (%2) do (call :setErrorLevel 0) if "%ERRORLEVEL%" == "1" (echo パラメータが不正です) exit /B REM errorlevel 設定用 :setErrorLevel exit /B %1 REM 終了 :end
ERRORLEVEL を判断用に使う為に( 汎用性のため ) setErrorLevel というサブルーチンを作成しています。 FOR のパラメータに不正があると、do を実行しないので、 ERRORLEVEL が設定されたかどうかでエラーを判断します。 FOR が出力する標準エラー出力は直接取得できないので、 サブルーチン化して FOR の出力するエラーメッセージを抑制しています 関連する記事 バッチファイルで、ファイルの中の行を指定してその行の文字列を実行する
タグ:バッチファイル