РЕДАКТИРОВАТЬ: Версия 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\"