MENU

Windowsのコマンドとバッチでテキストファイルを結合する方法【解説付き】

はじめに

業務システムから出力されるログファイルや、分割して保存されたテキストファイルを1つにまとめたいと思ったことはありませんか?
たとえば、日ごとに出力されるログファイルを1週間分だけまとめて確認したい場合、1ファイルずつ手作業で処理するのは非常に手間がかかります。
私自身も同じようなケースに直面し、「もっと簡単に処理できないか」と調べたところ、Windowsの標準機能(コマンドプロンプト)だけでテキストファイルを結合できることが分かりました。
(この方法は、外部ツールをインストールせずに利用できるため、セキュリティが厳しくてソフトのインストールが制限されている職場環境でも安心して使えます!)
この記事では、Windowscopy コマンドを使って、複数のテキストファイルを1つにまとめる方法を初心者向けにわかりやすく解説します。
さらに、実務で使えるバッチファイルのサンプルも紹介しますので、ぜひ参考にしてください。

1. Windowsの標準機能(コマンドプロンプト)でテキストファイルをまとめるとは?

1.1 テキストファイルを1つにまとめたいシチュエーション

  • 分割されたログファイルを1つにまとめたい
  • CSVなどの出力データを、Excelなどの他システムに連携するために1つにまとめたい
  • ファイルを1つにまとめることで、管理や送付がしやすくなる

このように、ファイルを1つにまとめる機会(理由)は意外と多くあります。
そのたびに手動で対応するのは手間がかかるため、作業を自動化する方法を紹介します。

1.2 Windowscopy コマンドとは

複数のテキストファイルを1つにまとめるには、Windowscopy コマンドが便利です。
copy コマンドといえば「ファイルをコピーする」イメージが強いかもしれませんが、実は複数のファイルを結合する機能も備えています。

2. copy コマンドの使い方

2.1 基本的な使い方

Windowscopy コマンドは、複数のファイルを1つに結合することができます。
その際、 /b オプションを付けることで、バイナリモードとして扱われ、テキストデータが破損するリスクを避けられます。

copy /b file1.txt + file2.txt + file3.txt result.txt
  • file1.txt, file2.txt, file3.txt:結合したいテキストファイル
  • result.txt:結合後に作成されるテキストファイル
  • /b:バイナリモードで結合

たとえば、フォルダ内に以下のようなファイルがあるとします

  • log_20250401.txt
  • log_20250402.txt
  • log_20250403.txt

これらを結合するには、次のように入力します

copy /b log_20250401.txt + log_20250402.txt + log_20250403.txt all_logs.txt

このコマンドを実行すると、3つのファイルの内容が順番に all_logs.txt にまとめられます。

2.2 実際に試した結果

2.2.1 結合するテキストファイル

結合するテキストファイル

2.2.2 結合するテキストファイルの中身

log_20250401.txt

log_20250402.txt

log_20250403.txt

日時が異なるテキストファイルを用意しました。

2.2.3 copy コマンドを実行

実行前

実行後

2.2.4 実行結果

結合されたテキストファイル

結合されたテキストファイルの中身

3つのテキストファイルが結合され、1つのテキストファイルにまとめることができました🎉

2.3 結合時の注意点

  • ファイルは指定した順に結合されます。並び順に注意しましょう。
  • 各ファイルの末尾に改行がない場合、最後の行と次のファイルの1行目がつながってしまうことがあります。
  • 出力ファイル(例:all_logs.txt)が既に存在する場合は上書きされます。事前にバックアップを取りましょう。

3. バッチファイルで自動化する

ここでは、特定のフォルダにあるすべてのテキストファイルを1つのテキストファイルに結合するバッチファイル(merge_txt.bat)を作成する方法をご紹介します。 このバッチを使えば、一瞬でテキストファイルを結合でき、作業の効率化につながります。

3.1 merge_txt.bat の作成手順

以下のコードをメモ帳に貼り付けて、merge_txt.bat という名前で保存してください。

@echo off
chcp 65001 >nul
setlocal

