Add-Contentの使い方:ファイルに内容を追記する

広告

Add-Content コマンドレットを使用すると、ファイルに内容を追記することができます。既存のファイルに対して実行した場合は、すでにある内容の末尾に追加されます。存在しないファイルに対して実行した場合は、新しいファイルが作成されます。ここでは PowerShell における Add-Content コマンドレットの使い方について解説します。

Add-Contentコマンドレットの書式

Add-Content コマンドレットは、ファイルに内容を追記するためのコマンドレットです。 Add-Content コマンドレットの書式は次の通りです。

Add-Content
  [-Path] <string[]>
  [-Value] <Object[]>
  [-PassThru]
  [-Filter <string>]
  [-Include <string[]>]
  [-Exclude <string[]>]
  [-Force]
  [-Credential <pscredential>]
  [-WhatIf]
  [-Confirm]
  [-NoNewline]
  [-Encoding <Encoding>]
  [-AsByteStream]
  [-Stream <string>]
  [<CommonParameters>]

Add-Content を使ってファイルに内容を追記するには次の書式を使用します。

Add-Content -Path ファイルのパス -Value 書き込む内容

-Path および -Value は省略可能なので、通常は次のように実行します。

Add-Content ファイルのパス 書き込む内容

Add-Content でファイルのパスに既存のファイルを指定した場合、既存のファイルの内容の末尾に追加する形で内容を書き込みます。ファイルのパスに存在しないファイルを指定した場合は、新しいファイルを作成した上で内容を書き込みます。

Add-Content では、内容を書き込んだあと、自動で改行を追加します。

※ 既存の内容を削除して上書きする形で内容を書き込みたい場合は、Set-Content コマンドレットを使用してください。

既存のファイルに内容を追記する

それでは、実際に試してみます。最初の既存のファイル c:\tmp\file\memo.txt に新しい内容を追記してみます。現在このファイルに保存されている内容を Get-Content を使って表示してみます。

Get-Content c:\tmp\file\memo.txt

c:\tmp\file\memo.txt の内容が画面に表示されます。

PS C:\code\powershell> Get-Content c:\tmp\file\memo.txt
SmartPhone
Mouse

Add-Content を使ってこのファイルに新しい内容を追記します。次のように実行してください。

Add-Content c:\tmp\file\memo.txt "NotePC"

画面上には何も表示されません(正常にファイルの書き込みが行われています)。

Add-Contentコマンドレットの使い方(1)

あらためて c:\tmp\file\memo.txt の内容を確認します。

Get-Content c:\tmp\file\memo.txt

元々ファイルにあった内容に追加する形で新しい内容が書き込まれていることが確認できます。

PS C:\code\powershell> Get-Content c:\tmp\file\memo.txt
SmartPhone
Mouse
NotePC

なお、今回は 1 行だけを書き込みましたが、複数の行を書き込む方法については、のちほど解説します。

ファイルを新しく作成し内容を書き込む

次に存在しないファイルのパスを指定した場合です。この場合は新しいファイルを作成した上で、内容を書き込みます。現在対象のディレクトリに含まれるファイルの一覧を Get-ChildItem を使って表示してみます。

Get-ChildItem c:\tmp\file

現在 c:\tmp\file ディレクトリには memo.txt というファイルがあるだけです。

PS C:\code\powershell> Get-ChildItem c:\tmp\file

    Directory: C:\tmp\file

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          2026/04/19    22:06             27 memo.txt

Add-Content を使って現在は存在しない c:\tmp\file\address.txt に新しい内容を書き込みます。次のように実行してください。

Add-Content c:\tmp\file\address.txt "Okinawa, Japan"

画面上には何も表示されません(正常にファイルの作成、および書き込みが行われています)。

Add-Contentコマンドレットの使い方(2)

あらためて c:\tmp\file ディレクトリに含まれるファイルの一覧を確認します。

Get-ChildItem c:\tmp\file

