目次
元となるファイル内容の下に別のファイル内容を追加する
元となるファイル内容の下に別のファイル内容を追加することは簡単です。
これにはいくつかの方法があり、まずは「copy」コマンドを使用する方法です。
元となるファイル「source.txt」が、
であり、この下に追記したい内容が「add.txt」ファイル、
として存在していたとします。
これを結合するには「copy」コマンドと結合の「+」を使って、
1 |
copy [結合したいファイル1]+[結合したいファイル2] [結合後のファイル名] |
とします。
したがって、いまは、
1 |
copy source.txt+add.txt source_add.txt |
とすれば、以下のように内容が結合された「source_add.txt」ファイルを得ることができます。
別の方法として、「for /f」コマンドでファイルから文字列を読み込みファイルに書き出す方法もあります。
「for /f」コマンドで「source.txt」ファイル内の内容を読み込むには、以下に示すバッチファイル(read_filecontents.bat)を作成します。
1 2 3 4 5 |
@echo off for /f "delims=" %%a in (source.txt) do ( echo %%a ) |
「for /f」コマンドによるファイル内の内容読み取りについては詳しくは「ファイルから文字列を読み取る -やりたいこと検索-」をご覧下さい。
以下、実行結果です。ここではまだコマンドプロンプト上への出力となっています。
同様に、「add.txt」についてもファイル内容を読み取り、「source_add2.txt」ファイルへ出力するプログラムは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@echo off rem 既にファイルが存在する場合、削除する if exist source_add2.txt del source_add2.txt rem 「source.txt」の内容を書き出す for /f "delims=" %%a in (source.txt) do ( echo %%a >> source_add2.txt ) rem 「add.txt」の内容を書き出す for /f "delims=" %%a in (add.txt) do ( echo %%a >> source_add2.txt ) |
「for /f」コマンドで2つのファイル内容を順に読み込み、「source_add2.txt」ファイルに書き出しているだけです。
4行目にファイルが既に存在していれば、削除するコマンドを書いていることに注意して下さい。ファイル出力に「>>」を使用しているため、この行がないと前の内容が残ったままになってしまいます。「>」や「>>」コマンドについては、「ファイルへ出力する -やりたいことから検索-」を参照下さい。
ここでは、「copy」コマンドと「for /f」コマンドを使用する二つのファイル内容結合方法を紹介しました。結論として、単純なファイルの結合には「copy」コマンドを使用するのがもっとも簡単です。しかし、少しアレンジを加えたいときなど場合によっては、このように文字列を読み込む方法でないと実現できない操作を存在するのでどちらも重要な知識です。
次節では、「for /f」コマンドを使用した方法でしかできないファイルの結合について紹介します。
元となるファイル内容の途中に別のファイル内容を挿入する
前節では、元となるファイルの下に別のファイル内容を付け足しました。ここでは、元となるファイル内容の途中に別のファイル内容を挿入することを考えます。
元となるファイル内容が、
とある場合、[子の説明]部分に前節の「add.txt」の内容を挿入することを考えます。
これは「for /f」コマンドによるファイル内容の読み込みと「文字列の置換」を組み合わせて実現可能であり、以下がそのバッチファイル(combine_files_between.bat)のプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
@echo off rem 既にファイルが存在すれば削除する if exist source_add_between.txt del source_add_between.txt rem 元となるファイル内容を1行ずつ読んでいく for /f "delims=" %%a in (source_between.txt) do ( if "%%a"=="[子の説明]" ( rem もし指定した文字列が現れれば、そこには挿入したいファイル内容を出力する for /f "delims=" %%b in (add.txt) do ( echo %%b >> source_add_between.txt ) ) else ( rem 指定文字列でなければ、元のファイル内容をそのまま書き出す echo %%a >> source_add_between.txt ) ) |
4行目は前節に述べた同様の理由で古い出力ファイルを削除しています。
7行目からの「for」ブロックで元となるファイル内容を1行ずつ読み込んでいます。
9行目の「if」ブロックでは読み込んだ文字列が、「[子の説明]」であったら「add.txt」ファイル内容を「for」コマンドで出力します(13~15行目)。そうでない場合は読み込んだ内容をそのまま出力しています(19行目)。
以下は実行結果です。
目的通り、元となるファイル内容の間に別のファイル内容を挿入できました。