Powershell 选择字符串转义字符

Powershell 选择字符串转义字符,powershell,escaping,character,unc,select-string,Powershell,Escaping,Character,Unc,Select String,我试图在目录c:\bats\中搜索包含unc路径\\server\public 命令: Get-ChildItem -path c:\bats\ -recurse | Select-string -pattern "\\server\public" 我收到一个与字符串\\server\public相关的错误: Select-string : The string \\server\public is not a valid regular expression: parsing "\\serv

我试图在目录
c:\bats\
中搜索包含unc路径
\\server\public

命令:

Get-ChildItem -path c:\bats\ -recurse | Select-string -pattern "\\server\public"
我收到一个与字符串
\\server\public
相关的错误:

Select-string : The string \\server\public is not a valid regular
expression: parsing "\\server\public" - Malformed \p{X} character
escape. At line:1 char:91
+ ... ts" -recurse | Select-string -pattern \\server\public
+                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [Select-String], ArgumentException
+ FullyQualifiedErrorId : InvalidRegex,Microsoft.PowerShell.Commands.SelectStringCommand

我尝试过使用各种转义,例如
“\server\public”
“\server\public”
,但我总是收到相同的错误。

尝试在搜索字符串周围使用单引号并指定SimpleMatch

Get-ChildItem -path c:\bats\ -recurse | Select-string -pattern '\\server\public' -SimpleMatch

由于@campbell.rw的答案中提供了解决方案,因此需要对问题进行更多的扩展。
Select String
参数
-Pattern
支持正则表达式。反斜杠是一个控制字符,需要转义。您不需要从PowerShell中退出它,而是需要正则表达式引擎本身。转义字符也是反斜杠

Select-string -pattern '\\\\server\\public'
您可以使用regex类中的静态方法来完成这项艰巨的工作

Select-string -pattern ([regex]::Escape('\\server\public'))

同样,在您的情况下,使用
-SimpleMatch
是一个更好的解决方案

谢谢你的澄清!如果模式是可变的怎么办?@ShreedharDhanawade我不知道你的情况,但我发现我的问题是我无意中使用了一个数组作为匹配的变量。我缩小到一根绳子,这就解决了问题。