コマンドプロンプトでファイル内の文字列を置換する方法|PowerShellやバッチファイルとの組み合わせ
目次
スポンサードリンク
コマンドプロンプト単体で文字列置換はできません
コマンドプロンプトには、直接ファイルの中身の文字列を置換するコマンドは存在しません。そのため、PowerShellや外部ツール(例:sed、gsed)と併用する必要があります。
PowerShellを使ったファイル内の文字列置換
PowerShell ではファイル内の文字列を置換するコマンドを書くことができます。下記例では、input.txt 内に含まれる文字列「置換前」と「置換後」に置き換え、output.txtとして保存しています。 output.txtの部分をinput.txtにすると、同じファイルに上書き保存します。
(Get-Content input.txt) -replace '置換前', '置換後' | Set-Content output.txt
実際に実行してみた例です。想定通り文字列が置換されoutput.txtとして保存されました。
PS C:\Users\username> type .\input.txt
★置換前★置換前★
★置換前★置換前★
★置換前★置換前★
★置換前★置換前★
PS C:\Users\username> (Get-Content input.txt) -replace '置換前', '置換後' | Set-Content output.txt
PS C:\Users\username> type .\output.txt
★置換後★置換後★
★置換後★置換後★
★置換後★置換後★
★置換後★置換後★
複数ファイルに対して一括置換する方法
下記コマンド例では、Get-ChildItem で対象ファイルを指定し、ForEach-Objectで該当ファイルすべてに対し、文字列置換の処理を行っています。
PS C:\Users\username> Get-ChildItem *.txt | ForEach-Object {
>> (Get-Content $_) -replace '置換前', '置換後' | Set-Content $_
>> }
文字コードの注意事項
PowerShellのSet-ContentコマンドはデフォルトではSJISで保存されます。UTF-8で保存したい場合は以下のように指定しましょう。
(Get-Content input.txt) -replace '置換前','置換後' | Set-Content -Encoding UTF8 output.txt
まとめ
PowerShellを使えば、複数のファイルを対象に一括で文字列の置換を行えます。是非覚えておきたい便利なテクニックです。
コマンドプロンプトのポケットリファレンス:Windows11対応版
Windows環境で開発やシステム管理を行うエンジニアにとって、コマンドプロンプトの知識は非常に重要なスキルセットです。こちらの書籍は初心者にもわかりやすく網羅的です。手元に置いておきたい一冊です。
リンク
PowerShellの基礎を一通り学べるおすすめ書籍
リンク