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

问题描述 投票:0回答:2

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

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

$test = "\\somedir\somefile"

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

此操作后,$destfile 被设置为

"\\\anotherdir\somefile"

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

powershell replace backslash
2个回答
29
投票

尝试以下操作:

$source = "\\\\somedir"

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

\\\

反斜杠是一个

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

处理反斜杠的另一种方法是使用

regex
escape 函数。

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

1
投票

我在遇到

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},而不是使用
\
。一个逃脱了另一个。

尝试一下这里

© www.soinside.com 2019 - 2024. All rights reserved.