选择字符串转义字符

时间:2015-02-05 14:47:47

标签: 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 "\\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'",但我总是收到同样的错误。

2 个答案:

答案 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是一个更好的解决方案。