:: 結合したいファイルがあるフォルダのパス
set "TARGET_DIR=C:\merge_txt"

:: 出力ファイル名(結合結果)
set "OUTPUT_FILE=%TARGET_DIR%\merged_result.txt"

:: 出力ファイルが存在する場合は削除
if exist "%OUTPUT_FILE%" del "%OUTPUT_FILE%"

echo 結合を開始します...

:: 対象フォルダ内の *.txt をすべて結合(出力ファイルを除外)
for %%F in ("%TARGET_DIR%\*.txt") do (
    if /I not "%%~fF"=="%OUTPUT_FILE%" (
        echo --- %%~nxF --- >> "%OUTPUT_FILE%"
        type "%%F" >> "%OUTPUT_FILE%"
    )
)

echo 結合が完了しました: %OUTPUT_FILE%
pause
endlocal

copy コマンドを使わないの?」という声が聞こえてきそうですね(汗)

3.2 コードの解説

コード 解説
@echo off 実行中のコマンドを表示しないようにして、画面出力を見やすくします。
chcp 65001 >nul コマンドプロンプト文字コードUTF-8に設定します。日本語の文字化けを防ぐために有効です。>nul は余分な表示を抑えます。
setlocal 以降で定義する変数のスコープをこのバッチファイル内に限定します。実行後に元の環境に戻せる安全な設定です。
set "TARGET_DIR=C:\merge_txt" 結合対象の .txt ファイルが入っているフォルダのパスを指定します。必要に応じて変更可能です。
set "OUTPUT_FILE=%TARGET_DIR%\merged_result.txt" 結合結果を保存するファイルのフルパスを指定します。
if exist "%OUTPUT_FILE%" del "%OUTPUT_FILE%" 既に出力ファイルが存在する場合は、上書き前に削除しておきます。
echo 結合を開始します... 処理の開始を示すメッセージを出力します。
for %%F in ... 指定フォルダ内のすべての .txt ファイルに対してループ処理を行います。
if /I not "%%~fF"=="%OUTPUT_FILE%" ( 出力ファイル自身(merged_result.txt)が対象にならないように除外処理をしています。
echo --- %%~nxF --- >> "%OUTPUT_FILE%" 各ファイルの区切りとして、ファイル名を出力ファイルに書き込みます。
type "%%F" >> "%OUTPUT_FILE%" 各テキストファイルの中身を出力ファイルに追記します。
echo 結合が完了しました: %OUTPUT_FILE% 結合処理の完了を知らせるメッセージを表示します。
pause 処理結果を確認できるよう、ユーザーの入力待ちにします。ウィンドウがすぐ閉じるのを防ぎます。
endlocal setlocal で限定した変数のスコープを終了し、元の環境設定に戻します。

3.3 バッチファイルを実行

3.3.1 バッチファイルと結合するテキストファイル

バッチファイルと結合するテキストファイル

3.3.2 結合するテキストファイルの中身

結合するテキストファイルの中身

「2.2.2 結合するテキストファイルの中身」と同様のテキストファイルを5日分用意しました。

3.3.3 バッチファイルを実行

バッチファイルを実行

3.3.4 実行結果

実行結果

「merged_result.txt」が作成されました。

merged_result.txt

「merged_result.txt」の内容を確認すると、テキストファイルが結合され、1つにまとめることができました!

まとめ

copy コマンドを使えば、Windowsの標準機能(コマンドプロンプト)のみで簡単にファイルを結合することができます。
また、バッチファイルを活用することで、テキストファイルを結合する作業を自動化する方法も紹介しました。
バッチファイルを応用すれば、ファイル名で並び替えてから結合したり、キーワードを含むファイルのみを対象にしたりすることも可能です。ご希望があればコメントを頂けると嬉しいです!
ぜひ、本日紹介した方法を活用し、作業の時短やファイル管理の効率化に役立ててみてください!

こちらもおすすめの記事です。ぜひチェックしてみてください!

■バッチに詳しくなりたい方におすすめの記事■