如何避免Powershell中的反斜杠

我正在写一个PowerShell程序来replace使用的string

-replace "$in", "$out" 

它不适用于包含反斜杠的string,我该如何逃避它?

Solutions Collecting From Web of "如何避免Powershell中的反斜杠"

-replace运算符使用正则表达式,将反斜杠视为特殊字符。 你可以使用双反斜杠来得到一个单一的反斜杠。

在你的情况下,因为你正在使用变量,我假设你不会知道在设计时的内容。 在这种情况下,你应该运行它[RegEx]::Escape()

 -replace [RegEx]::Escape($in), "$out" 

该方法转义任何特殊的正则表达式,使其成为文字匹配所需的任何字符(其他特殊字符包括.$^()[]等等。

您需要使用另一个反斜杠或者使用.Replace()方法而不是使用-replace运算符来避免模式中的反斜杠(但请注意它们可能会有不同的表现):

 PS C:\> 'asdf' -replace 'as', 'b' bdf PS C:\> 'a\sdf' -replace 'a\s', 'b' a\sdf PS C:\> 'a\sdf' -replace 'a\\s', 'b' bdf PS C:\> 'a\sdf' -replace ('a\s' -replace '\\','\\'), 'b' bdf 

请注意,只有搜索模式字符串需要转义。 代码替换-replace '\\','\\'表示,“用反斜杠文字字符串'\\'替换转义字符串'\\' ,这是一个反斜杠。” '\\'是两个反斜杠。

所以,你应该可以使用:

 -replace ("$in" -replace '\\','\\'), "$out" 

[注: 海湾人的解决方案更好。]

但是,如果您的模式具有连续的反斜杠,则需要对其进行测试。

或者,您可以使用.Replace()字符串方法,但正如我上面所说的,它可能不完全匹配-replace运算符的行为:

 PS C:\> 'a\sdf'.replace('a\\s', 'b') a\sdf PS C:\> 'a\sdf'.replace( 'a\s', 'b') bdf