【バッチスクリプト】複数のバッチスクリプトを連続実行(逐次実行)する処理【STARTコマンド】


いつもお世話になっております。
RfromL.comです。

今回は複数のバッチスクリプトを順次連続実行するバッチスクリプトのSTARTコマンド版についてです。


1.はじめに

今回は以前書いた「【バッチスクリプト】複数のバッチスクリプトを連続実行(逐次実行)する処理【CALLコマンド】」のSTARTコマンド版についてです。

前回はCALLコマンドを使用してバッチスクリプトから別のバッチスクリプトを実行していましたが、条件としてCALL先のバッチスクリプトが「EXIT /B で終了していること」が前提となっています。

例)EXIT /B を指定した終了

上記のようにEXITに対して、/Bのオプションが指定されている場合は、呼び元のバッチスクリプトは終了されません。

ですが、次の例のようにEXITのみ(オプション指定なし)で終了している場合は、呼び元のバッチスクリプトまで終了していしまいます。

例)/Bオプションを指定しない終了

呼び元のバッチスクリプトが複数のバッチスクリプトを実行する処理だった場合、呼び元のバッチスクリプトまで一緒に終了してしまうと後続のバッチスクリプトが実行されなくなります。

このバッチのようにEXITのみ(オプション指定なし)で終了している複数のバッチスクリプトを逐次実行する場合はSTARTコマンドを使います。
ですが、そのまま使うと「【バッチスクリプト】複数のバッチスクリプトを並列実行する処理【STARTコマンド】」のように呼び先のバッチスクリプトの終了を待たずに後続の処理を実行してしまう並列実行になってしまいます。

STARTコマンドでCALLコマンドと同じように呼び先のバッチスクリプトの終了を待つには、WAITオプションを指定して以下のように記述します。

[コマンド 構文]

START /WAIT [実行するバッチスクリプトのパス]バッチスクリプト.bat

このコマンド構文を使う場合は、CALLコマンドを使う時の条件「呼び先のバッチスクリプトがEXITに/Bオプションを指定して終了していること。」とは逆で、STARTコマンドの/WAITオプションを使う場合は「呼び先のバッチスクリプトがEXITのみで終了していること。」が条件となります。


2.構文

今回使うSTARTコマンドのヘルプを見てみます。

以下、STARTコマンドのヘルプ(コマンド「START/?」の実行結果)より一部抜粋

指定されたプログラムまたはコマンドを実行するためにウィンドウを開きます。

START ["タイトル"] [/D パス] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA ノード>] [/AFFINITY <16 進数の関係マスク>] [/WAIT] [/B]
 [/MACHINE <x86|amd64|arm|arm64>][コマンド/プログラム] [パラメーター]

    "タイトル"  ウィンドウのタイトル バーに表示するタイトル。
    パス        開始するディレクトリ。
    B           新しいウィンドウを作成せずにアプリケーションを起動します。
                アプリケーションは Ctrl + C を無視します。
                アプリケーションで Ctr l+ C を有効にしていない場合、
                Ctrl + Break がアプリケーションを中断する唯一の方法です。
    I           新しい環境は、現在の環境ではなく、cmd.exe に渡された元の環境に
               なります。
    MIN         ウィンドウを最小化の状態で起動します。
    MAX         ウィンドウを最大表示の状態で起動します。
    SEPARATE    16 ビットの Windows プログラムを別メモリ領域で起動します。
    SHARED      16 ビットの Windows プログラムを共有メモリ領域で起動します。
    LOW         IDLE 優先度クラスでアプリケーションを起動します。
    NORMAL      NORMAL 優先度クラスでアプリケーションを起動します。
    HIGH        HIGH 優先度クラスでアプリケーションを起動します。
    REALTIME    REALTIME 優先度クラスでアプリケーションを起動します。
    ABOVENORMAL ABOVENORMAL 優先度クラスでアプリケーションを起動します。
   BELOWNORMAL BELOWNORMAL 優先度クラスでアプリケーションを起動します。
    NODE        優先 NUMA
                (Non-Uniform Memory Architecture) ノードを 10 進数の整数で指定します。
    AFFINITY    プロセッサの関係マスクを 16 進数で指定します。
                プロセスはこれらのプロセッサで実行されるように制限されます。

                /AFFINITY と /NODE を組み合わせると、関係マスクは異なって
                解釈されます。NUMA ノードのプロセッサ マスクを右にシフトして
                ビット 0 で始まるかのように関係マスクを指定します。
                プロセスは、指定した関係マスクと NUMA ノードの間で共通する
               プロセッサ上で実行されるように制限されます。
                共通するプロセッサがない場合は、プロセスは指定した NUMA ノード上で実行される
                ように制限されます。
    WAIT        アプリケーションを起動し、終了するまで待ちます。
 MACHINE アプリケーション プロセスのマシン アーキテクチャを指定します。
