2

Я хочу объединить 70 000 файлов RTF и DOC в один.

Я попытался использовать Microsoft Word 2010 и выполнить команду "Вставить" → "Объект" → "Текст из файла", но у него есть некоторые ограничения, поскольку он не объединяет более пары десятков файлов, независимо от того, сколько вы выберете ,

Существуют ли какие-либо (желательно с открытым исходным кодом) утилиты, которые могут сравнительно быстро объединять такое количество файлов?

2 ответа2

3

Ну вот. В настоящее время я по колено в AutoIt, поэтому я использовал это. Вы можете получить сам инструмент на autoitscript.com.

Заметки:

  • Я связал Ctrl+Shift+I с командой Word InsertFile , вы должны сделать то же самое, чтобы скрипт работал. Google это или посмотрите на StackExchange.

  • Сценарий работает исходя из предположения, что пустой документ уже открыт в MS Word и что существует только одно окно MS Word.

  • Измените значение $ locationOfRtfFiles в соответствии с вашими настройками. Он должен указывать на папку, содержащую RTF.

  • Интервал ожидания может потребовать корректировки (зависит от производительности вашего компьютера и размера / сложности файлов RTF)

Код (чуть более 10 строк, но будем надеяться, что никто не считает):

; 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

Вы можете настроить ограничение цикла на основе фактического количества RTF. Кроме того, если имена файлов не соответствуют схеме нумерации, которую вы изначально указали, сценарий потребует изменений.

1

Если вы используете ОС Unix, используйте следующее:

textutil -cat rtf *.rtf *.doc -output combinedFiles.rtf

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