【バッチスクリプト】ファイル結合してヘッダーレコードを付与して出力する

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

ヘッダーレコードのファイルと、データレコードのファイルをファイル結合してファイル出力する処理についてです。


1.はじめに

以前ヘッダーレコードを含むファイルからヘッダーレコードを除外して出力するバッチスクリプトを作成しました。
今回はその逆。
ヘッダーレコードのファイルと、データレコードのファイルをファイル結合してファイル出力する処理です。

2.使用コマンド

ファイルの結合には「copy」コマンドを使用します。

コマンド例(コピー元に指定したファイルを結合してファイルを新規作成)

copy /b ファイル① + /b ファイル② + /b ファイル③ 出力ファイル

上記コマンドの場合、ファイル①、ファイル②、ファイル③の3ファイルを結合して出力ファイルを新規作成されます。

結合のされ方は、一番左に指定したファイルから順番に結合されていきます。
上記のコマンド例でイメージすると、以下のように出力されます。

[出力ファイルの中身]
入力ファイル①の内容
入力ファイル②の内容
入力ファイル③の内容

まあそうなるでしょうね。という感じではあります。


3.作成スクリプト

3-1.コード内容

今回作成したスクリプトファイルのコード内容は以下の通りです。

[ FileHeadJoin.bat ]

@echo off
@rem ------------------------------------------------------------
@rem システム名         : RfromL.com
@rem 処理ID             : FileHeadJoin
@rem 処理名             : ヘッダーレコード付与
@rem 処理内容           : ヘッダーレコードを付与して出力する
@rem 作成日             : 2025.03.17
@rem 作成者             : S.Takaaze
@rem パラメータ         : なし
@rem 備考               : なし
@rem *** 修正履歴 ***********************************************
@rem No.  日付        修正者              内容
@rem 001  2025.03.17  S.Takaaze  新規作成
@rem ------------------------------------------------------------
@rem - 初期処理
@rem ------------------------------------------------------------
@rem カレントディレクトリ設定
set CMD_PATH=%~dp0

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

@rem 処理開始メッセージ表示
echo %BATCH_ID% %DATE:~0,4%年%DATE:~5,2%月%DATE:~8,2%日 %TIME:~0,2%時%TIME:~3,2%分%TIME:~6,2%秒 処理開始

@rem ------------------------------------------------------------
@rem - ファイルディレクトリ設定
@rem ------------------------------------------------------------
@rem 入力ファイルディレクトリ
set IDIR=%CMD_PATH%IN

@rem 出力ファイルディレクトリ
set ODIR=%CMD_PATH%OUT

@rem ヘッダーレコードファイル格納ディレクトリ
set HDIR=%CMD_PATH%HEADER

@rem ------------------------------------------------------------
@rem - ファイルID設定
@rem ------------------------------------------------------------
@rem 入力ファイルID
set IFILEID001=INFILE.txt

@rem 出力ファイルID
set OFILEID001=OUTFILE.txt

@rem ヘッダーレコードファイルID
set HFILEID001=HEADER.txt

@rem ------------------------------------------------------------
@rem - ファイルフルパス設定
@rem ------------------------------------------------------------
@rem 入力ファイル
set IFILE001=%IDIR%\%IFILEID001%

@rem 出力ファイル
set OFILE001=%ODIR%\%OFILEID001%

@rem ヘッダーレコードファイル
set HFILE001=%HDIR%\%HFILEID001%

@rem ------------------------------------------------------------
@rem - copy : ヘッダー付与処理
@rem ------------------------------------------------------------
set PROC_NAME=ヘッダー付与処理

copy /b %HFILE001% + /b %IFILE001% %OFILE001%
if not %errorlevel% == 0 goto ABEND

@rem ------------------------------------------------------------
@rem - 正常終了処理
@rem ------------------------------------------------------------
:END

echo %BATCH_ID% %DATE:~0,4%年%DATE:~5,2%月%DATE:~8,2%日 %TIME:~0,2%時%TIME:~3,2%分%TIME:~6,2%秒 正常終了

pause

exit /b 0

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

echo エラー発生処理名:%PROC_NAME%
echo errorlevel:%errorlevel%
echo %BATCH_ID% %DATE:~0,4%年%DATE:~5,2%月%DATE:~8,2%日 %TIME:~0,2%時%TIME:~3,2%分%TIME:~6,2%秒 異常終了

pause

exit /b 9

※メッセージを確認するため、正常終了処理、異常終了処理のブロックに「pause」を記載して処理を一時停止するようにしています。

3-2.ディレクトリ構成

作成したバッチスクリプトを実行する際のディレクトリ構成です。

ツールを移動する際は「FileHeadjoin」ディレクトリごと移動します。

3-3.機能説明

ディレクトリ「HEADER」配下に格納されたファイル「HEADER.txt」とディレクトリ「IN」配下に格納されたファイル「INFILE.txt」を結合してファイル「OUTFILE.txt」としてディレクトリ「OUT」配下に出力します。


4.実行結果確認

①ヘッダーファイルと入力ファイルの内容を確認




②ファイル出力先のディレクトリにファイルがなにも無いことを確認。




③バッチスクリプトをダブルクリックして実行




④表示されたメッセージからコピー処理が実行されていることを確認




⑤出力ファイルの内容を確認


出力ファイルに以下の並びでレコードが出力されていることを確認
1.ヘッダーレコード
2.データレコード
3.データレコード
    ・
    ・
    ・

5.おわりに

注意点としては出力ファイルのレコードの並びに法則があれば、コピー元のファイルID指定の順番を注意するぐらいでしょうか。
SORTコマンドでもファイル結合自体はできますが、入力ファイル内のレコードの並びを変えずに結合したい場合はCopyコマンドの方がいいのかなといったところです。

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



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