2012-05-07 23 views
18

Ich versuche zu finden und zu ersetzen in einer Datei mit folgenden Ansatz.Suchen und Ersetzen in Dateien schlägt fehl

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 

Aber ich bekomme immer Fehler.

Set-Inhalt: Der Prozess kann nicht auf die Datei zugreifen 'c: \ program files (x86) \ MyProj \ web.config', weil sie von einem anderen Prozess verwendet wird.

Die Datei wird nirgendwo geöffnet. Ich denke, Get-Content soll die Datei noch freigeben.

Warum passiert es? Wie finden und ersetzen Sie in der gleichen Datei ohne Problem?

Antwort

41

Sie können nicht lesen und schreiben in die gleiche Datei, während es geöffnet ist, Get-Content öffnet die Datei zum Lesen und in der gleichen Zeit versucht Set-Content, darauf zu schreiben. Setzen Sie den Get-Conetnt-Aufruf in Klammern, er öffnet die Datei, liest den Inhalt und schließt ihn.

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

Ich suchte das Ergebnis für eine halbe Stunde und frustriert mit Fehler. Ich stellte diese Frage und ging zum Kaffee. Jetzt Antwort ist hier. Das Gleiche ist vor ein paar Monaten passiert. Markante Sache ist wieder Levy :) – Samselvaprabu

+1

Danke @Samselvaprabu froh, zu helfen. Sie können dies auch in der Hilfe finden: http://technet.microsoft.com/en-us/library/dd347736.aspx, werfen Sie einen Blick auf das dritte Beispiel. –