2012-05-07 31 views
18

Estoy tratando de hacer buscar y reemplazar en un archivo utilizando el siguiente enfoque.Buscar y reemplazar en archivos falla

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 

Pero siempre recibo un error.

Set-Content: El proceso no tiene acceso al archivo 'c: \ archivos de programa (x86) \ MyProj \ web.config' porque está siendo utilizado por otro proceso.

El archivo no se abre en ninguna parte. Creo que Get-content aún no ha lanzado el archivo.

¿Por qué sucede? ¿Cómo encontrar y reemplazar en el mismo archivo sin problema?

Respuesta

41

No se puede leer y escribir en el mismo archivo mientras está abierto, Get-Content abre el archivo para su lectura y, al mismo tiempo, Set-Content intenta escribir en él. Ponga la llamada Get-Conetnt entre paréntesis, abrirá el archivo, leerá su contenido y lo cerrará.

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

Estuve buscando el resultado durante media hora y me sentí frustrado por el fracaso. Planteé esta pregunta y fui a tomar un café. Ahora la respuesta está aquí. Lo mismo sucedió hace unos meses. Lo sorprendente es de nuevo Levy :) – Samselvaprabu

+1

Gracias @Samselvaprabu encantados de ayudar. También puede encontrar esto como ayuda: http://technet.microsoft.com/en-us/library/dd347736.aspx, eche un vistazo al tercer ejemplo. –