Vbscript 在 Microsoft Word 文件中搜索关键字

Vbscript 在 Microsoft Word 文件中搜索关键字

我想要搜索保存在同一个文件夹中的大量 Word 文件,并在每个文档中搜索关键字。

当识别出包含关键字的文档时,脚本应将文档文件名输出到文本文件报告中。

到目前为止,我已经创建了以下脚本,用于在指定的 Word 文档中搜索设置术语。此脚本显然是针对特定文件进行硬编码的,如果您可以演示如何使其搜索".doc"文件夹中的所有文件,那就太好了。它也不会创建文本文件报告。

Set objWord = CreateObject("Word.Application")
objWord.Visible = True

Set objDoc = objWord.Documents.Open("L:\STSMP00001.docx")
Set objSelection = objWord.Selection

objSelection.Find.Forward = True
objSelection.Find.MatchWildcards = True
objSelection.Find.Text = "presentation"

Do While True
    objSelection.Find.Execute
    If objSelection.Find.Found Then
        strWord = objSelection.Text
        strWord = Replace(strWord, "[[", "")
        strWord = Replace(strWord, "]]", "")
        Wscript.Echo strWord
    Else
        Exit Do
    End If
Loop

Set objWord = CreateObject("Word.Application")
objWord.Visible = True

Set objDoc = objWord.Documents.Open("L:\STSMP00002.docx")
Set objSelection = objWord.Selection

objSelection.Find.Forward = True
objSelection.Find.MatchWildcards = True
objSelection.Find.Text = "presentation"

Do While True
    objSelection.Find.Execute
    If objSelection.Find.Found Then
        strWord = objSelection.Text
        strWord = Replace(strWord, "[[", "")
        strWord = Replace(strWord, "]]", "")
        Wscript.Echo strWord
    Else
        Exit Do
    End If
Loop

答案1

以下代码片段修改自Ansgar Wiechers 发帖,允许您指定一个文件夹,然后根据扩展名创建一个列表:

Set fso = CreateObject("Scripting.FileSystemObject")

Set objLog = fso.CreateTextFile("c:\temp\out.log", true)
Set list = CreateObject("ADOR.Recordset")
list.Fields.Append "name", 200, 255
'list.Fields.Append "date", 7
list.Open

For Each f In fso.GetFolder("C:\temp").Files
    If (UCase(Right(f.Path,4))=".DOC" or UCase(Right(f.Path,5))=".DOCX") then
        list.AddNew
        list("name").Value = f.Path
        'list("date").Value = f.DateLastModified
        list.Update
    end if
Next

list.MoveFirst
Do Until list.EOF
  WScript.Echo list("name").Value
  objLog.write list("name").Value
  list.MoveNext
Loop

list.Close
objLog.Close

GetFolder("C:\temp")使用文件所在路径和InStr(f.Path,".txt")要包含的文档扩展名部分来修改。例如,找到的任何文件都将写入屏幕,并将c:\temp\out.log其包含在代码中应该并不困难,这样您就可以遍历文件夹并找到带有 .DOC(或 .DOCX)的文件。

回答以下作者的评论:

获取文件夹中文件列表的代码c:\tempfor each循环开始。我们查看检索到的每个文件名,如果文件名中包含字符串“.txt”,则会将其添加到对象中list。您可以更改语句的逻辑,if...end if方法是首先将.txt部分更改为.doc,然后or Instr(f.path,".docx")在前面添加一个then,以便找到 .DOC 和 .DOCX 文件。在我看来,我可能会将更改为Instr包含字符串最右边的 4 个和 5 个字符,以便只使用扩展名。就目前而言,如果有一个名为“this is my.txt file.pdf”的文件,它将被选中,因为在其中找到了字符串.txt。我已经做了更改。就目前而言,脚本应该可以找到文件夹中的任何 .DOC 或 .DOCX 文件c:\temp

希望这可以帮助!

相关内容