タイトル行がある複数のCSVファイル(UTF-8)をまとめて、一つのCSVファイルにまとめるバッチファイルです。
以下コード
-------------------------------------------------------------------------
@echo off
setlocal enabledelayedexpansion
setlocal enabledelayedexpansion
rem "CSVファイルがUTF-8の場合は65001で指定"
chcp 65001
pushd %~dp0
set /a first_flg=0
set FILE_NAME="result.csv"
for /f %%a in ('dir /b *.csv') do (
echo %%a
if !first_flg! == 0 (
for /f %%b in (%%a) do echo %%b>>"!FILE_NAME!"
set /a first_flg=1
) else (
for /f "skip=1" %%b in (%%a) do echo %%b>>"!FILE_NAME!"
)
)
pause
endlocal
pushd %~dp0
set /a first_flg=0
set FILE_NAME="result.csv"
for /f %%a in ('dir /b *.csv') do (
echo %%a
if !first_flg! == 0 (
for /f %%b in (%%a) do echo %%b>>"!FILE_NAME!"
set /a first_flg=1
) else (
for /f "skip=1" %%b in (%%a) do echo %%b>>"!FILE_NAME!"
)
)
pause
endlocal
-------------------------------------------------------------------------
ネットで調べてると以下の形のコードをチラホラ見かけるんですが、
-------------------------------------------------------------------------
@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
-------------------------------------------------------------------------
これでも出来るんですけど、タイトル行が長いと途中で切れてしまったんですよね。
set /p _head=<%%i で取得する際に長さの制限がある・・・のかな?
原因は不明なんですが、とりあえずforで取得した場合は途切れなかったのでそれで必ずやるようにした感じです。
よかったら使ってみてくださいませ。
0 件のコメント:
コメントを投稿