我正在尝试在目录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'"
,但我总是收到同样的错误。
答案 0 :(得分:5)
使用搜索字符串周围的单引号并指定SimpleMatch来尝试此操作。
Get-ChildItem -path c:\bats\ -recurse | Select-string -pattern '\\server\public' -SimpleMatch
答案 1 :(得分:3)
要解决这个问题,因为解决方案是@ campbell.rw的答案。 Select-String
参数-Pattern
支持正则表达式。反斜杠是一个控制字符,需要进行转义。这不是你需要从PowerShell中逃脱它,而是正则表达式引擎本身。转义字符也是反斜杠
Select-string -pattern '\\\\server\\public'
您可以使用regex类中的静态方法为您完成这项艰苦的工作。
Select-string -pattern ([regex]::Escape('\\server\public'))
同样,在您的情况下,使用-SimpleMatch
是一个更好的解决方案。