スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PowerShellで文字列置換

1ファイル中の複数の単語を、一度に置換するPowerShellスクリプト




「PowerShellで複数のファイルの文字列を一括置換する」を参考にして、下記のようにした。

■スクリプト
#設定。from1~from3の3つの単語を、to1~to3の3つに置換する

param(
 [String]$target,
 [String]$encoding = "UTF-8",
 [String]$from1 = "http://localhost",
 [String]$to1 = "http://hogehoge",
 [String]$from2 = "Data Source=abc",
 [String]$to2 = "Data Source=xyz",
 [String]$from3 = "http://testsrv",
 [String]$to3 = "http://srv"
)

# 6/24追記 作業ディレクトリの設定
if((Get-Location).Provider.Name -eq 'FileSystem') {
 [IO.Directory]::SetCurrentDirectory((Get-Location).ProviderPath)
}

#エンコード
$enc = [Text.Encoding]::GetEncoding($encoding)

#バックアップ用ファイル名
$bakName = $target + ".bak"

#バックアップ用の名前にリネーム。
Move-Item $target $bakName -force

#ReaderとWriterを作成
$reader = New-Object IO.StreamReader($bakName, $enc)
if($reader -eq $null){
 Write-Host "reader error"
 return;
}
$writer = New-Object IO.StreamWriter($target, $false, $enc)
if($writer -eq $null){
 Write-Host "writer error"
 $reader.Close()
 return;
}

#順番に見て行って置換
while(!$reader.EndOfStream){
 $str1 = $reader.ReadLine() -ireplace $from1, $to1
 $str2 = $str1 -ireplace $from2, $to2
 $str3 = $str2 -ireplace $from3, $to3
$writer.WriteLine($str3)
}

#後始末
$reader.Close()
$writer.Close()

Write-Host "end"



■実行
・元ファイル

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<manager>http://localhost/news/file1.html</manager>
<server>http://testsrv/</server>
<datasource>Data Source=abc</datasource>
</root>



・実行

PS C:\Users\hoge> .\test.ps1 sample.xml
end



・置換結果

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<manager>http://hogehoge/news/file1.html</manager>
<server>http://srv/</server>
<datasource>Data Source=xyz</datasource>
</root>



■参考
「PowerShellで複数のファイルの文字列を一括置換する」

 ちなみに、バッチ(bat)でやりたい場合は下記とかが参考になりそう。
ファイル中の文字列を置換するバッチ処理
DOSのバッチで、テキストファイル中の文字を置換した


■6/24追記
 スクリプトのコードに、作業ディレクトリを変更する処理を追加。

以上。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

検索フォーム
プロフィール

takuan93

Author:takuan93
本ブログの説明書→「ReadMe」

管理者に連絡

カテゴリ
WiX (5)
Ant (1)
フリーエリア
最新記事
カウンター
カレンダー
06 | 2018/07 | 08
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。