TSファイルの録画時間を求める

これまで録画したファイルの録画時間を求めるのにTsCuttertsdivを作って調べていたが、よくよく考えてみればRecTestやEpgDataCap_Bonで録画する際には録画開始時間にファイルが作成されて、録画終了時間までファイルが更新され続ける訳だから、ファイルの作成日時と更新日時の差を求めれば簡単に録画時間が求められることに気が付いた。ただ、同名で上書きされた録画ファイルや、Multi2DecやTsSplitterで出力したファイルには使えない。
とりあえずバッチファイルでやってみた。作成日時は変数参照の置換では求められないのでDIRコマンドを使ってる。あと年や月をまたがる日時の計算が面倒なので時刻だけの差を求め、マイナスになる場合は24時間を足して正しい値を求めている。なので、24時間以上録画されたファイルは正しく処理できない。以下は録画ファイル「C:\video\NEWS.ts」を処理する例。

FOR /F "usebackq tokens=2" %%I IN (`DIR /TC "C:\video\NEWS.ts"^|FIND "NEWS.ts"`) DO SET RS=%%I
IF "%RS:~0,1%"=="0" (SET HH=%RS:~1,1%) ELSE SET HH=%RS:~0,2%
IF "%RS:~3,1%"=="0" (SET MM=%RS:~4,1%) ELSE SET MM=%RS:~3,2%
SET /A RS=%HH%*60+%MM%
FOR /F "usebackq tokens=2" %%I IN (`DIR /TW "C:\video\NEWS.ts"^|FIND "NEWS.ts"`) DO SET RE=%%I
IF "%RE:~0,1%"=="0" (SET HH=%RE:~1,1%) ELSE SET HH=%RE:~0,2%
IF "%RE:~3,1%"=="0" (SET MM=%RE:~4,1%) ELSE SET MM=%RE:~3,2%
SET /A RE=%HH%*60+%MM%
IF %RE% GEQ %RS% (SET /A RT=%RE%-%RS%) ELSE SET /A RT=(24*60+%RE%)-%RS%
ECHO 録画時間は %RT% 分です。

あとEpgDataCap_BonやMulti2Decやtsselectの出力するエラーログを参照してドロップ数とスクランブル数を求めるバッチファイルも作ってみた。以下は「C:\video\NEWS.ts.err」を処理する例。tsselectで保存したログの場合は3行目の「tokens=6,8」を「tokens=6,10 delims==,」にして「FIND "PID:"」を「FIND ", total="」にすれば使える。

SET DC=0
SET SC=0
FOR /F "usebackq tokens=6,8" %%I IN (`TYPE "C:\video\NEWS.ts.err"^|FIND "PID:"`) DO CALL :COUNT %%I %%J
ECHO Drop数は %DC% 個、Scramble数は %SC% 個です。
EXIT /B
:COUNT
SET /A DC=%DC%+%1
SET /A SC=%SC%+%2
EXIT /B