1

Я хотел бы найти в большом количестве файлов слов, содержащихся в одной папке, поиск по каждому документу по ключевому слову.

Когда документ идентифицирован, который содержит ключевое слово, сценарий должен вывести имя файла документа в текстовый отчет.

До сих пор я создал следующий скрипт, который ищет заданные слова в документах по заданным терминам. Этот сценарий, очевидно, жестко запрограммирован для конкретных файлов, если бы вы могли продемонстрировать, как заставить его искать все файлы ".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 ответ1

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:\temp начинается в for each цикле. Мы смотрим на каждое полученное имя файла, и если строка «.txt» находится в имени файла, она будет добавлена в объект list . Вы можете изменить логику , if...end if , если заявление первого изменения .txt раздел в .doc , а затем добавление or Instr(f.path,".docx") до того , как then так , что оба.ДОК и.Файлы DOCX найдены. Когда я смотрю на это, я, вероятно, изменил бы Instr чтобы включить самые правые 4 и 5 символов строки, чтобы использовалось только расширение. На самом деле, если есть файл с именем «это my.txt file.pdf», он будет выбран в качестве строки .txt . Я внес изменения. В таком виде скрипт должен найти любой.ДОК или.DOCX файлы в папке c:\temp

Надеюсь это поможет!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .