ファイル内のテキストを PowerShell を使用して置き換える方法
-
PowerShell を使用してファイル内の文字列のすべての出現を置き換えるために
Get-Content
とSet-Content
を使用する -
PowerShell を使用してファイル内の文字列のすべての出現を置き換えるために
File
クラスを使用する - PowerShell を使用して複数のファイル内の文字列のすべての出現を置き換える
- 結論

PowerShell は、ファイルとフォルダーを管理するための強力なツールです。それを使用すると、システム上のファイルとフォルダーを作成、コピー、削除、移動、名前変更、および表示できます。
このチュートリアルでは、PowerShell を使用してファイル内のすべての文字列の出現を置き換えるさまざまな方法を紹介します。
PowerShell を使用してファイル内の文字列のすべての出現を置き換えるために Get-Content
と Set-Content
を使用する
'Get-Content'
コマンドは、指定されたパスのアイテムの内容を取得し、ファイル内のテキストなどを取得します。'Set-Content'
cmdlet は、新しい内容をファイルに追加するか、既存の内容を置き換えることができる文字列処理ツールです。
Get-Content
と Set-Content
cmdlet を使用して、ファイル内のすべての文字列の出現を置き換えることができます。
構文:
(Get-Content -Path 'Path\to\Your\File.txt') -Replace 'OldString', 'NewString' | Set-Content -Path 'Path\to\Your\File.txt'
構文では、'OldString'
を置き換えたい文字列に、'NewString'
をその代わりに挿入したい文字列に置き換えます。'Path\to\Your\File.txt'
は、実際のファイルパスに置き換えてください。
例を挙げましょう。ディレクトリ(C:\New
)に以下の内容のテキストファイル(test.txt
)があります。
Get-Content C:\New\test.txt
出力:
Welcome to Linux tutorials.
Linux is free.
Linux is powerful.
今、-Replace
パラメータの助けを借りて、test.txt
ファイル内の文字列'Linux'
のすべての出現を'PowerShell'
に置き換えましょう。Get-Content
の周りには、カッコ ()
が必要です。
(Get-Content C:\New\test.txt) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
次に、test.txt
ファイルの内容を表示して、変更を確認します。
Get-Content C:\New\test.txt
ご覧のように、Linux
が PowerShell
に成功裏に置き換えられました。
出力:
Welcome to PowerShell tutorials.
PowerShell is free.
PowerShell is powerful.
この方法は、Get-Content
cmdlet が配列を返すため、ファイル内の文字列を見つけて置き換えるために文字列配列を使用します。Get-Content
が単一の文字列を返す場合、文字列を置き換えるのが容易になります。
以下のように、-Raw
パラメータを使用できます。-Raw
パラメータは、'C:\New\test.txt'
の内容が単一の文字列として読み取られることを保証し、ファイル全体で'Linux'
を'PowerShell'
に効率的に置き換えることを可能にします。
(Get-Content C:\New\test.txt -Raw) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
このコードでは、'C:\New\test.txt'
にあるファイルの内容を単一の文字列として読み取ります。その後、-Replace
演算子を使用して、その文字列内のすべての'Linux'
の出現を'PowerShell'
に置き換えます。
最後に、変更された内容を同じファイルに保存し、新しいテキストで更新します。このコードは、PowerShell を使用してファイル内のテキストを置き換えるための簡単な方法です。
PowerShell を使用してファイル内の文字列のすべての出現を置き換えるために File
クラスを使用する
File
クラスは、単一のファイルを作成、コピー、移動、開く、削除、追加するといった一般的な操作のための静的メソッドを提供します。指定されたファイルの内容を置き換えるために File
クラスの Replace()
メソッドを使用してください。
構文:
$string = [System.IO.File]::ReadAllText("FilePath")
$string = $string.Replace("OldString", "NewString")
[System.IO.File]::WriteAllText("FilePath", $string)
パラメーター:
"FilePath"
: これは実際のファイルパスに置き換える必要があります。"OldString"
: これは置き換えたい文字列です。"NewString"
: これは置き換えたい文字列です。
ReadAllText()
メソッドは、テキストファイルを開き、そのファイル内のすべてのテキストを読み取り、ファイルを閉じます。
WriteAllText()
メソッドは、新しいファイルを作成し、特定の文字列をそのファイルに書き込み、ファイルを閉じます。ターゲットファイルがすでにその場所に存在する場合は上書きされます。
例を挙げましょう。ディレクトリ(C:\New
)に以下の内容のテキストファイル(python.txt
)があります。
Get-Content C:\New\python.txt
出力:
Find the best Python tutorials and learn Python easily from DelftStack.
今、File
クラスのメソッドを使用して、ファイル内の文字列のすべての出現を置き換えましょう。
$string = [System.IO.File]::ReadAllText("C:\New\python.txt").Replace("Python", "JavaScript")
[System.IO.File]::WriteAllText("C:\New\python.txt", $string)
上記のコードでは、まず $string
という変数を作成します。この変数は、テキスト置き換えを行った後の'C:\New\python.txt'
ファイルの修正内容を保存します。[System.IO.File]::ReadAllText("C:\New\python.txt")
を使用して、ファイルの内容全体を読み取り、$string
に保存します。
次のステップでは、Replace()
メソッドを使用して、内容内のすべての"Python"
のインスタンスを見つけて"JavaScript"
に置き換え、テキストを更新します。最後に、[System.IO.File]::WriteAllText("C:\New\python.txt", $string)
を使用して、修正内容を同じファイルに書き込み、元のテキストを上書きし、変更を保持します。
C:\New\python.txt
で行った変更を確認してください。
Get-Content C:\New\python.txt
出力:
Find the best JavaScript tutorials and learn JavaScript easily from DelftStack.
出力では、"Python"
が"JavaScript"
に置き換えられたのがわかります。
PowerShell を使用して複数のファイル内の文字列のすべての出現を置き換える
上記の方法は、単一のファイル内の文字列を置き換えます。時には、複数のファイルで同じ文字列を置き換える必要があるかもしれません。
その場合、以下のコマンドを使用して、複数のファイル内の指定された文字列のすべての出現を置き換えることができます。
Get-ChildItem 'C:\New\*.txt' | foreach {
(Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}
上記のコードでは、Get-ChildItem
を使用して、'C:\New'
ディレクトリ内の'.txt'
ファイルのリストを収集します。アスタリスク*
ワイルドカードは、.txt
ファイル拡張子を持つすべてのファイルを指定します。
次に、各ファイルをループし、Get-Content
でその内容を読み取り、-Replace
演算子を使用して、'weekly'
を'monthly'
に変更する置き換え操作を適用します。修正された内容は、Set-Content
を用いて同じファイルに書き戻されます。
このプロセスは、ディレクトリ内のすべてのファイルで繰り返され、'weekly'
を'monthly'
に効率的に置き換えます。
指定されたディレクトリとそのサブディレクトリ内のファイルの文字列を置き換えるために、-Recurse
パラメータも使用できます。
Get-ChildItem 'C:\New\*.txt' -Recurse | foreach {
(Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}
このコードでは、Get-ChildItem
を使用して、'C:\New'
およびそのサブディレクトリ内の'.txt'
ファイルのリストを集めます。-Recurse
オプションにより、指定されたディレクトリだけでなく、そのサブディレクトリ内でもこれらのファイルを検索します。
次に、2つの ForEach
ループを使用して、各ファイルの内容にアクセスします。内側のループ内で、-Replace
演算子を使用してテキスト内の'weekly'
を'monthly'
に置き換えます。
最後に、修正された内容を同じファイルに保存します。このプロセスは、'C:\New'
とそのサブフォルダー内のすべてのファイルを通過し、数多くのファイルおよび入れ子になったディレクトリ全体で'weekly'
を'monthly'
に効果的に置き換えることを可能にします。
結論
この記事では、Get-Content
と Set-Content
cmdlet を使用して、単一のファイル内の文字列を置き換えるさまざまな方法を見てきました。基本的な方法と、より効率的な -Raw
パラメータメソッドを提供しました。続いて、ファイル内のテキストを置き換えるために File
クラスの力を利用し、より高度な技術を実証しました。
さらに、ディレクトリ内およびそのサブディレクトリ内での複数のファイルにわたってテキストを置き換えることで知識を広げました。これらの方法は、人々がファイル内のテキストを簡単に編集できるようにし、PowerShell がこのようなタスクにいかに役立つかを示しています。