複数のファイルに分かれたデータをさくっと1ファイルにまとめたいとき。
@echo off for /f %%i in ('dir /b *.csv') do ( echo %%i type %%i>>result.csv ) pause
そろってヘッダが付いてる場合など
複数のcsvファイルを結合するバッチ(1個目のファイル以外は1行目を削除) - Qiita
@echo off setlocal enabledelayedexpansion set /a counter=0 for /f %%i in ('dir /b *.csv') do ( echo %%i if !counter!==0 ( set /p _head=<%%i echo !_head!>>result.csv ) set /a counter=!counter!+1 for /f "tokens=* skip=1" %%b in (%%i) do ( echo %%b>>result.csv ) ) pause
@echo off for /f %%i in ('dir /b /s *.csv') do ( echo %%i type %%i>>result.csv ) pause
以下を試す。
ファイルの中身がUTF-8の場合、バッチファイルの最初に chcp 65001
など文字コード指定を付ければ基本は行けると思う。
だが、バッチファイルはSJIS以外の取り回しで変な挙動が多い。
たとえば「最初のファイルのみ1行目を出力」で、ファイルがUTF-8で、最初の1行の末尾文字が日本語文字だった場合、最初の1行を読み込むところで何故か2行目まで含めて読み込まれてしまう。
file1.csv file2.csv file3.csv あ,い,う あ,い,う あ,い,う 1,2,3 4,5,6 7,8,9 ↓ result.csv あ,い,う 1,2,3 1,2,3 4,5,6 7,8,9
だが「う」を「う1」にするなど半角文字を付ければ上手くいったりする。
その辺上手く書く方法があるのかも知れないが、このような罠がバッチファイルは結構あるので、なるべくSJISで扱いたい。
またはPowerShellでやると上手くいくかも?