2012-05-07 20 views
18

Tôi đang cố gắng tìm và thay thế trong một tệp bằng cách sử dụng cách tiếp cận sau.Tìm và thay thế trong các tập tin không thành công

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 

Nhưng tôi luôn gặp lỗi.

Đặt nội dung: Quy trình không thể truy cập tệp 'c: \ tệp chương trình (x86) \ MyProj \ web.config' do quá trình này đang được sử dụng.

Tệp không được mở bất kỳ vị trí nào. Tôi nghĩ rằng Get-nội dung vẫn chưa phát hành tệp.

Tại sao điều đó xảy ra? Làm thế nào để tìm và thay thế trong cùng một tệp mà không có vấn đề?

Trả lời

41

Bạn không thể đọc và ghi vào cùng một tệp trong khi tệp đang mở, Get-Content mở tệp để đọc và trong cùng một thời gian Set-Content cố gắng ghi vào đó. Đặt cuộc gọi Get-Conetnt trong dấu ngoặc đơn, nó sẽ mở tệp, đọc nội dung của nó và đóng nó lại.

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

Tôi đã tìm kiếm kết quả trong nửa giờ và thất vọng với thất bại. Tôi đưa ra câu hỏi này và đi uống cà phê. Bây giờ câu trả lời là ở đây. Điều tương tự đã xảy ra vài tháng trước. Điều nổi bật là một lần nữa Levy :) – Samselvaprabu

+1

Cảm ơn @Samselvaprabu vui mừng để giúp đỡ. Bạn cũng có thể tìm thấy điều này trong trợ giúp: http://technet.microsoft.com/en-us/library/dd347736.aspx, hãy xem ví dụ thứ ba. –

Các vấn đề liên quan