・
・
・

ヘルプから、今回使うオプションはWAITオプションのみです。

[ コマンド例 ]

START /WAIT [スクリプトのパス]実行するバッチスクリプト①.bat
START /WAIT [スクリプトのパス]実行するバッチスクリプト②.bat
START /WAIT [スクリプトのパス]実行するバッチスクリプト③.bat

3.テスト用処理概要

今回はテスト用に下図のように入力ファイルを繋げて使用する3つのバッチスクリプトを作成します。
3つのバッチスクリプトは「StartWait.bat」からSTARTコマンド(WAITオプション指定有り)でそれぞれ順番通りに実行します。

「StartWait.bat」から実行されるバッチスクリプトはそれぞれが、先行処理の出力ファイルを入力ファイルとするようにファイルIDを指定しているので、順番通りに実行されないと想定した結果とならないようになっています。


4.コード内容

テスト実行用に作成したスクリプトファイルは以下の4つです。

・StartWait.bat
・RunBat1.bat
・RunBat2.bat
・RunBat3.bat

「StartWait.bat」は、他の3つのバッチスクリプト「RunBat1.bat」「RunBat2.bat」「RunBat3.bat」をSTARTコマンド(WAITオプション)で実行する処理となっています。

「RunBat1.bat」「RunBat2.bat」「RunBat3.bat」のバッチスクリプトは、終了時のコード「EXIT」部分に「/B」を指定しない記述で作成してあります。


[ StartWait.bat ]

@ECHO OFF
@REM ------------------------------------------------------------
@REM 初期処理
@REM ------------------------------------------------------------
@REM 実行バッチファイルディレクトリ設定
SET CMD_PATH=%~dp0

@REM ------------------------------------------------------------
@REM 処理開始メッセージ
@REM ------------------------------------------------------------
ECHO %DATE:~0,4%年%DATE:~5,2%月%DATE:~8,2%日 %TIME:~0,2%時%TIME:~3,2%分%TIME:~6,2%秒 処理開始

@REM ------------------------------------------------------------
@REM 価格情報テーブル全件洗い替え処理
@REM ------------------------------------------------------------

SET SYORI_NAME="ヘッダー除外 処理"
START /WAIT %CMD_PATH%\RunBat1.bat
IF NOT %ERRORLEVEL% == 0            GOTO ABEND

SET SYORI_NAME="項目入替 処理"
START /WAIT %CMD_PATH%\RunBat2.bat
IF NOT %ERRORLEVEL% == 0            GOTO ABEND

SET SYORI_NAME="ソート 処理"
START /WAIT %CMD_PATH%\RunBat3.bat
IF NOT %ERRORLEVEL% == 0            GOTO ABEND

@REM ------------------------------------------------------------
@REM 正常終了処理
@REM ------------------------------------------------------------
:END
ECHO %DATE:~0,4%年%DATE:~5,2%月%DATE:~8,2%日 %TIME:~0,2%時%TIME:~3,2%分%TIME:~6,2%秒 正常終了
ECHO.

EXIT /B

@REM ------------------------------------------------------------
@REM 異常終了処理
@REM ------------------------------------------------------------
:ABEND
ECHO エラー発生処理名:%SYORI_NAME%
ECHO %DATE:~0,4%年%DATE:~5,2%月%DATE:~8,2%日 %TIME:~0,2%時%TIME:~3,2%分%TIME:~6,2%秒 異常終了
ECHO.

EXIT /B

[ RunBat1.bat ]

