web-dev-qa-db-ja.com

70,000のRTF / DOCファイルを1つにマージします

70,000個のRTFとDOCファイルを1つにマージしたい。

Microsoft Word 2010を使用して、[挿入]→[オブジェクト]→[ファイルからのテキスト]を実行しようとしましたが、選択したファイルの数に関係なく、数十を超えるファイルをつなぎ合わせないため、いくつかの制限があります。 。

そのような量のファイルを適度に速くマージできる(できればオープンソースの)ユーティリティはありますか?

3
Andrew

どうぞ。私は現在AutoItにひざまずいているので、それを使用しました。ツール自体はautoitscript.comで入手できます。

ノート:

  • Ctrl + Shift + IをWordのInsertFileコマンドにバインドしました。スクリプトを機能させるには、同じことを行う必要があります。 Googleで検索するか、StackExchangeで検索してください。

  • このスクリプトは、空のドキュメントがMS Wordで既に開いており、MSWordウィンドウが1つしかないという前提で機能します。

  • $ 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の数に基づいてサイクル制限を調整することをお勧めします。また、ファイルの名前が最初に指定した番号付けスキームに従わない場合は、スクリプトを変更する必要があります。

3
minya

UNIX OSを使用している場合は、以下を使用してください。

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