バッチファイルでCSVファイルを結合するツールを作成してみた(一部PowerShellを利用)

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にします

 

結合ツールの使い方

  1. 上記のソースをコピーし、好きな名前で拡張子をbatにし、SHIFT-JISまたはUTF-8で保存します。
  2. 1.で保存したバッチファイルを、CSVファイル群に移動します。
  3. コマンドプロンプトを出します。
  4. バッチファイルを実行します。実行方法については、「結合ツールについて」を参照してください。