@REM ------------------------------------------------------------
@REM 初期処理
@REM ------------------------------------------------------------
@REM 実行バッチファイルディレクトリ設定
SET CMD_PATH=%~dp0

@REM 処理ID設定(バッチファイル名)
SET BATCH_ID=%~n0

@REM ログファイルディレクトリ設定
SET LOGDIR=%CMD_PATH%\log

@REM ログファイル設定
SET LOGFILE=%LOGDIR%\%BATCH_ID%.%DATE:~8,2%.log

@REM ------------------------------------------------------------
@REM ファイルディレクトリ設定
@REM ------------------------------------------------------------
@REM 入出力ファイルディレクトリ
SET IODIR=%CMD_PATH%FILE

@REM ------------------------------------------------------------
@REM ファイルID設定
@REM ------------------------------------------------------------
@REM 入力ファイルID
SET IFILEID=FILE_001.txt

@REM 出力ファイルID
SET OFILEID=FILE_002.txt

@REM ------------------------------------------------------------
@REM 処理開始メッセージ
@REM ------------------------------------------------------------
CALL :TIMEGET
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 処理開始
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 処理開始 >> %LOGFILE%

@REM ------------------------------------------------------------
@REM 入力ファイル存在チェック
@REM ------------------------------------------------------------
DIR %IODIR%\%IFILEID%
IF NOT %ERRORLEVEL% == 0 GOTO ABEND

@REM ------------------------------------------------------------
@REM ヘッダーレコード除外処理
@REM ------------------------------------------------------------
@REM 遅延環境変数有効
setlocal enabledelayedexpansion

@REM 入力レコードカウンター初期化
SET ICNT=0

@REM 出力レコードカウンター初期化
SET OCNT=0

@REM 入力ファイル読込(ファイル毎の1レコード目をskip=1指定で読み飛ばし)
FOR /F "skip=1 tokens=* usebackq" %%i IN ("%IODIR%\%IFILEID%") DO (

  @REM データレコード出力
  ECHO %%i>> "%IODIR%\%OFILEID%"

  @REM 入出力データレコード件数カウントアップ
  SET /A ICNT=!ICNT!+1
  SET /A OCNT=!OCNT!+1
)

@REM 入力レコード件数表示
ECHO I-FILE %ICNT%件 [ %IODIR%\%IFILEID% ] >> %LOGFILE%

@REM 出力レコード件数表示
ECHO O-FILE %OCNT%件 [ %IODIR%\%OFILEID% ] >> %LOGFILE%

@REM 遅延環境変数無効
endlocal

@REM ------------------------------------------------------------
@REM 正常終了処理
@REM ------------------------------------------------------------
:END
CALL :TIMEGET
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 正常終了
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 正常終了 >> %LOGFILE%
ECHO.>> %LOGFILE%

EXIT 0

@REM ------------------------------------------------------------
@REM 異常終了処理
@REM ------------------------------------------------------------
:ABEND

ECHO エラーコード:%ERRORLEVEL%
ECHO エラーコード:%ERRORLEVEL% >> %LOGFILE%

CALL :TIMEGET
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 異常終了
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 異常終了 >> %LOGFILE%
ECHO.>> %LOGFILE%

EXIT 9

@REM ------------------------------------------------------------
@REM 日時情報取得サブルーチン
@REM ------------------------------------------------------------
:TIMEGET

@REM システム日付取得(YYYY=年,MM=月,DD=日,WK=曜日)
SET YYYY=%DATE:~0,4%
SET MM=%DATE:~5,2%
SET DD=%DATE:~8,2%
SET WK=%DATE:~0,1%

@REM システム時刻取得(HH=時)
@REM ※HH部分(時間部分)の1文字目をチェックして
@REM   空白の場合は頭ゼロ埋めでセット
SET HHCHK=%TIME:~0,1%

IF "%HHCHK%"==" " (
  SET HH=0%TIME:~1,1%
) ELSE (
  SET HH=%TIME:~0,2%
)

@REM システム時刻取得(MI=分,SS=秒)
SET MI=%TIME:~3,2%
SET SS=%TIME:~6,2%

SET DATETIME="%YYYY%%MM%%DD%_%HH%%MI%%SS%"

[ RunBat2.bat ]

