2012-05-07 12 views
18

Sto cercando di trovare e sostituire in un file utilizzando il seguente approccio.Trova e sostituisci file non riesce

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 

Ma ottengo sempre errori.

Set-Content: Il processo non può accedere al file 'c: \ programmi (x86) \ MyProj \ web.config' perché è utilizzato da un altro processo.

Il file non è aperto dove. Penso che Get-content debba ancora rilasciare il file.

Perché succede? Come trovare e sostituire nello stesso file senza problemi?

risposta

41

Non è possibile leggere e scrivere sullo stesso file mentre è aperto, Get-Content apre il file per la lettura e nello stesso tempo Set-Content prova a scrivere su di esso. Metti la chiamata Get-Conetnt tra parentesi, aprirà il file, leggerà il suo contenuto e lo chiuderà.

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

stavo cercando il risultato per mezz'ora e frustrato dal fallimento. Ho sollevato questa domanda e sono andato a prendere un caffè. Ora la risposta è qui. La stessa cosa è accaduta pochi mesi fa. La cosa sorprendente è ancora Levy :) – Samselvaprabu

+1

Grazie a @Samselvaprabu contento di aiutare. Puoi trovare questo anche in aiuto: http://technet.microsoft.com/en-us/library/dd347736.aspx, dai un'occhiata al terzo esempio. –

Problemi correlati