2016-08-23 6 views
3

私は次のスクリプトを持っているに-replaceおよびSet-コンテンツのファイルIOを結合します。その後、同じファイルが使用され、もう一度置き換えてファイルを再度保存します。その後もう一度やります。は、PowerShellの

これは機能しますが、非効率的です。

すべての置換を行い、一度ファイルを保存する方法はありますか?

(可能ならば、私はPowerShellのの読み込み可能なスタイルを維持することを好むだろう。)

+0

マサチューセッツ工科大の答えは私の投票を持っています。あなたのコードを見たときのその他のこと:一番最初の行は不安です: '。/'はLinuxのための 'here'ですので、Get-ChildItemは現在のパス(現在のPSドライブ)を指定しないと仮定します。 Where-Objectに出力を配管しますが、このコマンドではコマンドにフィルタが組み込まれているため非効率です。また、あなたが使ったwhere-object節では、かっこのまわりに中括弧があります。かっこは不要です。 '$ allFiles = Get-ChildItem -recurse -Include" * .ts "' Get-Contentの場合、$ fileオブジェクトを使用できます。 'Get-Content $ file' – Xalorous

答えて

2

確かに、ちょうどForEach-Objectブロック内のあなたの置き換えをチェーン:

$allFiles = Get-ChildItem "./" -Recurse | Where { ($_.Extension -eq ".ts")} 
foreach($file in $allFiles) 
{ 
    (Get-Content $file.PSPath) | 
     Foreach-Object { 
      # Find and replace the dash cased the contents of the files 
      $_ -replace "my-project-name", '$appNameDashCased$' ` 
       -replace "MyProjectName", '$appNameCamelCased$' ` 
       -replace "myProjectName", '$appNamePascalCased$' 
     } | 
     Set-Content $file.PSPath  
} 
+0

@ Xalorous私はあなたが何を意味するかを拡張することができますか?私は追加のパイプが必要ないとは思わない。 – briantist

+0

1つの長いコマンドだったという点で、コメントが削除されました。しかし、あなたのコードには、 '-replace'行の最後に行を保持するものはありません。次の行を-replaceで開始するのは不確実です。私はあなたが最初の2つの最後にバックティックが必要だと思います。 – Xalorous

+0

@ Xalorous true、fixed、ありがとう! – briantist

3

これが行われ、あることができますあなたがやっていることよりもはるかに単純です。 -Replaceコマンドをそのように連鎖させることができます。

$allFiles = Get-ChildItem "./" -Recurse | Where { ($_.Extension -eq ".ts")} 
foreach($file in $allFiles) 
{ 
    # Find and replace the dash cased the contents of the files 
    (Get-Content $file.PSPath) -replace "my-project-name", '$appNameDashCased$' -replace "StringB", '$SecondReplacement$' -replace "StringC", '$ThirdReplacement$' | Set-Content $file.PSPath 
} 
+0

ニース!私は 'Set-Content'がパイプラインのためこのように失敗すると思います。そのため、カッコ内に' Get-Content'をラップしてファイル全体を最初に読み込むようにしていますが、これも簡単に適用できます。 – briantist

+0

私はこれがPowerShell 2.0と互換性があるとは思わない... – Vaccano

+0

私はPowerShell 4.0でもこれを試してみたが、どちらもそこでは動作しない...。 – Vaccano