前提
とあるCSVファイルを処理するプログラムの制約により、データを100件ずつ分割しなければならなくなりました。
先頭3行はヘッダーとして認識されるため、分割ファイルそれぞれに同じヘッダーが必要です。
バッチにしました
適当にコピーしてお使いください。一応設定方法を下に載せます。エラー処理は適宜追加してください。
split.bat
@echo off
setLocal EnableDelayedExpansion
goto :begin
Text File Splitter
------------------------------
USAGE: Check Settings section before running.
:begin
Rem ------------------------------
Rem Settings ...
Rem ------------------------------
Rem ------------------------------
Rem Original file information
Rem ------------------------------
set limit=100
set file="元のファイル.csv"
set numOfHeader=3
Rem Note: output will have (limit + numOfHeader) lines.
Rem ------------------------------
Rem Output file information
Rem ------------------------------
set name=出力ファイル名_
set extension=.csv
set zeroPadding=2
Rem ------------------------------
Rem Start process ...
Rem ------------------------------
set lineCounter=1
set filenameCounter=1
set header=
set NLM=^
rem Two empty lines are required here
if !numOfHeader! gtr 0 (
set headerCounter=1
for /f "tokens=* delims=: eol= usebackq" %%G in (%file%) do (
if !numOfHeader! geq !headerCounter! (
if !headerCounter! equ 1 (
set header=%%G
) else (
set header=!header!!NLM!%%G
)
set /a headerCounter=!headerCounter! + 1
)
if !headerCounter! gtr !numOfHeader! (
goto :next
)
)
)
:next
for /f "tokens=* delims=: eol= usebackq" %%a in (%file%) do (
set fileNum=00000000000!filenameCounter!
set fileNum=!fileNum:~-%zeroPadding%!
set splitFile=!name!!fileNum!!extension!
if !lineCounter! equ 1 (
echo Creating !splitFile! ...
)
if !numOfHeader! gtr 0 (
if !filenameCounter! gtr 1 (
if !lineCounter! equ 1 (
echo:!header!>> !splitFile!
)
)
)
echo %%a>> !splitFile!
set /a lineCounter=!lineCounter! + 1
if !filenameCounter! equ 1 (
set /a actualLimit=!limit! + !numOfHeader!
if !lineCounter! gtr !actualLimit! (
set /a filenameCounter=!filenameCounter! + 1
set lineCounter=1
)
) else (
if !lineCounter! gtr !limit! (
set /a filenameCounter=!filenameCounter! + 1
set lineCounter=1
)
)
)
pause
設定
set limit=100
- 何行ごとにファイルを分けるか指定します。
set file="元のファイル.csv"
- 分割を行うテキストファイル名を指定します。バッチファイルから参照できる位置にあることを確認してください。
set numOfHeader=3
- 先頭何行をヘッダーとして扱うか指定します。ヘッダーなしなら0です。実際の分割ファイルの行数は、
limit + numOfHeader
になります。 set name=出力ファイル名_
- 出力ファイル名のモトを指定します。この後ろに連番がつきます。
set extension=.csv
- 出力ファイルの拡張子を指定します。
set zeroPadding=2
- 出力ファイルにつける連番の桁を指定します。連番はゼロ埋めしますが、あまり賢くないので桁数がべらぼうに大きくなる場合はバッチを修正してください。