EpgDataCap_Bonで使うバッチファイルが一応完成

定時後、第二神明で帰宅。晩御飯はカレー。
EpgDataCap_Bonでの録画後に実行するバッチファイルは動作チェックもそれなりにちゃんと終わって一応の完成。あとは目的別にカスタマイズできるようにブラッシュアップしていこう。
昨日、おとといは急に寝たりしたけど、今日は起きてるので風呂入って早めに就寝。
以下、作ったバッチファイル。覚え書きとしてメモ。

@ECHO OFF
SETLOCAL

REM ************************************************************************
REM NP にコピー先のパス名(例:"\\NAS\share\")を設定
REM MT に送信先メールアドレス(例:hogehoge@foo.bar)を設定、
REM 尚、NP を設定しないとコピーを、MT を設定しないとメール送信を行わない
REM ************************************************************************

SET NP=
SET MT=

REM ************************************************************************
REM 録画ファイルの作成日時(録画開始日時)をTCに、更新日時(録画終了日時)を
REM TWに求め、それぞれ分単位にしたものをRSとREに格納し、その差を録画時間とし
REM てRTに求め、FXにカッコでくくった録画時間を格納
REM ************************************************************************

FOR /F "usebackq skip=5 tokens=1,2 delims=の " %%I IN (`DIR /TC "$FilePath$"`) DO IF NOT "%%J"=="個" SET TC=%%I %%J
IF "%TC:~-5,1%"=="0" (SET HH=%TC:~-4,1%) ELSE SET HH=%TC:~-5,2%
IF "%TC:~-2,1%"=="0" (SET MM=%TC:~-1,1%) ELSE SET MM=%TC:~-2%
SET /A RS=%HH%*60+%MM%
FOR %%I IN ("$FilePath$") DO SET TW=%%~tI
IF "%TW:~-5,1%"=="0" (SET HH=%TW:~-4,1%) ELSE SET HH=%TW:~-5,2%
IF "%TW:~-2,1%"=="0" (SET MM=%TW:~-1,1%) ELSE SET MM=%TW:~-2%
SET /A RE=%HH%*60+%MM%
IF %RE% GEQ %RS% (SET /A RT=%RE%-%RS%) ELSE SET /A RT=24*60+%RE%-%RS%
SET FX=(%RT%分)

REM ************************************************************************
REM マクロで放送開始時間と放送終了時間を分単位でPS、PEに求め、放送開始時間よ
REM り1秒〜59秒早く録画開始する場合のためにPSから1分引いたものを、録画開始の
REM RSと、PEを録画終了のREと比較して、一致しなければFXにエラーとして追記
REM ************************************************************************

SET /A PS=$STH$*60+$STM$
SET /A PE=$ETH$*60+$ETM$
IF %PS% EQU 0 (SET /A PS=23*60+59) ELSE SET /A PS=%PS%-1
IF %RS% NEQ %PS% SET FX=%FX%(開始ミス)
IF %RE% NEQ %PE% SET FX=%FX%(終了ミス)

REM ************************************************************************
REM エラーログのPID:で始まる行のDrop数とScramble数の合計をCOUNTサブルーチン
REM でDC、SCに求め、それぞれ0以上ならDrop数とScrambleの有無をFXに追記
REM ************************************************************************

SET DC=0
SET SC=0
FOR /F "usebackq tokens=1,6,8" %%I IN ("$FilePath$.err") DO IF "%%I"=="PID:" CALL :COUNT %%J %%K
IF %DC% GTR 0 SET FX=%FX%(Drop=%DC%)
IF %SC% GTR 0 SET FX=%FX%(Scramble)

REM ************************************************************************
REM 番組情報やエラー内容をダミーファイルに出力する
REM ************************************************************************

FOR %%I IN ("$FilePath$") DO SET DN="%%~dpnI $ServiceName$ $SDYYYY28$-$SDMM28$-$SDDD28$ %FX%.log"
ECHO.$Title2$>%DN%
ECHO $SDYYYY28$/$SDMM28$/$SDDD28$>>%DN%
ECHO $ServiceName$>>%DN%
ECHO 放送日時>>%DN%
ECHO $SDYYYY$/$SDMM$/$SDDD$ $STHH$:$STMM$:$STSS$〜>>%DN%
ECHO $EDYYYY$/$EDMM$/$EDDD$ $ETHH$:$ETMM$:$ETSS$>>%DN%
ECHO ($DUHH$:$DUMM$:$DUSS$)>>%DN%
ECHO 録画日時>>%DN%
ECHO %TC%〜>>%DN%
ECHO %TW%>>%DN%
ECHO (%RT%分)>>%DN%
IF %DC% GTR 0 ECHO ドロップ発生 %DC%個>>%DN%
IF %SC% GTR 0 ECHO 復号漏れ発生 %SC%個>>%DN%
IF %RE% NEQ %PE% ECHO 録画開始と番組開始が違う>>%DN%
IF %RS% NEQ %PS% ECHO 録画終了と番組終了が違う>>%DN%
ECHO $FileName$>>%DN%

REM ************************************************************************
REM 録画ファイルやエラーログ等を指定したコピー先へコピーし、正常に終わった場
REM 合はダミーファイルを削除、何らかのエラーが出た場合はコピー時のエラー内容
REM RecEnd.tmp をダミーファイルに付加する
REM コピー先 NP の指定が無い場合は処理を行わない
REM ************************************************************************

SET CF=1
IF NOT DEFINED NP GOTO COPYEND
FOR %%I IN ("$FilePath$") DO COPY /Y "%%~dpnI*.*" %NP%>"%~dp0RecEnd.tmp" 2>&1
SET CF=%ERRORLEVEL%
IF %CF% EQU 0 GOTO COPYEND
SET FX=%FX%(コピー失敗)
ECHO ファイルコピーに失敗した>>%DN%
FOR /F "usebackq delims=" %%I IN ("%~dp0RecEnd.tmp") DO ECHO %%I>>%DN%
:COPYEND

REM ************************************************************************
REM エラー内容 FX にカッコでくくった録画時間以外が含まれていれば、エラーとし
REM て指定されたメールアドレスへダミーファイルの内容を送信する
REM 送信先メールアドレス MT が指定されてない場合は処理を行なわない
REM ************************************************************************

SET MF=0
IF NOT DEFINED MT GOTO MAILEND
IF "%FX%"=="(%RT%分)" GOTO MAILEND
"%~dp0smail.exe" -d -hsmtp.gmail.com -fnyanonon@gmail.com -s"D945GCLF2:エラー報告" -F%DN% %MT% > "%~dp0RecEnd.tmp" 2>&1
SET MF=%ERRORLEVEL%
IF %MF% EQU 0 GOTO MAILEND
ECHO メール送信処理に失敗した>>%DN%
FOR /F "usebackq delims=" %%I IN ("%~dp0RecEnd.tmp") DO ECHO %%I>>%DN%
:MAILEND

REM ************************************************************************
REM コピーやメールでエラーが無ければダミーファイルを削除する
REM ************************************************************************

IF %CF% NEQ 0 GOTO DELEND
IF %MF% NEQ 0 GOTO DELEND
DEL %DN%
:DELEND

REM ************************************************************************
REM バッチファイル終了
REM ************************************************************************

ENDLOCAL
EXIT /B

REM ************************************************************************
REM ドロップ数、スクランブル数を合計するためのサブルーチン
REM ************************************************************************

:COUNT
SET /A DC=%DC%+%1
SET /A SC=%SC%+%2
EXIT /B