0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

windows環境で、大きなCSVファイルを分割するバッチです。

Posted at

これは何?

ほとんどニーズはなさそうですが、CSVファイルが大きすぎてあるシステムの入力許容サイズを超えてしまうことがあり、分割するバッチを作成しましたので、同じニーズもあるかもしれないので、共有します。
linuxなどではもっと簡単にできると思いますが、windows環境だと、VBAに頼るしかなさそうで、それよりこっちの方が手っ取り早いと思います。

なお、windowsでは、バッチだけでファイルを分割するのは難しいため、Powershellを併用しています。
ただし、扱いやすくしたかったので、1つのバッチファイルにPowershellコマンドとして埋め込んでます。
無理やり埋め込んだために、Powershell部分が読みにくくなっていますが、ご容赦ください。

動作環境

Powershellさえ動けば使えますので、「CSVファイルを小さく分割したい」という奇特な方がいればご利用ください。

仕様

ファイル名は、分割元のファイルと同じディレクトリに、元のファイル名に「-1」など連番をつけて保存します。
もし、同じファイル名があれば上書きします。

なおCSVファイルなので、元ファイルの1行目にヘッダがあります。
分割しても各ファイルにヘッダをつけるようにしています。まー、これとバッチファイルだけで動くようにしたという2点だけが工夫点です。
また、デフォルトは10万行で分割していますが、自由に変更ください。(テストはしてませんが、パラメータでの指定も可能なはずです。)

注意

最後にお約束ですが、日本語環境のwindowsバッチなので、このバッチは必ずshift-JISで保存してください。

ファイル分割.bat
@echo off
chcp 932 >nul

set "source_file=%1"
set devide=%2

if "%devide%"=="" set devide=100000

set "pn=%~dpn1"
set "sf=%~1"

if "%pn%"=="" (
  cls
  echo.
  echo  使い方「%0 ファイルパス [分割数]echo.
  echo  このバッチは、大きなCSVファイルを指定した行数に分割するためのバッチです。
  echo.
  echo 第2パラメータとして「分割数」を指定しなければ10万行に分割します。
  echo なお、CSVの分割を想定しているため、1行目は全ファイルに付加します
  goto :end
)

rem echo PN=%pn%
echo sf=%sf%%devide%ごとに分割して、同じフォルダにファイル名を「-1」など連番を付けて保存します。
echo すでに同盟のファイルがあった場合は、上書きしますのでご注意ください。
echo.

powershell -NoProfile -Command "$i = 1; $chunkSize = %devide%; $filePath = '%SF%'; $header = Get-Content -Path $filePath -Encoding Oem -TotalCount 1; $lines = Get-Content -Path $filePath -Encoding Oem | Select-Object -Skip 1; for ($j = 0; $j -lt $lines.Count; $j += $chunkSize) { $outputPath = '%pn%-' + $i + '.txt'; Set-Content -Path $outputPath -Value $header -Encoding Oem; Add-Content -Path $outputPath -Value ($lines[$j..[Math]::Min($j + $chunkSize - 1, $lines.Count - 1)]) -Encoding Oem; $i++ }"

echo お待たせしました。分割完了しました。

:end
pause
exit

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?