バッチファイルでcsvファイルを整形する。
すべての値を、空の値も、""で囲みます。
× aaa,b b,,"ddd","e e"
○ "aaa","b b","","ddd","e e"
csvfix.cmd 入力ファイル [出力ファイル]
@echo off
setlocal enabledelayedexpansion
set out=%2
for /f "delims=" %%L in (%1) do call :sub %%L
goto :eof
:sub
set line=%*
set fq=
set fg=
set fb=true
set line2=
set n=0
if not defined line goto :next
:for
set c=!line:~%n%,1!
if not defined c goto :next
if defined fq (
if !c!==^" set fq=& if defined fg set line2=!line2!^"
) else (
if !c!==^, if not defined fb (
set fb=true
if defined fg (
set fg=
set line2=!line2!^"
)
) else (
set line2=!line2!^"^"
)
if not !c!==^, if defined fb (
set fb=
if not !c!==^" (
set fg=true
set line2=!line2!^"
)
)
if !c!==^" set fq=true& if defined fg set line2=!line2!^"
)
set line2=!line2!!c!
set /a n+=1
goto :for
:next
if defined fq set line2=!line2!^"& if defined fg set line2=!line2!^"
if defined fg set line2=!line2!^"
if defined out (
echo;!line2!>>out
) else (
echo;!line2!
)
goto :eof
出力ファイルを省略すると標準出力へ。
バッチ引数が全角空白で区切られるバグへの対策用のバッチファイルを、空白区切りをコンマ区切りに、連続区切りを分離に変えただけです。
http://scripting.cocolog-nifty.com/blog/2009/02/post-1fb0.html