仕事などで、システムの売上データとか、トランザクションデータとか、データ処理などで大量のCSVファイルやTXTファイルを1つのファイルにまとめたい…ということありますよね。
1回1回ファイルを開いてコピー&ペーストとか大変ですし、面倒過ぎます。
結合するフリーソフトなどもありますが、Windowsのコマンドを使えば簡単に大量の数百のCSVファイルでも一つのファイルに結合できることを知り、「なんだこんなに簡単だったのか」と思いました。
今回はCSVやTSV、TXTなどのファイルを簡単に1つのファイルを結合してまとめる方法をご紹介します。Windowsのコマンドを使いますが、より簡単にできるバッチファイルを作る方法から解説していきますので、ご参考になれば!
複数のファイルを1つのファイルに結合、まとめるには
今回ご紹介する方法で、複数のファイルを1つのファイルに結合できるのは、CSV(カンマ区切り)、TSV(タブ区切り)、TXT(テキスト)ファイルになります。
Excelファイルで同じことをやろうとしてもこの方法は使えませんのでご注意ください。
今回は2種類のやり方を解説しています。
- バッチファイル(*.bat)を作って結合する方法
- Windowsのコマンドプロンプトを使い結合する方法
結合用のバッチファイル(*.bat)を作る方が簡単だったので、そちらからご紹介していきます。
CSVファイル結合前の準備
とりあえずやっておく事として、同じフォルダに結合したいCSVファイルたちを入れておいてください。
どこのフォルダでも大丈夫です。
そしてサブフォルダとして、空の「all」を作っておきます。このサブフォルダには何もいれないでください。
バッチファイル(*.bat)を作ってCSVファイルを結合する方法
バッチファイル(*.bat)とは
バッチファイルとは拡張子が*.batのファイルに、ファイル結合の命令を書いておいて、実行させるやり方になります。
ウィキペディア的ではこのように説明されています。
バッチファイルを実行すると、シェルプログラム(一般に COMMAND.COM や cmd.exe )がそのファイルを読み、その中のコマンドを(通常)一行ずつ実行する。 バッチファイルはUNIX系オペレーティングシステムのシェルスクリプトに相当する。 DOSのバッチファイルの拡張子は . BAT である。バッチファイル-Wikipedia
結合するCSVをまとめたらバッチファイルにコマンドを入力する
結合したいCSVファイルたちを同一フォルダにまとめたら、バッチファイルを作ります。
Windowsのメモ帳やテキストエディタなどを起動します。
そこに以下のようにコマンドを入力します。
copy *.csv all¥merge.csv
※一文字でも違うと機能しませんのでご注意ください。
このコマンド(命令文)の意味は、同フォルダ内のCSVファイル全てを「all」サブフォルダの中の「merge.csv」に結合するという命令になっています。
copy (CSV複数ファイル選択)→ (結合したいファイル名と場所)
なお、結合していく順番はファイル名順になります。201601~201612のファイル名でしたら、201601から順にファイルを読みデータをまとめていきます。
結合する書き出し用のファイル名(例ならmerge.csv)は変更しても大丈夫ですが、同一フォルダには絶対置かないようにしてください。じゃないと、そのまとめたファイルも読み出してしまいデータが重複してしまいます。
バッチファイルにコマンドを入力したら保存
バッチファイルの名前は、merge.batなど、何でもいいのですが、拡張子をbatにして保存します。
batファイルを作成すると、こんな感じのアイコンになります。(Windows10の場合です)
実行はダブルクリック
実行するには、merge.batをダブルクリックするだけです。
ダブルクリックすると、コマンドが実行され、「all」フォルダの中にmerge.csvというファイルが出来上がっているはずです。
Windowsのコマンドプロンプトから結合する方法
バッチファイルを作ってやるほうがわかりやすいのでおすすめですが、コマンドプロンプトを使ってやる方法もご紹介しておきます。私も最初はこちらのやり方でやっていました。
コマンドプロンプトを起動
コマンドプロンプトは左下のアプリを探す入力バーに「cmd」と入力するか、
Windowsシステムツールの中にありますので、そこから起動します。
次に、CSVファイルが置いてあるフォルダまで移動します。
ファイルは、できればわかりやすい場所に置いておく方が良いです。
例では、Dドライブのtemp01フォルダにいれていますので、そこまで移動します。
CドライブからDドライブに変更するには「d:」と入力します。
cd d:\とか入れても一向に移動できませんので注意です。(中途半端に知っていると間違います^^;)
Dドライブに移動できたら、
cd temp01
として、CSVファイルが入っているフォルダに移動します。
そして以下のようにコマンドを入力します。
copy *.csv all¥merge.csv
そうすると、以下のようにファイルが結合される処理が実行されます。
まとめたいファイルたちがずらずらっと表示され、最後に「 1個のファイルをコピーしました。」と出れば完了です。
TSV(タブ区切り)を結合する場合
copy *.tsv all¥merge.tsv
TXT(テキストファイル)を結合する場合
copy *.txt all¥merge.txt
TYPEコマンドでファイルを結合する方法
なお、このCOPYコマンドをやる方法はTYPEコマンドを使う事でも同様の処理が可能です。
WindowsのTYPEコマンドはファイルの中身を表示するという命令になりますが、その内容をファイルに書き出しという処理ができます。
TYPEコマンドの場合は、TYPE (まとめたいファイル)> (書き出しファイル)と、「>」をつけるのを忘れずに。
type *.csv > all¥merge.csv
PowerShellで結合する場合
Windows7から標準搭載されたコマンドラインインターフェイスのPowerShell(パワーシェル)というのもありますが、PowerShellの場合は、copyだと上書きされてしまうので、typeに相当するget-contentコマンドレットを使います。
get-content *.csv > all¥merge.csv
エイリアスを使用する
get-contentは長いので、用意されているエイリアス(別名)を使用しても同じ結果となります。typeやcatで代用すると以下のようになります。
type *.csv > all¥merge.csv
cat *.csv > all¥merge.csv
PowerShellの文字コードについて
なお、PowerShellで行うと、出力したファイルの文字コードがUTF-16(UTF-16LE)なので、そのままExcelで開こうとするとセルに読み込めません。(PowerShell 5.1の場合)
テキストエディタなどでShift-JISに変換するか、Excelからインポートで読み込みする必要があります。
面倒なので、PowerShellをわざわざ使う必要はないかなと思いますが、一応追記しておきます。(2019.4.1)
PowerShellもバージョンアップされて、現在PowerShell 7になっています。インストールしてみたところ、出力したファイルの文字コードがUTF-8(BOM無し)に変更されていました。(2020.7.14追記)
ExcelはUTF-8のBOM有りならそのまま読み込めますが、どちらみちエディターで変換しないといけないので手間は一緒ですね^^;
まとめ
大量のCSVファイルやTSVファイルなどを1つのファイルに結合・まとめたい!という時に使えるWindowsコマンドを使うやり方をご紹介しました。
いちいちコピペをするのは大変ですし、どこまでやったっけ?とわからなくなったりもするので、10個以上ある場合にはこちらのやり方覚えると楽ですよ^^
Excel複数ファイルの結合はバイナリファイルになるので今回の方法は使えません。VBAなどで処理する必要があります。