7

我正在尝试在目录中搜索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"or"'\server\public'"但我总是收到同样的错误。

4

2 回答 2

7

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

Select-string -pattern '\\\\server\\public'

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

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

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

于 2015-02-05T14:56:48.130 回答
7

Try this using single quotes around your search string and specifying SimpleMatch.

Get-ChildItem -path c:\bats\ -recurse | Select-string -pattern '\\server\public' -SimpleMatch
于 2015-02-05T14:49:38.473 回答