2012-05-07 2 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 

Но я всегда получаю ошибку.

Set-Content: Процесс не может получить доступ к файлу 'C: \ Program Files (x86) \ 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, посмотрите на третий пример. –

Смежные вопросы