PowerShellのSet-Contentでファイルに書き込む方法|基本から応用まで解説

Windows

PowerShellでファイル操作をする際、「ファイルに内容を書き込みたい」という場面は非常によくあります。そんな時に使える便利なコマンドが Set-Content です。

この記事では、PowerShellにおける Set-Content の基本的な使い方から、上書き・追記の違い注意すべき落とし穴、さらには応用テクニックまで、初心者にもわかりやすく解説します。

「テキストファイルを生成してレポートを出力したい」
「スクリプト内でログを出力したい」
といったニーズに、すぐに役立つ内容です!

スポンサーリンク

Set-Contentとは?概要と基本構文

Set-Content は、指定したファイルに文字列を上書きするコマンドレットです。

基本構文は以下のとおりです。

Set-Content -Path "C:\Path\to\file.txt" -Value "こんにちは、世界!"

このコマンドを実行すると、file.txt に「こんにちは、世界!」という文字列が書き込まれます。

ファイルが存在しない場合は、新規作成されます。

パラメータの説明

パラメータ説明
-Path書き込み先のファイルパス
-Value書き込む内容
-Encoding使用する文字エンコーディング
-Force読み取り専用ファイルも上書き
-NoNewline末尾の改行を省略

Set-Contentの使い方:よくあるパターン3選

単純な文字列を書き込む

Set-Content "sample.txt" "これはサンプルです"

カンタンにファイルを作成し、テキストを書き込めます。

パラメータ名を省略した簡易記法も使えます(1番目が-Path、2番目が-Value)。

複数行の内容を書き込む

$content = @(
    "1行目のテキスト",
    "2行目のテキスト",
    "3行目のテキスト"
)
Set-Content "multi.txt" $content

このように配列を使うと、複数行のテキストを1行ずつ書き込むことができます。 各要素が自動的に改行されてファイルに書き込まれます。

変数を使って柔軟に出力する

$name = "山田"
$message = "こんにちは、$name さん!"
Set-Content "greeting.txt" $message

変数を組み合わせることで、動的な内容をファイルに出力することも可能です。

日付や計算結果、ユーザー入力などを組み合わせた高度な出力ができます。

Set-Contentの注意点:追記されない!

Set-Content常に「上書き」されます。
つまり、すでにファイルが存在している場合でも、内容はすべて消えて上書きされます。

これは意図しないデータ損失を招く可能性があるため、注意が必要です。

【回避策】追記したいときは Add-Content

Add-Content "sample.txt" "追記内容です"

上書きではなく、ファイルの末尾にテキストを追加したいときは Add-Content を使いましょう。

この方法ならば、既存の内容を残したまま新しい内容を追加できます。

内容を確認してから上書き

重要なファイルを扱う場合、まず内容を確認してからの上書きがおすすめです:

# ファイルの内容を確認
Get-Content "important.txt"

# 確認後に上書き
Set-Content "important.txt" "新しい内容"

エンコーディングの指定:文字化けを防ぐ

Set-Content はデフォルトで UTF-16 LE で書き込まれます(PowerShellのバージョンによって異なる場合があります)。

これが原因で、他のソフトで開いたときに文字化けすることがあります。

対策として、-Encoding パラメータを使います。

Set-Content -Path "utf8.txt" -Value "UTF-8で保存します" -Encoding UTF8

よく使うエンコーディングは以下の通りです:

エンコーディング説明
UTF8一般的なUTF-8形式
ASCII英数字のみの場合に最適
UnicodeUTF-16(デフォルト)
Defaultシステムのデフォルト

PowerShell 5.1と6.0以降の違い

PowerShellのバージョンによって、デフォルトのエンコーディングが異なります:

  • PowerShell 5.1以前: UTF-16 LE
  • PowerShell 6.0以降: UTF-8 (BOMなし)

バージョンをまたいで使用する場合は、明示的にエンコーディングを指定しておくことをおすすめします。

応用例:ログ出力や日時の記録に使う

日時付きログファイルの作成

$now = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Set-Content -Path "log.txt" -Value "スクリプト実行:$now"

このように、日時を自動で書き出すスクリプトも簡単に作成できます。

業務の自動化、ログの保存、タスクの履歴管理に非常に役立ちます。

既存ファイルのバックアップ

# 元ファイルの内容を取得
$content = Get-Content "config.ini"

# バックアップファイル名を日時付きで作成
$backupFile = "config_backup_$(Get-Date -Format 'yyyyMMdd_HHmmss').ini"

# バックアップファイルに書き込み
Set-Content -Path $backupFile -Value $content

JSONやXMLなどの設定ファイル生成

# JSON形式の設定ファイルを作成
$settings = @{
    "UserName" = "admin"
    "ServerPort" = 8080
    "Debug" = $true
}

$json = $settings | ConvertTo-Json
Set-Content -Path "settings.json" -Value $json -Encoding UTF8

よくある問題と解決策

ファイルへのアクセスが拒否される

Set-Content : ファイル 'C:\config.txt' へのアクセスが拒否されました。

解決策:

  • 管理者権限でPowerShellを実行する
  • -Force パラメータを使用する
  • ファイルの権限を確認・変更する

パイプラインを使って出力をファイルに送りたい

コマンドの出力結果をそのままファイルに書き込みたい場合は:

Get-Process | Out-String | Set-Content "processes.txt"

ただし、この場合は Out-File> リダイレクト演算子の方がシンプルな場合もあります:

Get-Process > "processes.txt"

大量のデータ処理時のパフォーマンス

大量のデータを処理する場合、Set-Content はメモリ使用量に注意が必要です。代替手段として:

# ストリーミング処理でファイル書き込み
$stream = [System.IO.StreamWriter]::new("large_file.txt")
try {
    for ($i = 1; $i -le 100000; $i++) {
        $stream.WriteLine("Line $i of large file")
    }
}
finally {
    $stream.Close()
}

まとめ|Set-ContentでPowerShellのファイル操作をもっと自由に

PowerShellの Set-Content を使えば、簡単にファイルにテキストを書き込むことができます。

  • 基本的には「上書き」であることを理解する
  • 追記したい場合は Add-Content を使う
  • エンコーディングを適切に指定する

この3点を押さえておけば、日常的なスクリプト作成やログ出力、設定ファイルの自動生成などに、幅広く応用できます。

他のファイル操作コマンドとの違い

コマンド主な用途
Set-Contentファイル内容の置き換え
Add-Contentファイルへの追記
Get-Contentファイル内容の取得
Out-Fileコマンド出力のファイル保存
New-Item新規ファイル/フォルダ作成

状況に応じて適切なコマンドを選択することで、より効率的なスクリプト作成が可能になります。

コメント

タイトルとURLをコピーしました