対象のディレクトリに新しいファイル address.txt が作成されていることが確認できます。

PS C:\code\powershell> Get-ChildItem c:\tmp\file

    Directory: C:\tmp\file

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          2026/04/19    22:09             16 address.txt
-a---          2026/04/19    22:06             27 memo.txt

それでは Get-Content を使って c:\tmp\file\address.txt の内容を確認します。

Get-Content c:\tmp\file\address.txt

新しく作成したファイルに書き込んだ内容が保存されていることが確認できます。

PS C:\code\powershell> Get-Content c:\tmp\file\address.txt
Okinawa, Japan

複数行のデータを追記する

Add-Content を使ってファイルにデータを追記するとき、 1 行だけでなく複数行のデータを追記することができます。方法として、文字列の配列を使用する方法と、ヒアドキュメントを使用する方法があります。

文字列の配列を使用する

文字列の配列を使用する場合は、Add-Content-Value オプションの値として文字列の配列を指定します。

Add-Content ファイルのパス @("1行目", "2行目", "3行目")

次のように単にカンマ(,)で区切るだけでも配列として扱われます。

Add-Content ファイルのパス "1行目", "2行目", "3行目"

PowerShell スクリプトであれば、事前に変数に格納した文字列の配列を指定することもできます。(改行が要素の区切りとして使用できるので、カンマは書いても書かなくても構いません)。

$data = @(
  "1行目"
  "2行目"
  "3行目"
)

Add-Content ファイルのパス $data

配列を指定した場合、各要素が 1 行ずつファイルに書き込まれるため、結果として複数行のデータになります。

それでは実際に試してみます。既存のファイル c:\tmp\file\memo.txt に新しい内容を追記します。現在このファイルに保存されている内容を Get-Content を使って表示してみます。

Get-Content c:\tmp\file\memo.txt

c:\tmp\file\memo.txt の内容が画面に表示されます。

PS C:\code\powershell> Get-Content c:\tmp\file\memo.txt
Tokyo
Osaka

3 行のデータを追記します。次のように実行してください。

Add-Content c:\tmp\file\memo.txt "Aichi", "Miyazaki", "Nara"

画面上には何も表示されません(正常にファイルの書き込みが行われています)。

Add-Contentコマンドレットの使い方(3)

あらためて c:\tmp\file\memo.txt の内容を確認します。

Get-Content c:\tmp\file\memo.txt

3 行のデータが書き込まれているのが確認できます。

PS C:\code\powershell> Get-Content c:\tmp\file\memo.txt
Tokyo
Osaka
Aichi
Miyazaki
Nara

ヒアドキュメントを使用する

ヒアドキュメントとは、複数行の文字列を定義する方法です。 PowerShell では @""@ で囲んだ範囲がヒアドキュメントとなります。改行やスペースもそのまま保持されます。

$text = @"
1行目
2行目
3行目
"@

※ ヒアドキュメントでは @" の直後は改行する必要があります。また、終了の "@ は行頭に記述する必要があります。

それでは実際に試してみます。今回は存在しないファイルに対して複数行のデータを書き込みます。次のように実行してください。

Add-Content c:\tmp\file\animal.txt @"
Dog
Cat
Bird
"@

画面上には何も表示されません(正常にファイルの書き込みが行われています)。

Add-Contentコマンドレットの使い方(4)

c:\tmp\file\animal.txt の内容を確認します。

Get-Content c:\tmp\file\animal.txt

新しいファイルが作成されて、 3 行のデータが書き込まれているのが確認できます。

PS C:\code\powershell> Get-Content c:\tmp\file\animal.txt
Dog
Cat
Bird

文字列の中に改行を追加する

1 行の文字列の中に改行(`n)を追加することで、結果として複数行のデータにすることもできます。(Windows 環境でも `n で問題ありませんが、もしうまく改行されない場合は `r`n を使用してください)。

Add-Content c:\tmp\file\animal.txt "Dog`nCat`nBird"

