PowerShell使用作为参数传递的字符串中的变量

时间:2011-08-08 10:15:06

标签: string variables powershell

我在目录中有几个php文件,我想用不同的文本替换所有文件中的几个单词。这是我的代码的一部分:

$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 个答案:

答案 0 :(得分:4)

字符串实际上是一个正则表达式,因此需要使用'\'进行转义。见this thread

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

会奏效。

答案 1 :(得分:2)

美元符号是一个特殊的正则表达式字符,匹配字符串的结尾,您需要将其转义。在正则表达式中转义字符是通过要转义的字符前面的'\'来完成的。一个更安全的转义字符的方法(特别是当你不知道字符串是否包含特殊字符时)是使用Escape方法。

$replacements_table= (hr_table', 'tbl_table'), ([regex]::Escape('$users'), 'tbl_users')

答案 2 :(得分:1)

尝试使用反斜杠转义“$”:'\$users' $符号告诉正则表达式匹配字符串的末尾。反斜杠是正则表达式转义字符。

答案 3 :(得分:0)

尝试在变量名称周围使用双引号而不是单引号

修改

沿着这些方向尝试......

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