使用powershell查找并替换文件中的$ VARIABLE $

时间:2015-10-02 13:02:08

标签: powershell

我正在制作一个简单的PowerShell脚本来替换我们环境中的SubWCRev。所以我有很多包含$WCREV$等变量的模板文件。

我不能做一个简单的查找并替换那些变量但是..我无法正确地逃避$ -character。

查找和替换很简单;

function FindAndReplace {
param(
    [string]$inputFile, 
    [string]$outputFile,
    [string]$findString, 
    [string]$replaceString)
    (Get-Content $inputFile) | foreach {$_ -replace $findString, $replaceString} |
    Set-Content $outputFile
}

我已经为$ findString尝试了很多替代方案。

试过;

$findString = '$WCREV$'
$findString = '`$WCREV`$'
$findString = "`$WCREV`$"
$findString = "$WCREV$" 

无法使任何工作。如果我尝试WCREV就可以替换它,但是当然我只剩下了$ ..我想我可以修改我的模板,但这似乎是一个愚蠢的小问题所以它可能是可行的,对吧?

1 个答案:

答案 0 :(得分:3)

您正在使用支持正则表达式的-replace$是那里的行锚点。如果您不需要正则表达式,那么只需使用字符串方法替换。

$findString = '$WCREV$'
(Get-Content $inputFile) | foreach {$_.replace($findString,$replaceString)}

要使用您的代码制作原始$findString,您需要使用正则表达式转义字符,这是PowerShell的反斜杠,它就像您尝试的一样。单引号对于防止PowerShell尝试将字符串扩展为变量非常重要。以下任何一个都可以工作,但我的第一个片段是我的建议。

$findString = '\$WCREV\$'
$findString = [regex]::Escape('$WCREV$')