文字列の中に改行が 2 つ入っているので、 3 行のデータとなります。

改行せずに追記する

Add-Content では、一回追記するごとに自動的に末尾に改行を追加します。そのため、連続で追記を行うと、それぞれ異なる行に追記されます。

次のような PowerShell スクリプトで試してみます。

Add-Content c:\tmp\file\color.txt "Blue"
Add-Content c:\tmp\file\color.txt "Red"
Add-Content c:\tmp\file\color.txt "Yellow"

実行したあとで c:\tmp\file\color.txt の内容を確認します。

Get-Content c:\tmp\file\color.txt

Add-Content を 1 回実行する毎に、自動的に改行されていることが確認できます。

PS C:\code\powershell> Get-Content c:\tmp\file\color.txt
Blue
Red
Yellow

Add-Content を実行したあとに、自動的に末尾に改行が追加されないようにするには -NoNewline オプションを使用します。

Add-Content ファイルのパス 書き込む内容 -NoNewline

-NoNewline オプションが使用されていると、連続で追記を行った場合に、直前に追記された内容の直後に続けて書き込まれます。

次のような PowerShell スクリプトで試してみます。

Add-Content c:\tmp\file\color.txt "Blue" -NoNewline
Add-Content c:\tmp\file\color.txt "Red" -NoNewline
Add-Content c:\tmp\file\color.txt "Yellow"

実行したあとで c:\tmp\file\color.txt の内容を確認します。

Get-Content c:\tmp\file\color.txt

Add-Content を実行しても、改行が追加されないために同じ行に続けて追記されていることが確認できます。(最後の Add-Content では -NoNewline を指定していないため、改行が追加されています。)。

PS C:\code\powershell> Get-Content c:\tmp\file\color.txt
BlueRedYellow

繰り返し処理の中で、改行せずに続けて追記を行いたい場合などに使用します。

なお Add-Content で配列のデータを追記する場合に、 -NoNewline オプションを使用すると、配列の各要素を改行せずに追記します。

それでは次のように実行してください。

Add-Content c:\tmp\file\pref.txt "Aichi", "Miyazaki", "Nara" -NoNewline

実行したあとで c:\tmp\file\pref.txt の内容を確認します。

Get-Content c:\tmp\file\pref.txt

配列の各要素が区切りなしで同じ行に続けて追記されていることが確認できます。

PS C:\code\powershell> Get-Content c:\tmp\file\pref.txt
AichiMiyazakiNara

