Y子です。
今回は、ファイルを結合する方法を考えます。
難しいバッチファイルは作りません。
このバッチファイルは、簡単なコマンドを使って、現場でその場で作れることが大事です。
【確認環境:Windows 10 Home (Bld. 19042.928)】
#概要・用途
ファイルを結合します。
バイナリファイルでもテキストファイルでも、同じように結合できます。
わたしは下記のようなことがあり、必要に迫られて覚えました。
|用途(例)|
|:|
|1時間区切りのバイナリログを出力する機器がある。
これを1週間程度動作させておき、ログを解析する。
1日の中でどのような傾向を示すのか知りたいため、1日単位のログにしたい。
ログを24時間単位で結合してから変換ツールにかけると、見やすくなる。|
まったく同じ需要はなかなかないと思いますが(笑)、まあそこはそれ。
#コード
##(1) コマンド例(最初の既存ファイルに追記)
> copy /b 01a.log + 01b.log + 01c.log + 01d.log
ファイルを+
でつなげて書くと、1番目のファイルに2番目以降の内容が追記されます。
既存のファイルが更新されてしまうので、注意が必要です。
この例では、01a.log
が更新されて、4ファイル分がまとまります。
##(2) コマンド例(最後の新規ファイルに結合)
> copy /b 01a.log + 01b.log + 01c.log + 01d.log 01.log
ファイルを+
でつなげ、最後に+
無しでファイル名を書くと、最後のファイルが結合後のファイルになります。
この例では、01.log
が新しくできて、4ファイル分がまとまります。
##(3) コマンド例(ワイルドカード)
> copy /b 01*.log 01.log
ワイルドカードも使えます。
01*.log
に該当するファイルがすべて結合され、01.log
にまとまります。
##(4) バッチファイル例(指定した日付のファイルを結合)
RcvLog_20210430_00.log
~RcvLog_20210430_23.log
のファイルが1フォルダ(C:\log dir
)に格納されているような場合を想定したバッチファイルです。
引数に日付を与えることで、繰り返し使えるようにしました。
@echo off
rem 引数がない場合は終了する
if "%~1"=="" (echo 引数がありません & pause & exit /b)
set str_date=%~1
cd "C:\log dir"
copy /b RcvLog_%str_date%_*.log RcvLog_%str_date%.log
> merge_logfile.bat 20210430
RcvLog_20210430_00.log
RcvLog_20210430_01.log
RcvLog_20210430_02.log
RcvLog_20210430_03.log
※中略※
RcvLog_20210430_23.log
1 個のファイルをコピーしました。
#おわりに
最初(1)の書き方しか知らず、1番目のファイルが書き換えられて焦りました。
(3)のワイルドカードを使う場合、似た名前のファイルをうっかり置いてしまうと一緒に結合されてしまいます。
愚直に(2)のような書き方をした方が、期限が迫った現場にいらぬ混乱を与えることもなくて良いと思います。
上記バッチファイルはワイルドカードを使っちゃいましたが!(だって楽だし…)
ではでは!