Vbscript para pesquisar por arquivos do Microsoft Word

1

Gostaria de pesquisar em um grande número de arquivos de palavras, todos mantidos na mesma pasta, pesquisando cada palavra-chave em um documento.

Quando um documento é identificado e contém a palavra-chave, o script deve exibir o nome do arquivo do documento em um relatório de arquivo de texto.

Até agora, criei o seguinte script que pesquisa documentos do Word específicos para os termos definidos. Este script é obviamente codificado para arquivos específicos, se você pudesse demonstrar como fazer com que todos os arquivos ".doc" na pasta fossem ótimos. Também não cria o relatório de arquivo de texto.

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
    
por BobJim 13.02.2014 / 17:05

1 resposta

1

O snippet de código a seguir, modificado de um postar por Ansgar Wiechers , permite que você especifique uma pasta e depois crie uma lista baseada na extensão:

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

Modifique o GetFolder("C:\temp") com o caminho de seus arquivos e a parte InStr(f.Path,".txt") com a extensão de documento que você deseja incluir. Quaisquer arquivos encontrados, por exemplo, serão gravados na tela e c:\temp\out.log não deve ser tão difícil de incluir com seu código para que você possa percorrer uma pasta e encontrar os arquivos com .DOC (ou .DOCX ) sobre eles.

Responda ao comentário do autor abaixo:

O código para obter a lista de arquivos na pasta c:\temp começa no loop for each . Examinamos cada nome de arquivo recuperado e, se a string ".txt" estiver no nome do arquivo, ele será adicionado ao objeto list . Você pode alterar a lógica da instrução if...end if alterando primeiro a seção .txt para .doc e, em seguida, adicionando um or Instr(f.path,".docx") antes do then para que os arquivos .DOC e .DOCX sejam encontrados. Quando eu olho para isso, eu provavelmente mudaria o Instr para incluir os 4 e 5 caracteres mais à direita da string, de modo que apenas a extensão seja usada. Como está, se houver um arquivo chamado "este é meu arquivo.txt.pdf", ele será selecionado como a string .txt encontrada. Eu fiz as alterações. Tal como está, o script deve encontrar qualquer arquivo .DOC ou .DOCX na pasta c:\temp

Espero que isso ajude!

    
por 13.02.2014 / 18:49