@REM ------------------------------------------------------------
@REM 初期処理
@REM ------------------------------------------------------------
@REM 実行バッチファイルディレクトリ設定
SET CMD_PATH=%~dp0

@REM 処理ID設定(バッチファイル名)
SET BATCH_ID=%~n0

@REM ログファイルディレクトリ設定
SET LOGDIR=%CMD_PATH%\log

@REM ログファイル設定
SET LOGFILE=%LOGDIR%\%BATCH_ID%.%DATE:~8,2%.log

@REM ------------------------------------------------------------
@REM ファイルディレクトリ設定
@REM ------------------------------------------------------------
@REM 入出力ファイルディレクトリ
SET IODIR=%CMD_PATH%FILE

@REM ------------------------------------------------------------
@REM ファイルID設定
@REM ------------------------------------------------------------
@REM 入力ファイルID
set IFILEID=FILE_002.txt

@REM 出力ファイルID
set OFILEID=FILE_003.txt

@REM ------------------------------------------------------------
@REM 処理開始メッセージ
@REM ------------------------------------------------------------
CALL :TIMEGET
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 処理開始
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 処理開始 >> %LOGFILE%

@REM ------------------------------------------------------------
@REM 入力ファイル存在チェック
@REM ------------------------------------------------------------
DIR %IODIR%\%IFILEID%
IF NOT %ERRORLEVEL% == 0 GOTO ABEND

@REM ------------------------------------------------------------
@REM ヘッダーレコード除外処理
@REM ------------------------------------------------------------
@REM 遅延環境変数有効
setlocal enabledelayedexpansion

@REM 入力レコードカウンター初期化
set ICNT=0

@REM 出力レコードカウンター初期化
set OCNT=0

@REM 入力ファイル読込
FOR /F "usebackq tokens=1-4 delims=," %%a IN ("%IODIR%\%IFILEID%") DO (

  @REM 入力レコード件数カウントアップ
  SET /A ICNT=!ICNT!+1

  @REM データレコード出力
  @REM 銘柄コード,銘柄名,価格,基準年月日
  ECHO %%b,%%c,%%d,%%a>> "%IODIR%\%OFILEID%"

  @rem 出力データレコード件数カウントアップ
  SET /A OCNT=!OCNT!+1

)

@REM 入力レコード件数表示
ECHO I-FILE %ICNT%件 [ %IODIR%\%IFILEID% ] >> %LOGFILE%

@REM 出力レコード件数表示
ECHO O-FILE %OCNT%件 [ %IODIR%\%OFILEID% ] >> %LOGFILE%

@REM 遅延環境変数無効
endlocal

@REM ------------------------------------------------------------
@REM 処理終了処理
@REM ------------------------------------------------------------
:END
CALL :TIMEGET
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 正常終了
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 正常終了 >> %LOGFILE%
ECHO.>> %LOGFILE%

EXIT 0

@REM ------------------------------------------------------------
@REM 異常終了処理
@REM ------------------------------------------------------------
:ABEND

ECHO エラーコード:%ERRORLEVEL%
ECHO エラーコード:%ERRORLEVEL% >> %LOGFILE%

CALL :TIMEGET
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 異常終了
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 異常終了 >> %LOGFILE%
ECHO.>> %LOGFILE%

EXIT 9

@REM ------------------------------------------------------------
@REM 日時情報取得サブルーチン
@REM ------------------------------------------------------------
:TIMEGET

@REM システム日付取得(YYYY=年,MM=月,DD=日,WK=曜日)
SET YYYY=%DATE:~0,4%
SET MM=%DATE:~5,2%
SET DD=%DATE:~8,2%
SET WK=%DATE:~0,1%

@REM システム時刻取得(HH=時)
@REM ※HH部分(時間部分)の1文字目をチェックして
@REM   空白の場合は頭ゼロ埋めでセット
SET HHCHK=%TIME:~0,1%

IF "%HHCHK%"==" " (
  SET HH=0%TIME:~1,1%
) ELSE (
  SET HH=%TIME:~0,2%
)

@REM システム時刻取得(MI=分,SS=秒)
SET MI=%TIME:~3,2%
SET SS=%TIME:~6,2%

