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


1

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

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

到目前为止,我已经创建了以下脚本,用于搜索指定的单词docs以设置术语。对于特定文件,此脚本显然是硬编码的,如果您可以演示如何使其全部搜索 ".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

Answers:


1

以下代码片段,从a修改而来 由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 不应该难以包含您的代码,以便您可以遍历文件夹,只需找到带有.DO​​C(或.DOCX)的文件。

回答作者的评论如下:

获取文件夹中文件列表的代码 c:\temp 开始于 for 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

希望这可以帮助!


JSanchez请你指点我的代码方向,可以遍历文件夹寻找doc / docx文件?
BobJim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.