バッチファイルで同階層にある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!」で参照可能。