SET DATETIME="%YYYY%%MM%%DD%_%HH%%MI%%SS%"

[ RunBat3.bat ]

@REM ------------------------------------------------------------
@REM 初期処理
@REM ------------------------------------------------------------
@REM 実行バッチファイルディレクトリ設定
SET CMD_PATH=%~dp0

@REM 処理ID設定(バッチファイル名)
SET BATCH_ID=%~n0

@REM ログファイルディレクトリ設定
SET LOGDIR=%CMD_PATH%\log

@REM ログファイル設定
SET LOGFILE=%LOGDIR%\%BATCH_ID%.%DATE:~8,2%.log

@REM ------------------------------------------------------------
@REM ファイルディレクトリ設定
@REM ------------------------------------------------------------
@REM 入出力ファイルディレクトリ
SET IODIR=%CMD_PATH%FILE

@REM ------------------------------------------------------------
@REM ファイルID設定
@REM ------------------------------------------------------------
@REM 入力ファイルID
SET IFILEID=FILE_003.txt

@REM 出力ファイルID
SET OFILEID=FILE_004.txt

@REM ------------------------------------------------------------
@REM 処理開始メッセージ
@REM ------------------------------------------------------------
CALL :TIMEGET
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 処理開始
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 処理開始 >> %LOGFILE%

@REM ------------------------------------------------------------
@REM SORT : ソート処理(昇順)
@REM ------------------------------------------------------------
SORT %IODIR%\%IFILEID% /O %IODIR%\%OFILEID%
IF NOT %ERRORLEVEL% == 0 GOTO ABEND

@REM ------------------------------------------------------------
@REM 正常終了処理
@REM ------------------------------------------------------------
:END
CALL :TIMEGET
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 正常終了
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 正常終了 >> %LOGFILE%
ECHO.>> %LOGFILE%

EXIT 0

@REM ------------------------------------------------------------
@REM 異常終了処理
@REM ------------------------------------------------------------
:ABEND

ECHO エラーコード:%ERRORLEVEL%
ECHO エラーコード:%ERRORLEVEL% >> %LOGFILE%

CALL :TIMEGET
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 異常終了
ECHO %BATCH_ID% %YYYY%年%MM%月%DD%日 %HH%時%MI%分%SS%秒 異常終了 >> %LOGFILE%
ECHO.>> %LOGFILE%

EXIT 9

@REM ------------------------------------------------------------
@REM 日時情報取得サブルーチン
@REM ------------------------------------------------------------
:TIMEGET

@REM システム日付取得(YYYY=年,MM=月,DD=日,WK=曜日)
SET YYYY=%DATE:~0,4%
SET MM=%DATE:~5,2%
SET DD=%DATE:~8,2%
SET WK=%DATE:~0,1%

@REM システム時刻取得(HH=時)
@REM ※HH部分(時間部分)の1文字目をチェックして
@REM   空白の場合は頭ゼロ埋めでセット
SET HHCHK=%TIME:~0,1%

IF "%HHCHK%"==" " (
  SET HH=0%TIME:~1,1%
) ELSE (
  SET HH=%TIME:~0,2%
)

@REM システム時刻取得(MI=分,SS=秒)
SET MI=%TIME:~3,2%
SET SS=%TIME:~6,2%

SET DATETIME="%YYYY%%MM%%DD%_%HH%%MI%%SS%"

5.テスト環境

5-1.ディレクトリ構成

作成したバッチスクリプトを実行する際のディレクトリ・ファイル構成です。
今回実行するバッチスクリプトは「StartWait.bat」です。
「StartWait.bat」の中から「RunBat1.bat」「RunBat1.bat」「RunBat1.bat」が実行されます。

5-2.テストファイル

STARTで実行する先のバッチスクリプトが使用するファイルの情報です。

【ファイルレイアウト】

No.項目名
1基準年月日
2銘柄コード
3銘柄名
4価格

【ファイル内容】

基準年月日銘柄コード銘柄名価格
202503019998金星投資法人190500
202504019999太陽投資法人401500
202504039997ジュピター投資法人105800
202504069996サターンファンド投資法人640000
202504129995ムーン投資法人704000

【実ファイル(FILE_001.txt)】

