Mesclar 70.000 arquivos RTF / DOC em um

2

Eu quero mesclar 70.000 arquivos RTF e DOC em um.

Eu tentei usar o Microsoft Word 2010 e fazer "Inserir" → "Objeto" → "Texto do arquivo", mas ele tem algumas limitações, pois não agrupa mais do que algumas dúzias de arquivos, não importa o quão muitos que você seleciona.

Existem alguns utilitários (de preferência de código aberto) que podem mesclar tal quantidade de arquivos razoavelmente rápido?

    
por Andrew 12.05.2012 / 20:11

2 respostas

3

Aqui vai você. Eu estou atualmente no joelho em AutoIt, então eu usei isso. Você pode obter a própria ferramenta em autoitscript.com.

Notas:

  • Eu limito Ctrl + Shift + I ao comando InsertFile do Word, você deve fazer o mesmo para que o script funcione. Google ou pesquise no StackExchange.

  • O script funciona a partir do pressuposto de que um documento vazio já está aberto no MS Word e que existe apenas uma janela do MS Word.

  • Modifique o valor de $ locationOfRtfFiles para corresponder à sua configuração. Deve apontar para a pasta que contém os RTFs.

  • O intervalo de suspensão pode exigir ajuste (depende do desempenho do computador e do tamanho / complexidade dos arquivos RTF)

O código (um pouco mais de 10 linhas, mas vamos esperar que ninguém esteja contando):

; Some common sense stuff, look it up in the docs
AutoItSetOption("TrayIconDebug", 1)
AutoItSetOption("MustDeclareVars", 1)
; Tell AutoIt to match the substring anywhere in the window title
AutoItSetOption("WinTitleMatchMode", 2)

; find a window by title and some contained text (optional),
; make it active and wait for the window to become
; active
Func MyWinWait($title, $keytext = "")
    WinWait($title, $keytext)
    WinActivate($title, $keytext)
    WinWaitActive($title, $keytext)
    Return
EndFunc

Local $locationOfRtfFiles = "C:\MyCollectionOfRtfPorn"

; for every file in the set
For $fileIndex = 1 to 70000
    ; focus on the main Word window
    MyWinWait("Microsoft Word")

    ; emulate Ctrl+Shift+I
    Send("{CTRLDOWN}{SHIFTDOWN}i{SHIFTUP}{CTRLUP}")

    ; wait for the Insert File window to open
    MyWinWait("Insert File")
    ; type out a file's name
    Send($locationOfRtfFiles & "\" & $fileIndex & ".rtf")
    ; confirm selection
    Send("{ENTER}")

    ; sleep for 10 seconds before proceeding to next file
    Sleep(10000)
Next

Você pode querer ajustar o limite de ciclo com base no número real de RTFs. Além disso, se a nomenclatura dos arquivos não seguir o esquema de numeração especificado originalmente, o script precisará de alterações.

    
por 12.05.2012 / 21:01
1

Se você estiver usando um sistema operacional UNIX, use o seguinte:

textutil -cat rtf *.rtf *.doc -output combinedFiles.rtf
    
por 12.05.2012 / 21:11