私は次のスクリプトを持っているに-replaceおよびSet-コンテンツのファイルIOを結合します。その後、同じファイルが使用され、もう一度置き換えてファイルを再度保存します。その後もう一度やります。は、PowerShellの
これは機能しますが、非効率的です。
すべての置換を行い、一度ファイルを保存する方法はありますか?
(可能ならば、私はPowerShellのの読み込み可能なスタイルを維持することを好むだろう。)
私は次のスクリプトを持っているに-replaceおよびSet-コンテンツのファイルIOを結合します。その後、同じファイルが使用され、もう一度置き換えてファイルを再度保存します。その後もう一度やります。は、PowerShellの
これは機能しますが、非効率的です。
すべての置換を行い、一度ファイルを保存する方法はありますか?
(可能ならば、私はPowerShellのの読み込み可能なスタイルを維持することを好むだろう。)
確かに、ちょうど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
}
これが行われ、あることができますあなたがやっていることよりもはるかに単純です。 -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
}
マサチューセッツ工科大の答えは私の投票を持っています。あなたのコードを見たときのその他のこと:一番最初の行は不安です: '。/'はLinuxのための 'here'ですので、Get-ChildItemは現在のパス(現在のPSドライブ)を指定しないと仮定します。 Where-Objectに出力を配管しますが、このコマンドではコマンドにフィルタが組み込まれているため非効率です。また、あなたが使ったwhere-object節では、かっこのまわりに中括弧があります。かっこは不要です。 '$ allFiles = Get-ChildItem -recurse -Include" * .ts "' Get-Contentの場合、$ fileオブジェクトを使用できます。 'Get-Content $ file' – Xalorous