编辑: 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\"