2011-08-08 14 views
3

ディレクトリに複数のphpファイルがあります。異なるテキストのすべてのファイルでいくつかの単語を置き換えます。パラメータとして渡される文字列の変数を使用するPowerShell

$replacements_table= 
("hr_table", "tbl_table"), 
('$users', "tbl_users") 

foreach ($file in $phpFiles){ 
    foreach($replacement in $replacements_table){ 
     (Get-Content $file) | Foreach-Object{$_ -replace $replacement} | Set-Content $file 
    } 
} 

「hr_table」を置き換えるのに問題はありませんが、「$ users」はまったく機能しません。任意の提案は

答えて

4

....これらの線に沿って何かを試してみてくださいを使用してみてくださいいいだろう実際には正規表現なので、 '\'を使用してエスケープする必要があります。 this thread

$replacements_table= ("hr_table", "tbl_table"), ('\$users', "tbl_users") 

を参照してください。

+0

これで問題なく動作します。 – Jandrejc

+0

問題ありません。それ以外のVをクリックして回答を受け入れてください。これは質問を回答としてマークし、助けている人に信用を与えます。 :) – Polymorphix

0

あなたの変数名の前後に二重引用符の代わりに、単一引用符

EDIT

文字列

$x = $x.Replace($originalText, '$user') 
+0

文字列 '$ users'を置き換えたいので、うまくいきません。二重引用符を使用すると、Powershellはそれを変数と解釈します。 – Polymorphix

+0

私の悪い、私は質問を間違って読んだ –

+0

"$ users"も試しましたが、どちらもうまくいきません。他のアイデア? – Jandrejc

1

バックスラッシュと「$」をエスケープしてみてください。'\$users' $記号は、文字列の末尾にマッチする正規表現を伝え、バックスラッシュは、正規表現のエスケープ文字である

2

ドル記号が特別です。正規表現で文字をエスケープするには、エスケープしたい文字の前に '\'をつけます。文字をエスケープするためのより安全な方法(特に、文字列に特殊文字が含まれているかどうかはわかりません)、エスケープメソッドを使用することです。

$replacements_table= (hr_table', 'tbl_table'), ([regex]::Escape('$users'), 'tbl_users') 
関連する問題