如何处理 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-Path
和 Get-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。
我正在使用 -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-Path
和 Get-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。