基準年月日,銘柄コード,銘柄名,価格
20250301,9998,金星投資法人,190500
20250401,9999,太陽投資法人,401500
20250403,9997,ジュピター投資法人,105800
20250406,9996,サターンファンド投資法人,640000
20250412,9995,ムーン投資法人,704000

実際に使用するファイルは、ヘッダーレコードを含めたカンマ区切りのCSVファイルです。
改行コードはCRLF、文字コードはSJISとなります。


6.機能説明

「StartWait.bat」で行う処理の説明です。

①開始処理
・処理開始メッセージを以下の書式で標準出力に出力する。
「スクリプトID YYYY年MM月DD日 hh時mm分ss秒 処理開始」

②ヘッダーレコード除外 処理
・バッチスクリプト「RunBat1.bat」(ヘッダーレコード除外 処理)を実行する。
・ERRORLEVELを判定処理
ステータスが0の場合、正常終了処理を行う。
ステータスが0以外の場合、異常終了処理を行う。

③CSVファイル項目入替 処理
・バッチスクリプト「RunBat2.bat」(CSVファイル項目入替 処理)を実行する。
・ERRORLEVELを判定処理
ステータスが0の場合、正常終了処理を行う。
ステータスが0以外の場合、異常終了処理を行う。

④ソート 処理
・バッチスクリプト「RunBat3.bat」(ソート処理)を実行する。
・ERRORLEVELを判定処理
ステータスが0の場合、正常終了処理を行う。
ステータスが0以外の場合、異常終了処理を行う。

⑤正常終了処理
・正常終了メッセージを以下の書式で標準出力し処理を終了する。
「スクリプトID YYYY年MM月DD日 hh時mm分ss秒 正常終了」

⑥異常終了処理
・異常終了メッセージを以下の書式で標準出力し処理を終了する。
「スクリプトID YYYY年MM月DD日 hh時mm分ss秒 異常終了」


7.実行結果確認

実行結果確認は稼働確認として正常処理、異常処理の以下2パターンを行います。

・正常終了確認(入力ファイル有り)
・異常終了確認(入力ファイル非存在)

7-1.正常終了確認(入力ファイル有り)

①入出力ファイル格納フォルダにファイルが格納されていることを確認

②コマンドプロンプトからバッチスクリプト「StartWait.bat」を実行

③ログファイルを確認し、処理が正常終了していることを確認
ログファイルが作成されていることを確認

それぞれのログファイルの内容を確認し、正常に処理されていることを確認します。


「RunBat1.bat」のログファイル

「RunBat2.bat」のログファイル

「RunBat3.bat」のログファイル

④入出力フォルダを確認し、出力ファイルが作成されていることを確認

⑤出力ファイルの内容を確認し、処理が正常に行われていることを確認

[確認ポイント]
・ヘッダーレコードが除外されていること
・基準年月日の項目が、ファイルの末尾に移動されていること
・レコードの並び順が、銘柄コードで昇順となっていこと

7-2.異常終了確認(入力ファイル非存在)

①入出力フォルダに入力ファイルが存在しないことを確認

②バッチスクリプト「StartWait.bat」を実行

③ログファイルを確認し「RunBat1.bat」のみ処理が実行され、異常終了していることを確認

[RunBat1.bat]のログファイル

ログから異常終了していることを確認


[RunBat2.bat]のログファイル

処理が実行されていないので、一回目の正常終了処理の時のログのみであることを確認。


[RunBat3.bat]のログファイル

処理が実行されていないので、一回目の正常終了処理の時のログのみであることを確認。


④入出力フォルダにファイルが作成されていないことを確認

6.おわりに

実行先の複数のバッチスクリプトが、それぞれ「EXIT(/B指定なし)」で終了するバッチスクリプトと「EXIT /B」で終了するバッチスクリプトが混在していた場合は、呼び元のバッチスクリプト側で以下のようにSTART /WAITで実行とCALLコマンドでの実行を使い分けることもできます。

[コード例]

START /WAIT バッチスクリプト①.bat
CALL バッチスクリプト②.bat
START /WAIT バッチスクリプト③.bat
CALL バッチスクリプト④.bat

以上です。
宜しくお願い致します。


タイトルとURLをコピーしました