如何读取word文档的内容来确定其是否包含关键字?

如何读取word文档的内容来确定其是否包含关键字?

我有一组 6000 个 word 文档。我试图想办法根据关键字搜索每个 word 文档的内容。然后我会打印出这些结果以便稍后存储。这将迅速加快手动过程的速度。因为我希望对大量文档进行分类。我注意到我已经可以在 Windows 文件资源管理器中的高级搜索功能中执行类似操作。所以我想知道 PC 上是否有某种东西可以让我在 powershell 中完成此任务。此外,就我应该使用哪些功能而言,我应该从哪里开始。

显然我需要使用循环。我应该用什么来读取word文档的内容,以及如何将结果写入文件?

再次感谢!

答案1

帖子 powershell 脚本在 word 文档中查找字符串,如果存在则移动到其他位置 包含以下脚本。我对其进行了修改,删除了移动找到的文档的部分。您可以替换脚本中的$source文件夹和关键字,或将它们变成参数:Security

$word = New-Object -ComObject Word.Application
$source = 'D:\source'
$docs = Get-ChildItem -Path $source | Where-Object {$_.Name -match '.docx'}
foreach ($doc in $docs)
{
    if ($word.Documents.Open($doc.FullName).Content.Find.Execute('Security'))
    {
        Write-Host "$doc contains 'Security'"
    }
    $word.Application.ActiveDocument.Close()
}

本文描述了另一个更为复杂的脚本
查找包含特定短语的所有 Word 文档

答案2

如果包含要搜索的文档的目录是索引位置查询 Windows Search 索引比单独打开和搜索每个文档要快得多。默认情况下,Word 过滤器会索引内容,而不仅仅是文件名。

根据结构这个stackoverflow答案您可能需要类似这样的 SQL 语句 - 显然将其更改SCOPE为您想要搜索的目录以及TESTSTRING您正在寻找的任何单词。

SELECT System.ItemName, System.ItemPathDisplay, System.ItemType 
FROM SYSTEMINDEX 
WHERE SCOPE='C:\Test\' 
AND System.ItemType <> 'Directory'
AND CONTAINS(System.Search.Contents,'*TESTSTRING*') 
AND CONTAINS(System.FileName,'*.docx') 

正如所描述的这里您可以使用 powershell 提取符合这些条件的文档的详细信息,如下所示:

$sql = "SELECT System.ItemName, System.ItemPathDisplay, System.ItemType FROM SYSTEMINDEX WHERE SCOPE = 'C:\Test\' AND CONTAINS(System.Search.Contents,'*TESTSTRING*') AND CONTAINS(System.FileName,'*.docx')"

$provider = "provider=search.collatordso;extended properties='application=windows';"
$connector = new-object system.data.oledb.oledbdataadapter -argument $sql, $provider
$dataset = new-object system.data.dataset

if ($connector.fill($dataset)) { $dataset.tables[0] | select-object System.ItemName, System.ItemPathDisplay, System.ItemType  | format-table -autosize * }

例如 :

截屏

要将结果输出到文件而不是屏幕,请将最后一行更改为使用out-file而不是format-table。例如,这会将结果输出到名为结果.txt在您的桌面上。

if ($connector.fill($dataset)) { $dataset.tables[0] | select-object System.ItemName, System.ItemPathDisplay, System.ItemType  | out-file ~/desktop/Results.txt }

相关内容