2017-07-31 18 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に到達すると何かが起き、$ fileの値が複製され、格納されている各ファイル/コンテンツの約20のコピーが存在します。私はそれが何であるか分かりませんが、私は間違っていますが、私はすべての入力を高く評価します。

ありがとうございました

答えて

0

明らかに私はアプリケーションから一歩戻ってきました。

この問題が発生した他の人にとって、解決は簡単でした。コードの「のForEach-オブジェクト」セクションの間に、そのようなように変更する必要が

:}が置かれた場所

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

問題自体がありました。 この関数の部分は、内容を保存する前に終了する必要がありました。

+2

実際に手動で文字列を1つずつパイプしたい場合は、 'Set-Content'の代わりに' Add-Content'または 'Out-File -Append'を使用できます –

関連する問題