2017-07-31 117 views
0

問題查找並替換字符串錯誤

「查找和替換」功能正在刪除文件的內容,而不是按照預期進行。

詳細

我在PowerShell中的工作與正則表達式的值和具有這樣的功能,旨在找到一個特定的正則表達式字符串,並用另一個替換。最初,該功能工作得很好;但是,現在它將刪除目標文件的所有內容並將它們保存爲空文件。我試了好幾個小時才弄清楚什麼是錯的。不幸的是,當它按照預期工作時,我沒有保存該函數的副本,所以我沒有什麼可以比較它,並且我的大多數故障排除都失敗了。我希望另一組眼睛能夠幫助發現問題。

代碼:

Function StringReplace 
{ 
    $files = GCI -path "$path\*.config" -Recurse | where-object -InputObject $_ -Pattern ([regex]::Escape($oldString)) -Quiet) -eq $true) 
    foreach ($file in $files) { 
     (GC $file.PSPath) | 
     foreach-object { $_.Replace($oldString, $newString) | 
     set-content $file.PSPath 
     } 
} 

$oldString = "s+r/ng" 
$newString = "s/R+ng" 
$path = "C:\*\somefoldername" 

在很多我的排查,我發現所有的$值如預期;然而,一旦達到Get-Content,就會發生一些事情,並且複製$文件值,以便存儲每個文件/內容的大約20個副本。我不確定我做錯了什麼,但我會非常感謝任何和所有的輸入。

謝謝大家提前

回答

0

顯然我只是需要退一步從應用程序。

對於遇到此問題的其他人,解決方法很簡單。

的代碼「的foreach對象」節期間,人們需要改變這樣:

foreach ($file in $files) { 
    (GC $file.PSPath) | 
    foreach-object { $_.Replace($oldString, $newString) } | 
    set-content $file.PSPath 

問題本身是}被放在哪裏。 這部分功能需要在保存內容之前結束。

+2

如果您確實想要手動逐個輸出字符串,則可以使用「Add-Content」或「Out-File -Append」代替「Set-Content」 –