PowerShell-替换(奇数次)替换而不是替换

时间:2019-10-02 20:04:10

标签: powershell

编辑: PowerShell版本为5.1

我正在编写一些代码,该代码将从文件中获取变量的值,如果该字符串由文件中的其他变量组成,它将查找并替换它们以重建运行时值。它假定变量包含一个字符串,并且该字符串描述了一个目录。

例如,文件包含:

$var0 = "C:\Users\v-anad\Documents"
$var1 = "$var0\TestFolder"

然后,当代码查找$var1时,它应返回类似以下内容的内容:"C:\Users\v-anad\Documents\TestFolder\"

但是,我看到的实际输出是: \TestFolder"-anad\Documents"

替换时,它将删除正确的子字符串($var0),但是当插入$var0的值时,它将跳过之前存在的字符,并将其余字符追加到字符串的结尾。我不知道哪里出问题了。

这是有问题的代码:

function Get-Var-Value-In-File([string]$varName, [string]$file) {
    $regex = "(?<=\$varName = )[^`n]*"
    $content = Get-Content -Raw $file
    return  [regex]::Match($content, $regex).Value
}

$file = 'C:\Users\v-anad\Documents\TestFolder\TestVars.ps1'
$var = '$var1'
$value = Get-Var-Value-In-File $var $file
$regex = "\$[^\\]*"
$nextVar = [regex]::Match($value, $regex).Value
$nextValue = Get-Var-Value-In-File $nextVar $file

Write-Output "$var = $value"
Write-Output "$nextVar = $nextValue"
Write-Output $nextVar.Replace($nextVar, $nextValue)
Write-Output ($value -replace [regex]::Escape($nextVar),$nextValue)

输出:

$var1 = "$var0\TestFolder"
$var0 = "C:\Users\v-anad\Documents"
"C:\Users\v-anad\Documents"
\TestFolder"-anad\Documents"

请注意,上面的代码如何不解释插入最终值中的多余引号,因此,如果要解决此奇怪的问题,输出将为:""C:\Users\v-anad\Documents"\TestFolder\"

1 个答案:

答案 0 :(得分:0)

问题是我的正则表达式包含在匹配中的回车符(\ r或PowerShell中的`r),导致在发生字符串替换时的行为。感谢PerSerAl成为吸引我们的第二双眼睛。