2012-05-07 10 views
18

以下の方法でファイルを検索して置き換えようとしています。ファイルの検索と置換に失敗しました

Function Find-Replace ($FileFullpath, $FindString, $ReplacementString) { 

    Get-Content $FileFullpath | 
    Foreach-Object {$_ -replace $FindString, $ReplacementString } | 
    Set-Content $FileFullpath 

} 

Find-Replace "c:\program files (x86)\MyProj\web.config" $OldServiceName $NewServiceName 

しかし、私はいつもエラーが発生しています。

セット内容:プロセスはファイルにアクセスできません「はC:\プログラムファイル (x86の)\ MYPROJ web.configファイル\」、それが別のプロセスによって使用されているため。

ファイルは任意の場所を開けていません。私はGet-contentがまだファイルをリリースしていないと思う。

どうしてですか?同じファイル内で問題なく見つけて置き換える方法は?

答えて

41

あなたが読んで、それが開いている間、同じファイルに書き込むことはできませんは、Get-コンテンツは、読み取り用にファイルを開き、同じ時間に設定し、コンテンツは、それへの書き込みをしようとします。 Get-Conetntコールをカッコで囲むと、ファイルが開き、内容が読み込まれて閉じます。

(Get-Content $FileFullpath) | ... 
+2

私は30分結果を検索していましたが、失敗してしまいました。私はこの質問を提起し、コーヒーのために行きました。今、答えはここにあります。同じことが数ヶ月前に起こった。印象的なものは再びレビです:) – Samselvaprabu

+1

おかげで@Samselvaprabu助けてうれしい。これはヘルプでも見つけることができます:http://technet.microsoft.com/en-us/library/dd347736.aspx、3番目の例を見てください。 –

関連する問題