ヒアドキュメントや文字列内に改行(`n)を含めている場合は、出力するデータ自体に改行が含まれているため、 -NoNewline オプションを付けてもその改行には影響しません。

ファイルの文字コードを指定する

Add-Content では、ファイルにデータを書き込む際に、既定の文字コードでデータが書き込まれます。 PowerShell 7 では既定の文字コードは UTF-8(BOMなし) です。

UTF-8(BOMなし) 以外の文字コードでファイルを保存するには -Encoding オプションを使用します。

Add-Content ファイルのパス 書き込む内容 -Encoding 文字コード

文字コードとして指定できる値は次の通りです。デフォルトの値は utf8NoBOM です。

ascii
ansi
bigendianunicode
bigendianutf32
oem
unicode
utf7
utf8
utf8BOM
utf8NoBOM
utf32

utf7 は非推奨です。

また登録済みのコードページの数値を指定したり(-Encoding 932 など)、登録されたコードページの文字列名(-Encoding Shift_JIS など) も使用できます。

ansi を指定した場合は、現在の Windows のシステムロケールに対応した ANSI コードページが使用されます。日本語環境では通常、コードページ 932(Shift_JIS)が使用されます。そのため、 Shift_JIS でファイルを保存する場合は -Encoding オプションの値として ansi を指定するか、コードページの数値である 932 を指定してください。

Add-Content の場合、既存の内容に追記となるため文字コードを設定する場合は注意が必要です。例えば対象のファイルが元々 UTF-8 で保存されている場合に、 Shift_JIS を指定してデータを追記すると、元々ファイルにあったデータか、追記したデータのどちらかが文字化けします。これは、ファイル内で異なる文字コードのデータが混在してしまうためです。

Set-Content の場合はファイル全体を新しく書き直すため、このような文字コードの混在による問題は発生しませんが、 Add-Content の場合は注意が必要です。

それでは実際に試してみます。最初に Shift_JIS を使って保存されている既存のファイルに対して、文字コードとして Shift_JIS を指定して追記してみます。

Add-Content c:\tmp\file\memo.txt "ベルーガ" -Encoding 932

画面上には何も表示されません(正常にファイルの書き込みが行われています)。

Add-Contentコマンドレットの使い方(5)

書き込んだファイルをテキストエディタで開いてみると、データが追記されていることが確認できます。

Add-Contentコマンドレットの使い方(6)

なお Shift_JIS で保存されているファイルに対して、文字コードとして UTF-8 を指定して追記してみます。

Add-Content c:\tmp\file\memo.txt "ペンギン" -Encoding utf8

今回は追記したデータの方が文字化けしました。

Add-Contentコマンドレットの使い方(7)

このように異なる文字コードを使って追記した場合、元々ファイルにあったデータか、追記したデータのどちらかが文字化けしてしまいます。追記を行う場合は、既存のファイルと同じ文字コードを指定するようにしてください。

読み取り専用のファイルに追記する

Add-Content では読み取り専用になっているファイルに対して追記することはできません。

実際に読み取り専用のファイルに追記すると、次のようなエラーが表示されます。

PS C:\code\powershell> Add-Content c:\tmp\file\memo.txt "Green"
Add-Content: Access to the path 'C:\tmp\file\memo.txt' is denied.

読み取り専用のファイルに追記するには、 -Force オプションを使用します。

Add-Content ファイルのパス 書き込む内容 -Force

-Force オプションを使用すると、読み取り専用となっているファイルの属性を一時的に無視して追記することができます。

それでは実際に試してみます。次のように実行してください。

Add-Content c:\tmp\file\memo.txt "Green" -Force

画面上には何も表示されません(正常にファイルの書き込みが行われています)。

Add-Contentコマンドレットの使い方(8)

Get-Content を使って c:\tmp\file\memo.txt の内容を確認します。

Get-Content c:\tmp\file\memo.txt

Add-Content を使ってデータが追記されていることが確認できます。

Add-Contentコマンドレットの使い方(9)

なお読み取り専用のファイルに Add-Content を使って追記したあとも、対象のファイルは読み取り専用のままとなっており、属性は変更されません。

追記する前に確認する

Add-Content を使って追記を行う場合に、 -Confirm オプションを使用すると、ファイルに追記を行う前に確認メッセージを表示することができます。

Add-Content ファイルのパス 書き込む内容 -Confirm

重要なファイルに対して追記を行う場合や、読み取り専用ファイルに対して -Force オプションを使って強制的に追記を行う場合などに利用するとより安全になります。

それでは実際に試してみます。次のように実行してください。

Add-Content c:\tmp\file\memo.txt "サッカー" -Confirm

次のような確認メッセージが表示されます。

PS C:\code\powershell> Add-Content c:\tmp\file\memo.txt "サッカー" -Confirm

Confirm
Are you sure you want to perform this action?
Performing the operation "Add Content" on target "Path:
C:\tmp\file\memo.txt".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

Add Content を行うかどうかの確認です。行う場合は Y 、行わない場合は N を押してから Enter キーを押してください。

今回は Y を押してから Enter キーを押しました。

ファイルへの追記が完了しました。

Add-Contentコマンドレットの使い方(10)

このように Add-Content-Confirm オプションを使用する場合には、既存の内容を削除せずに追記のみを行うため、確認は 1 回だけ行われます。

-- --

PowerShell における Add-Content コマンドレットの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。