2012-05-07 41 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:\ Program Files文件 (86)\的Myproj \ web.config文件',因爲它正由另一個進程使用。

該文件沒有打開任何地方。我認爲Get-content尚未發佈該文件。

爲什麼會發生?如何查找和替換相同的文件沒有問題?

回答

41

無法在打開文件時讀取和寫入同一個文件,Get-Content打開文件進行讀取,同時Set-Content嘗試寫入文件。將Get-Conetnt調用放在圓括號中,它將打開文件,讀取它的內容並關閉它。

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

我正在搜索結果半小時,並失敗失敗。我提出這個問題,去喝咖啡。現在回答就在這裏。同樣的事情發生在幾個月前。驚人的事情再次徵收:) – Samselvaprabu

+1

謝謝@Samselvaprabu樂於幫助。你也可以在幫助中找到它:http://technet.microsoft.com/en-us/library/dd347736.aspx,看看第三個例子。 –