我将几百个Word文档的文本保存到文件夹中的各个.txt文件中。我有一个问题,Word文档中的MergeField格式不正确,现在我需要找到发生错误格式的文件夹中的所有实例。不正确的格式是字符串\#,$##,##0.00\*
所以,我正在尝试使用PowerShell,如下所示:
select-string -path MY_PATH\.*txt -pattern '\#,$##,##0.00\*'
select-string -path MY_PATH\.*txt -pattern "\#`,`$##`,##0.00\*"
但是这些命令都没有找到任何结果,即使我确定该字符串至少存在于一个文件中。我觉得错误正在发生,因为参数中有特殊字符(特别是$
和,
),我没有正确转义,但我不确定如何格式化模式。有什么建议吗?
答案 0 :(得分:3)
如果您确实在寻找\#,$##,##0.00\*
,那么您需要注意Select-String
使用正则表达式,并且您有很多控制字符。你的字符串应该是
\\\#,\$\#\#,\#\#0\.00\\\*
或者您可以使用正则表达式的静态方法Escape
为您执行脏工作。
[regex]::Escape("\#,$##,##0.00\*")
要把这些放在一起,你会得到以下结果:
select-string -path MY_PATH\.*txt -pattern ([regex]::Escape("\#,$##,##0.00\*"))
甚至更简单的是使用参数-SimpleMatch
,因为它不会插入字符串..只是按原样搜索。更多here
select-string -path MY_PATH\.*txt -SimpleMatch "\#,$##,##0.00\*"
答案 1 :(得分:1)
我的尝试,类似于马特:
select-string -path .\*.txt -pattern '\\#,\$##,##0\.00\\\*'
结果:
test.txt:1:\#,$##,##0.00\*