选择字符串转义字符

rob*_*rob 3 powershell escaping character unc select-string

我正在尝试在目录c:\bats\中搜索包含unc路径的批处理文件\\server\public

命令:

Get-ChildItem -path c:\bats\ -recurse | Select-string -pattern "\\server\public"
Run Code Online (Sandbox Code Playgroud)

我收到与字符串相关的错误\\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
Run Code Online (Sandbox Code Playgroud)

我一直在使用各种转义如试图"\server\public""'\server\public'"但我总是收到同样的错误.

Mat*_*att 6

由于解决方案在@campbell.rw 的答案中,因此要进一步扩展该问题。该Select-String参数-Pattern支持正则表达式。反斜杠是控制字符,需要转义。不是你需要从 PowerShell 中转义它,而是正则表达式引擎本身。转义字符也是反斜杠

Select-string -pattern '\\\\server\\public'
Run Code Online (Sandbox Code Playgroud)

您可以使用正则表达式类中的静态方法来为您完成这项艰巨的工作。

Select-string -pattern ([regex]::Escape('\\server\public'))
Run Code Online (Sandbox Code Playgroud)

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


cam*_*.rw 5

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

Get-ChildItem -path c:\bats\ -recurse | Select-string -pattern '\\server\public' -SimpleMatch
Run Code Online (Sandbox Code Playgroud)