35

次の方法を使用して、ファイルを検索して置換しようとしています。

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

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

Set-Content:別のプロセスによって使用されているため、プロセスはファイル'c:\ program files(x86)\ MyProj\web.config'にアクセスできません。

ファイルはどこにも開かれていません。Get-contentはまだファイルをリリースしていないと思います。

なぜそれが起こるのですか?問題なく同じファイルを見つけて置き換えるにはどうすればよいですか?

4

1 に答える 1

69

開いている間は同じファイルの読み取りと書き込みを行うことはできません。Get-Contentはファイルを読み取り用に開き、同時にSet-Contentはファイルへの書き込みを試みます。Get-Conetnt呼び出しをかっこで囲むと、ファイルが開き、その内容が読み取られて閉じられます。

(Get-Content $FileFullpath) | ...
于 2012-05-07T10:55:24.537 に答える