2010-06-16 197 views
6

我想在PowerShell中執行一些非常簡單的操作。PowerShell鎖定文件

  1. 讀取文件
  2. 操縱一些字符串
  3. 保存修改後的測試迴文件

    function Replace { 
        $file = Get-Content C:\Path\File.cs 
        $file | foreach {$_ -replace "document.getElementById", "$"} |out-file -filepath C:\Path\File.cs 
    } 
    

我試圖Set-Content以及內容。

我總是得到未經授權的例外。我可以看到$file具有文件內容,寫入文件時出現錯誤。

我該如何解決這個問題?

+0

這對所有文件或只是那一個或在那個路徑中失敗嗎? – 2010-06-16 22:45:01

回答

4

這可能是由Get-Content cmdlet導致讀取鎖定,而Out-File導致嘗試鎖定寫入。類似的問題在這裏:Powershell: how do you read & write I/O within one pipeline?

因此,解決辦法是:

${C:\Path\File.cs} = ${C:\Path\File.cs} | foreach {$_ -replace "document.getElementById", '$'} 
${C:\Path\File.cs} = Get-Content C:\Path\File.cs | foreach {$_ -replace "document.getElementById", '$'} 

$content = Get-Content C:\Path\File.cs | foreach {$_ -replace "document.getElementById", '$'} 
$content | Set-Content C:\Path\File.cs 

基本上你需要緩存文件的內容,以便該文件可以被關閉(Get-Content讀),之後的緩衝應該被刷新到文件(Set-Content,在此期間需要寫入鎖定)。

+0

它工作。謝謝。現在我感到愚蠢的問這個:)但謝謝。 我沒有讀到這個,但由於我在一個聲明中管道一切,它給了我錯誤,因爲鎖沒有被釋放。 酷! – Ben 2010-06-17 02:44:57

+0

我不明白解決方案 - 我有一個xml文件,通過'[xml] $ file = Get-Content $ filename',當我在讀取文件後嘗試刪除文件時,出現鎖定錯誤。 'XmlDocument'沒有處理方法,'$ file'無效,所以我不知道如何繼續。 – PeterX 2014-04-14 05:36:22

+0

也許這個變量應該是'xml''[xml] $ xml = Get-Content $ filename'。所以很明顯,它不是文件,而是代表xml的對象。 'Remove-Item $ filename'刪除文件。 – stej 2014-04-18 06:58:05