PowerShell -Заменить добавление (как ни странно) вместо замены - PullRequest
0 голосов
/ 02 октября 2019

РЕДАКТИРОВАТЬ: Версия 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 голосов
/ 05 октября 2019

Проблема заключалась в возврате каретки (\ r или `r в PowerShell), который мое регулярное выражение включало в совпадение, что вызывало поведение при замене строки. Спасибо PerSerAl за вторую пару глаз, чтобы поймать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...