bat[002]複数のCSVファイルをマージ&ソートするバッチファイル

スクリプトの流れ>

  1. 全てのCSVファイルの2行目以降(more +1)の空白行以外(findstr ".")をマージし、 一時ファイル(temp.txt)に出力
  2. CSVファイルの一つからヘッダ(タイトル)行のみ取り出して all.csv に出力
  3. タイトル行が1024バイトを超えている場合に備えて、変数サイズに1024バイト制限のあるSETコマンドは使わず、echoコマンドからファイルに直接出力する
  4. ファイル名に空白スペースが含まれている場合に備えて、[usebackq]オプションでファイルセットのファイル名(%%a)を二重引用符で囲めるようにする
  5. タイトル行に空白スペースが含まれている場合に備えて、[delims]オプションで空白スペースを区切り文字にしない
  6. 一時ファイル(temp.txt)の中身を降順にソート(sort /r)して all.csv に追記
  7. 一時ファイル(temp.txt)を削除する

CSVファイルと同じフォルダに入れて実行する

CSV_Marge_Sort.bat>

@echo off

set temp_file=temp.txt
set marge_file=all.csv

REM 1.
for %%a in (*.csv) do (
    type "%%a" | more +1 | findstr "." >> %temp_file%
)

REM 2.
for %%a in (*.csv) do (
    for /f "usebackq delims=" %%b in ("%%a") do (
        echo %%b> %marge_file%
        goto :label
    )
)
:label

REM 3.
sort /r < %temp_file% >> %marge_file%

REM 4.
del /q %temp_file%