2016-04-27 9 views
0

私はpowershellを使って再帰的な検索と置換を完了し、フォルダとサブフォルダのすべてのファイルの置き換えを完了するフォルダを置き換えています。見つけられ置き換えられたおよそ1500の異なる値があります。Powershell再帰的な検索と置換スクリプト

現在のコードは少数のファイルで動作しますが、サーバー(16GB RAM)のすべてのメモリを使用してpowershellをクラッシュさせる4GBのフォルダでこれを実行する必要があります。

以下のコードはあまり効率的ではないので、誰でも上記の作業をより効率的に行う方法を知っています。そうでなければ、私はこのタスクを達成するために使用できる別のプログラミング言語を知っています。私はWindows 2012サーバーを使用することを念頭に置いてください。

$folderLocation = 'D:\folder\location' 


#### 
$files = Get-ChildItem $folderLocation * -rec 
foreach ($file in $files){ 
    write-host "Checking File " + $file.FullName 
    (get-content $file.PSPath)| 
    Foreach-Object { 
     $_ -replace "find","replace0" ` 
     -replace "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)","scrubbed_ip" ` 
     -replace "name0","FILLER0" ` 
     -replace "name1","FILLER1" ` 
     -replace "name2","FILLER2" ` 
     -replace "name3","FILLER3" ` 
     -replace "name4","FILLER4" ` 
     -replace "name5","FILLER5" ` 
     . 
     . 
     . 
     . 

     -replace "name1500","FILLER1500" ` 




    }| 
    set-content $file.PSPath 
} 

答えて

0

テストが、私は、これは良い仕事かもしれないとは思いません:

$folderLocation = 'D:\folder\location' 
$tempfile = 'D:\folder\location\tempfile.tmp' 


#### 
$files = Get-ChildItem $folderLocation * -rec 
foreach ($file in $files){ 
    write-host "Checking File " + $file.FullName 
    (get-content $file.PSPath -ReadCount 3000)| 
    Foreach-Object { 
     $_ -replace "find","replace0" ` 
     -replace "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)","scrubbed_ip" ` 
     -replace 'name(\d+)','FILLER$1' | 
     add-content $tempfile 
     } 
    Remove-Item $file 
    Rename-Item $tempfile -NewName $file.name 
    Remove-Item $tempfile 
} 
+0

おかげMjolinor、このコードが実行されるが、PowerShellはエラーで死ぬ:プロセスが原因StackOverflowExecptionに終了されます。 また、以下のコードでは、name01/02/03が例として繰り返されているだけで、名前は何でもかまいません。フィラーは常に繰り返します。 -replace 'name(\ d +)'、 'FILLER $ 1' – CassOwary

+0

出力ファイルに何かが亡くなりましたか? – mjolinor

+0

ええ、それは期待通りに動いていました...それぞれの検索と置換を実行しています。ファイルの出力は期待どおりです。 PowerShellの画面とイベントビューアはあまり役に立ちませんが、StackOverflowExecptionのためにプロセスが終了してしまいます。 – CassOwary

関連する問題