【bat】バッチファイルで全てのCSVファイル内の特定文字列を編集する

バッチファイルで同階層にあるCSVファイル内のの特定文字列を編集します。

前提条件
編集前のCSVファイル:TEST_yyyyMMddhhmmss.csv
編集後のCSVファイル:after_TEST_yyyyMMddhhmmss.csv
特定文字列:電話番号と仮定し、3桁、4桁、4桁のハイフン区切りに編集
補足:フォーマットは以下の例の通り
      電話番号は空欄の可能性あり
      電話番号の後続列は空欄の可能性あり
例
編集前
1,山田太郎,202-0003,09011112222,男
2,山田次郎,202-0003,,男
3,山田太郎,202-0003,,

編集後
1,山田太郎,202-0003,090-1111-2222,男
2,山田次郎,202-0003,,男
3,山田太郎,202-0003,,
@echo off
setlocal ENABLEDELAYEDEXPANSION
cd %~dp0
set LOG_FILE=%~n0.log
echo [ INFO ] %date% %time% CSVファイルの編集を開始します。 >>%LOG_FILE%

for %%x in (TEST_*.csv) do (
  echo %%x
  set OUTPUT_FILE=after_%%x
  type nul > !OUTPUT_FILE!

  for /f "tokens=1-5 delims=," %%a in (%%x) do (
    set STRTMP=%%d
    if not "!STRTMP!" == "" (
      if "!STRTMP:~0, 3!" == "090" (
        set STRTMP=!STRTMP:~0, 3!-!STRTMP:~4, 4!-!STRTMP:~7, 4!
        echo %%a,%%b,%%c,!STRTMP!,%%e >>!OUTPUT_FILE!
      ) else (
        echo %%a,%%b,%%c,,%%d >>!OUTPUT_FILE!
      )
    ) else (
      echo %%a,%%b,%%c,%%d,%%e >>!OUTPUT_FILE!
    )
  )
)
echo [ INFO ] %date% %time% CSVファイルの編集を終了します。 >>%LOG_FILE%
endlocal
exit /b
ポイント
・delimsでカンマ区切りを指定する。
・tokensで区切った配列のどのインデックスを利用するか決定する。
  配列は%%a~%%eで参照可能。
・値が空欄の場合、配列が詰められる。(ココがややこしい)
  1列目:配列の長さは5
  2列目:配列の長さは4
  3列目:配列の長さは3
・「type nul > !OUTPUT_FILE!」を行うことで、1度初期化してから実行している。
・繰り返し処理中は「setlocal ENABLEDELAYEDEXPANSION」~「endlocal」内で
  変数は「!XXX!」で参照可能。