我正在使用 -replace 更改从源到目标的路径。但是我不确定如何处理 \ 字符。例如:
$source = "\\somedir"
$dest = "\\anotherdir"
$test = "\\somedir\somefile"
$destfile = $test -replace $source, $dest
此操作后,$destfile 被设置为
"\\\anotherdir\somefile"
避免结果中出现三重反斜杠的正确方法是什么?
尝试以下操作:
$source = "\\\\somedir"
替换时您只匹配了 1 个反斜杠,这在路径的开头给出了三个
\\\
。
反斜杠是一个
regex
转义字符,因此 \\
将被视为仅匹配一个 \
而不是两个 \\
。由于第一个反斜杠是转义字符,不用于匹配。
处理反斜杠的另一种方法是使用
regex
escape 函数。
$source = [regex]::escape('\\somedir')
我在遇到
Test-Path
和 Get-Item
问题后来到这里,无法使用带空格的 UNC 路径。部分问题解决了here,另一部分解决如下:
$OrginalPath = "\\Hostname\some\path with spaces"
$LiteralPath = $OriginalPath -replace "^\\{2}", "\\?\UNC\"
结果:
\\?\UNC\Hostname\some\path with spaces
为了完整起见,将其放入
Test-Path
返回 true(假设路径实际存在)。正如 @Sage Pourpre 所说,需要使用 -LiteralPath
:
Test-Path -LiteralPath $LiteralPath
或者
Get-Item -LiteralPath $LiteralPath
-replace
使用正则表达式。
^
表示字符串的开头。\
是转义字符,因此我们用 \
转义 \
。\
,我们告诉正则表达式使用 \
查找 2 次出现的 {2}
。您可以按照
@Richard所说的操作并使用四个
{2}
,而不是使用 \
。一个逃脱了另一个。
尝试一下这里。