如何在PowerShell -replace字符串操作中处理反斜杠字符?

use*_*562 11 powershell replace backslash

我使用-replace来改变从源到目的地的路径.但是我不知道如何处理\字符.例如:

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

$test = "\\somedir\somefile"

$destfile = $test -replace $source, $dest
Run Code Online (Sandbox Code Playgroud)

执行此操作后,$ destfile将设置为

"\\\anotherdir\somefile"
Run Code Online (Sandbox Code Playgroud)

为避免结果中的三重反斜杠,这样做的正确方法是什么?

Ric*_*ard 17

请尝试以下方法:

$source = "\\\\somedir"
Run Code Online (Sandbox Code Playgroud)

你只需要在替换时匹配1个反斜杠,这样就可以在\\\路径的开头给出三个反斜杠.

反斜杠是一个regex转义字符,因此\\将被视为,只匹配一个\而不是两个\\.由于第一个反斜杠是转义字符而不习惯匹配.

另一种处理反斜杠的方法是使用regexescape函数.

$source = [regex]::escape('\\somedir')
Run Code Online (Sandbox Code Playgroud)

  • ```[regex]::Escape()``` 对于包含 '.' 的路径不能按预期工作 (3认同)
  • `[regex] :: Escape()`是更安全的解决方案,因为它也会处理其他特殊字符(如`+`或括号). (2认同)