2017-12-21 19 views
0

このスクリプトをWindows 2012 R2の50GBファイルで実行しようとしていますが、3つのパスを3つではなく1つのパスにすることを望みます。また、置換がその順序で行われることも重要です。これを簡略化して効率的に実行するための提案は、非常に高く評価されます。Replaceステートメントを使用してPowerShellスクリプトを簡略化する

$filePath = "D:\FileLocation\file_name.csv" 
(Get-Content $filePath | out-string).Replace('"', '""') | Set-Content $filePath 
(Get-Content $filePath | out-string).Replace('|~|', '"') | Set-Content $filePath 
(Get-Content $filePath | out-string).Replace('|@|', ',') | Set-Content $filePath 

答えて

4

、私はあなたが全体のプロセスをスピードアップする必要がある行(またはバッチで)によるファイルの行を処理示唆しています。

あなたはここにhttp://community.idera.com/powershell/ask_the_experts/f/learn_powershell-12/18821/how-to-remove-specific-rows-from-csv-files-in-powershell

を真の言及スクリプトをコピーではなく、すぐに書き込み$ラインの、あなたを行うことはそれがロードしようとしますので、GET-内容には注意してください

$sw.WriteLine($line.replace().replace().replace()) 

を置き換えることができますファイル全体が失われてしまい、非常に遅くなります。 ディスク容量があまりない場合は注意してください。リンクされたソリューションは、ファイルを置き換える前にファイルのコピーを作成します(変更あり)。

+1

はそんなにありがとう-replace演算子を使用することができ、それは完璧です!私もメモリ問題にぶつかっていました。 –

+0

['Get-Content'](https://docs.microsoft.com/powershell/module/microsoft.powershell.management/get-content?view=powershell-5.1)には' -ReadCount'パラメータがあります。一度に多くのコンテンツ行がパイプラインを通じて送信されます。 * "このパラメータは表示される内容を変更するものではなく、内容を表示するのにかかる時間に影響しますReadCountの値が増加すると、最初の行を返すのにかかる時間は増加しますが、これは、非常に大きなアイテムで知覚可能な違いを生むことができます。とにかく、ストリーミングはまだまだ高速です... – iRon

+0

@ Shadowzee一度に1行ではなく、バッチでコードを調整する方法を知っていますか? –

0

同じ行に.replace()を組み合わせることができます。そのような大きなファイルで

$filepath="/Users/me/Desktop/text.txt" 
'test text 123' |Out-File -Path $filepath 
(Get-Content $filepath|Out-String).Replace('test','1').Replace('text','2').Replace('123','3')|Set-Content $filepath 
Get-Content $filepath 
1 2 3 
1

あなたは

$filepath="c:\temp\text.txt" 
(Get-Content $filepath) -replace 'test','1' -replace 'text','2' -replace '123','3' |Set-Content $filepath 
関連する問題