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 回答