如何处理 PowerShell 中的反斜杠字符 - 替换字符串操作?

How to handle backslash character in PowerShell -replace string operations?

我正在使用 -replace 更改从源到目标的路径。但是我不确定如何处理 \ 字符。例如:

$source = "\somedir"
$dest = "\anotherdir"

$test = "\somedir\somefile"

$destfile = $test -replace $source, $dest

此操作后,$destfile 设置为

"\\anotherdir\somefile"

避免结果中出现三重反斜杠的正确方法是什么?

尝试以下操作:

$source = "\\somedir"

您在替换时只匹配了 1 个反斜杠,这给了您路径开头的三个 \\

反斜杠是一个 regex 转义字符,因此 \ 将被视为仅匹配一个 \ 而不是两个 \。由于第一个反斜杠是转义字符,不用于匹配。

另一种处理反斜杠的方法是使用 regex 转义函数。

$source = [regex]::escape('\somedir')

我是在遇到 Test-PathGet-Item 无法使用带空格的 UNC 路径的问题后来到这里的。部分问题解决,另一部分解决如下:

$OrginalPath = "\Hostname\some\path with spaces"
$LiteralPath = $OriginalPath -replace "^\{2}", "\?\UNC\"

结果: \?\UNC\Hostname\some\path with spaces

为了完整起见,将其放入 Test-Path returns true(假设该路径确实存在)。正如 @Sage Pourpre 所说,需要使用 -LiteralPath:

Test-Path -LiteralPath $LiteralPath 要么 Get-Item -LiteralPath $LiteralPath

replacement operator -replace 使用正则表达式。

  • ^ 表示字符串的开始。
  • \ 是转义字符,所以我们用 \.
  • 转义 \
  • 因为我们有两个 \,所以我们告诉正则表达式使用 {2}.
  • 精确查找两次出现的 \

您可以按照 @Richard 所说的使用四个 \ 而不是使用 {2}。一个逃脱另一个。

试一试here