CSVファイルをバッチファイルで結合するツールを作成した理由
業務でCSVファイルを結合する機会が増えたので、最初はヘッダーを含むCSVファイルを読み込み、2番目以降はヘッダーを含まないCSVファイルを読み込んで、1つのCSVファイルにするバッチファイルを探したのですが、なさそうだったので作ってみました。自由にお使い頂いてOKです。
@echo off
for /f "usebackq tokens=2 DELIMS=:" %%t in (chcp) do set code=%%t
setlocal enabledelayedexpansion
if "%1" == "" (
echo Output file is not set.
goto end
)
if not "%4" == "" (
echo Too many parameters.
goto end
)
if "%1" == "-isjis" (
if not "%code%" == "932" (
chcp 932
)
) else if "%1" == "-iutf8" (
if not "%code%" == "65001" (
chcp 65001
)
) else (
goto end
)
set file="%2"
if exist %file% (
del %file%
)
if exist tmp_%file% (
del tmp_%file%
)
set Header=TRUE
for /f %%a in ('dir /b *.csv') do (
echo %%a
if !Header!==TRUE (
set /p Header=<%%a
echo !Header!>>"%file%"
)
for /f "usebackq delims= skip=1" %%b in (%%a) do (
echo %%b>>"%file%"
)
)
if not "%3" == "" (
ren %file% tmp_%file%
if "%3" == "-outf8" (
rem shift-jis -> utf-8
if "%1" == "-isjis" (
powershell -nop -c "get-content tmp_%file% | Set-Content -Encoding UTF8 %file%"
)
) else if "%3" == "-osjis" (
rem utf-8 -> shift-jis
if "%1" == "-iutf8" (
powershell -nop -c "get-content -Encoding UTF8 tmp_%file% | Set-Content %file%"
)
)
del "tmp_%file%"
)
:end
echo Done.
endlocal
結合ツールについて
保存したbatファイルは、最低2つのパラメータの設定が必要になります。
第1パラメータは、結合するもとのcsvファイル群の文字コードを設定します。指定方法は、-isjisと-iutf8の2種類です。
第2パラメータは、csvファイル群を1つに結合するファイル名を設定します。
第3パラメータは、任意です。1つに結合するファイルの文字コードを設定します。結合元のファイルと1つに結合するファイルの文字コードが同じであれば設定は不要です。設定するパラメータは-osjisと-outf8の2種類です。
例.上のソースをコピーしfilemerge.batとして保存し、結合ファイルをall.csvとする場合、以下の4つのパターンが実行できます。
filemerge.bat -isjis all.csv ← SHIFT-JISのCSVファイル群を1つのall.csvにします
filemerge.bat -iutf8 all.csv ← UTF-8のCSVファイル群を1つのall.csvにします
filemerge.bat -isjis all.csv -outf8 ← SHIFT-JISのCSVファイル群をUTF-8に変換した1つのall.csvにします
filemerge.bat -iutf8 all.csv -osjis ← SHIFT-JISのCSVファイル群をSHIFT-JISに変換した1つのall.csvにします
結合ツールの使い方
- 上記のソースをコピーし、好きな名前で拡張子をbatにし、SHIFT-JISまたはUTF-8で保存します。
- 1.で保存したバッチファイルを、CSVファイル群に移動します。
- コマンドプロンプトを出します。
- バッチファイルを実行します。実行方法については、「結合ツールについて」を参照してください。