2016-08-06 5 views
-1

に更新ファイルのパスは、私は、文字列値オフ1用に以下のコードスニペットとを発見し、これは完全にPowerShellの - 複数のバッチファイル

$configFiles = Get-ChildItem . *.bat -rec 
foreach ($file in $configFiles) 
{ 
(Get-Content $file.PSPath) | 
Foreach-Object { $_ -replace "prodapp", "devapp" } | 
Set-Content $file.PSPath 
} 

動作しますが、私は先に行くと更新するために、同じコードを使用しようとすると、ファイルパスには、私は正規表現のエラーを取得

$configFiles = Get-ChildItem . *.bat -rec 
foreach ($file in $configFiles) 
{ 
    (Get-Content $file.PSPath) | 
    Foreach-Object { $_ -replace '\Program Files\App\AppClient\4.0', '\Program Files (x86)\App\AppClient' } | 
    Set-Content $file.PSPath 
} 

エラーは、私が何をしないのです

+ CategoryInfo   : InvalidOperation: (\Program Files\App\ 
AppClient\4.0:String) [], RuntimeException 
+ FullyQualifiedErrorId : InvalidRegularExpression 

のですか?ありがとうございました!

+0

Plsはバッチファイルタグを削除します。 – sambul35

答えて

0

バックスラッシュとピリオドは、正規表現で特別な意味を持ちます。実際のバックスラッシュとピリオドとの照合をしたいので、バックスラッシュでエスケープする必要があります。

だからあなたのようになります行を置き換える:

Foreach-Object { $_ -replace '\\Program Files\\App\\AppClient\\4\.0', '\Program Files (x86)\App\AppClient' } | 

を明確にするために、あなただけのことが通常であるとして、(カンマの前に)置き換える文の最初の部分の文字のこれらのタイプをエスケープする必要があります表現。 replace文の2番目の部分(コンマの後ろ)は、置き換えるテキストであり、それらの文字をエスケープする必要はありません。

+0

ありがとうございます!私はそれが正規表現のものであることを知っていた。これは完全に意味をなさない! – TheToddmonster

関連する問題