Set-Contentの使い方:ファイルの内容を上書きする
Set-Content コマンドレットを使用すると、ファイルに内容を書き込むことができます。既存のファイルに対して実行した場合は新しい内容で上書きされます。また存在しないファイルに対して実行した場合は新しいファイルが作成されます。上書きした場合は元の内容はすべて失われるため注意してください。ここでは PowerShell における Set-Content コマンドレットの使い方について解説します。
Set-Contentコマンドレットの書式
Set-Content コマンドレットは、ファイルに内容を書き込むためのコマンドレットです。 Set-Content コマンドレットの書式は次の通りです。
Set-Content [-Path] <string[]> [-Value] <Object[]> [-PassThru] [-Filter <string>] [-Include <string[]>] [-Exclude <string[]>] [-Force] [-Credential <pscredential>] [-WhatIf] [-Confirm] [-NoNewline] [-Encoding <Encoding>] [-AsByteStream] [-Stream <string>] [<CommonParameters>]
Set-Content を使ってファイルに内容を書き込むには次の書式を使用します。
Set-Content -Path ファイルのパス -Value 書き込む内容
-Path および -Value は省略可能なので、通常は次のように実行します。
Set-Content ファイルのパス 書き込む内容
Set-Content でファイルのパスに既存のファイルを指定した場合、既存のファイルの内容を空にした上で内容を書き込みます。もともとファイルに入っていた内容はすべて失われ、元に戻すことはできないため注意が必要です。ファイルのパスに存在しないファイルを指定した場合は、新しいファイルを作成した上で内容を書き込みます。
※ 既存の内容を残したまま追加で内容を書き込みたい場合は、Add-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
Set-Content を使ってこのファイルに新しい内容を書き込みます。次のように実行してください。
Set-Content c:\tmp\file\memo.txt "NotePC"
画面上には何も表示されません(正常にファイルの書き込みが行われています)。
あらためて c:\tmp\file\memo.txt の内容を確認します。
Get-Content c:\tmp\file\memo.txt
元々ファイルにあった内容が消えており、新しく書き込んだ内容だけになっていることが確認できます。
PS C:\code\powershell> Get-Content c:\tmp\file\memo.txt 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 5:28 8 memo.txt
Set-Content を使って現在は存在しない c:\tmp\file\address.txt に新しい内容を書き込みます。次のように実行してください。
Set-Content c:\tmp\file\address.txt "Tokyo, Japan"
画面上には何も表示されません(正常にファイルの作成、および書き込みが行われています)。
あらためて 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 5:38 14 address.txt
-a--- 2026/04/19 5:28 8 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 Tokyo, Japan
複数行のデータを書き込む
Set-Content を使ってファイルにデータを書き込むとき、 1 行だけでなく複数行のデータを書き込むことができます。方法として、文字列の配列を使用する方法と、ヒアドキュメントを使用する方法があります。
文字列の配列を使用する
文字列の配列を使用する場合は、Set-Content の -Value オプションの値として文字列の配列を指定します。
Set-Content ファイルのパス @("1行目", "2行目", "3行目")
次のように単にカンマ(,)で区切るだけでも配列として扱われます。
Set-Content ファイルのパス "1行目", "2行目", "3行目"
PowerShell スクリプトであれば、事前に変数に格納した文字列の配列を指定することもできます。(改行が要素の区切りとして使用できるので、カンマは書いても書かなくても構いません)。
$data = @( "1行目" "2行目" "3行目" ) Set-Content ファイルのパス $data
配列を指定した場合、各要素が 1 行ずつファイルに書き込まれるため、結果として複数行のデータになります。
それでは実際に試してみます。次のように実行してください。
Set-Content c:\tmp\file\memo.txt "Tokyo", "Osaka", "Hokkaido"
画面上には何も表示されません(正常にファイルの書き込みが行われています)。
c:\tmp\file\memo.txt の内容を確認します。
Get-Content c:\tmp\file\memo.txt
3 行のデータが書き込まれているのが確認できます。
ヒアドキュメントを使用する
ヒアドキュメントとは、複数行の文字列を定義する方法です。 PowerShell では @" と "@ で囲んだ範囲がヒアドキュメントとなります。改行やスペースもそのまま保持されます。
$text = @" 1行目 2行目 3行目 "@
※ ヒアドキュメントでは @" の直後は改行する必要があります。また、終了の "@ は行頭に記述する必要があります。
それでは実際に試してみます。次のように実行してください。
Set-Content c:\tmp\file\memo.txt @" Dog Cat Bird "@
画面上には何も表示されません(正常にファイルの書き込みが行われています)。
c:\tmp\file\memo.txt の内容を確認します。
Get-Content c:\tmp\file\memo.txt
3 行のデータが書き込まれているのが確認できます。
文字列の中に改行を追加する
1 行の文字列の中に改行(`n)を追加することで、結果として複数行のデータにすることもできます。(Windows 環境でも `n で問題ありませんが、もしうまく改行されない場合は `r`n を使用してください)。
Set-Content c:\tmp\file\animal.txt "Dog`nCat`nBird"
文字列の中に改行が 2 つ入っているので、 3 行のデータとなります。
ファイルの文字コードを指定する
Set-Content では、ファイルにデータを書き込んだあと、既定の文字コードでファイルが保存されます。 PowerShell 7 では既定の文字コードは UTF-8(BOMなし) です。
UTF-8(BOMなし) 以外の文字コードでファイルを保存するには -Encoding オプションを使用します。
Set-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 を指定してください。
それでは実際に試してみます。既存のファイルに書き込んだあと、 Shift_JIS でファイルを保存してみます。
Set-Content c:\tmp\file\memo.txt "花言葉" -Encoding ansi
画面上には何も表示されません(正常にファイルの書き込みが行われています)。
書き込んだファイルをテキストエディタで開いてみると、 Shift_JIS でファイルが保存されていることが確認できます。
同じファイルに書き込んだあと、今度は UTF-8 でファイルを保存してみます。
Set-Content c:\tmp\file\memo.txt "水芭蕉" -Encoding utf8
※ utf8 は PowerShell 7 では utf8NoBOM と同じ UTF-8(BOMなし) です。
画面上には何も表示されません(正常にファイルの書き込みが行われています)。
書き込んだファイルをテキストエディタで開いてみると、 UTF-8 でファイルが保存されていることが確認できます。
読み取り専用のファイルに書き込む
Set-Content では読み取り専用になっているファイルに対して書き込みをすることはできません。
実際に読み取り専用のファイルに書き込みを行うと、次のようなエラーが表示されます。
PS C:\code\powershell> Set-Content c:\tmp\file\memo.txt "Water"
Set-Content: Access to the path 'C:\tmp\file\memo.txt' is denied.
読み取り専用のファイルに書き込みを行うには、 -Force オプションを使用します。
Set-Content ファイルのパス 書き込む内容 -Force
-Force オプションを使用すると、読み取り専用となっているファイルの属性を一時的に無視して書き込みを行うことができます。
それでは実際に試してみます。次のように実行してください。
Set-Content c:\tmp\file\memo.txt "Water" -Force
画面上には何も表示されません(正常にファイルの書き込みが行われています)。
Get-Content を使って c:\tmp\file\memo.txt の内容を確認します。
Get-Content c:\tmp\file\memo.txt
Set-Content を使って書き込んだ内容が表示されました。
なお読み取り専用のファイルに Set-Content を使って書き込んだあとも、対象のファイルは読み取り専用のままとなっており、属性は変更されません。
書き込む前に確認する
Set-Content を使用すると、確認などは行われずにファイルの上書きが行われるため、既存の内容は完全に消去されて元に戻すことができません。
-Confirm オプションを使用すると、ファイルに書き込みを行う前に確認メッセージを表示することができます。
Set-Content ファイルのパス 書き込む内容 -Confirm
重要なファイルに対して書き込みを行う場合や、読み取り専用ファイルに対して -Force オプションを使って強制書き込みを行う場合などの利用するとより安全になります。
それでは実際に試してみます。次のように実行してください。
Set-Content c:\tmp\file\memo.txt "東京都" -Confirm
次のような確認メッセージが表示されます。
PS C:\code\powershell> Set-Content c:\tmp\file\memo.txt "東京都" -Confirm Confirm Are you sure you want to perform this action? Performing the operation "Set 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"):
Set Content を行うかどうかの確認です。行う場合は Y 、行わない場合は N を押してから Enter キーを押してください。
今回は Y を押してから Enter キーを押しました。するともう一度確認メッセージが表示されます。
PS C:\code\powershell> Set-Content c:\tmp\file\memo.txt "東京都" -Confirm Confirm Are you sure you want to perform this action? Performing the operation "Set 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"):y Confirm Are you sure you want to perform this action? Performing the operation "Clear Content" on target "Item: C:\tmp\file\memo.txt". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
今度は Clear Content を行うかどうかの確認です。行う場合は Y 、行わない場合は N を押してから Enter キーを押してください。
今回は Y を押してから Enter キーを押しました。(ここで N を押すと、既存のファイルの内容が消去されずに追加で書き込みが行われました。すべての環境で同様の結果となるかは分からないです)。
ファイルへの書き込みが完了しました。
このように Set-Content で -Confirm オプションを使用する場合には、書き込みを行うかどうかと既存の内容を消去するかどうかの 2 回確認が行われます。なお最初の確認メッセージが表示されたときに A を押すと、自動的にそれ以降の確認メッセージも Y を押したことになるため、 2 回目以降の確認メッセージは表示されなくなります。
-- --
PowerShell における Set-Content コマンドレットの使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。