引数を使ってBatの条件分岐をする
2つの別のバッチをマージする事にしました。
仮にA.batとB.batだったとしてマージしたバッチをAB.batとします。
今まではA.batを実行して、B.batを実行していました。
但しB.batはA.batの処理の間に実行します。
これらのバッチはそれぞれ実行する前に確認のメッセージを表示していました。
:RESTART SET /P CHECK="処理を実行します。よろしいですか?(1:実行、9:終了):" IF %CHECK%==9 ( GOTO END ) IF %CHECK%==1 ( GOTO START ) ELSE ( GOTO RESTART ) :START rem 処理1 call ant task1 :END pause
ただ単にソースをマージすると2回確認のメッセージが表示されてしまいます。
確認し忘れたら、B.batは確認のところで止まったまんまです。
マージする際の機能の注意点は下記になりました
1. AB.batを実行したら確認メッセージは1回で、B.batは何も聞かれず実行される 2. AB.batの実行時にB.batを実行するか選択できる 3. 今まで通りA.bat、B.batを個別に順番に実行したら、それぞれ1回ずつ確認メッセージが聞かれる 4. B.batは「start」コマンドを使い別スレッドで実行する
単純に片方のbatから上記(実行確認)のソースを削ると確認メッセージが表示されません。
そこで引数を与えてやり、引数の有無で条件分岐をする事にしました。
AB.bat
@ECHO OFF :RESTART SET /P CHECK="処理を実行します。よろしいですか?(1:実行(A)、2:実行(A→B)、9:終了):" IF %CHECK% == 9 ( GOTO END ) IF %CHECK% == 2 ( GOTO START ) IF %CHECK% == 1 ( GOTO START ) ELSE ( GOTO RESTART ) :START rem ここからA.batの処理 rem 処理1 call ant task1 rem '2'を選択した場合、B.batを引数有りで呼び出す IF %CHECK% == 2 ( start B.bat 1 ) rem 処理2 call ant task2 :END pause
B.bat
@ECHO OFF rem 引数を取得 SET CHECK=%1 rem エラーレベルを取得 IF %ERRORLEVEL% == 1 ( SET CHECK=0 ) IF %CHECK% == 1 ( GOTO SKIP ) :RESTART SET /P CHECK="処理を実行します。よろしいですか?(1:実行、9:終了):" :SKIP IF %CHECK% == 9 ( GOTO END ) IF %CHECK% == 1 ( GOTO END ) ELSE ( GOTO RESTART ) :START call ant task1 :END pause
batにはノットイコール(<>、!=)がないし、空文字がないのでかなりはまったのですが、
ポイントは「SET CHECK=%1」で引数を取得し
引数を取得出来ない場合は「%ERRORLEVEL%」に「1」が返ってくる事を利用して
適当な数字を代入(上記では'0')。
引数を取得出来た場合はラベルを使って、確認メッセージをスキップします。
これで何とか思い通りのマージが実現出来ました(;^_^A