Dateien zusammenkopieren

Praxis & Tipps | Tipps & Tricks

Ich versuche, unter DOS mehrere doc- und rtf-Dateien in eine Datei zu kopieren. Mit copy *.doc ziel.doc oder copy *.rtf ziel.rtf kommt jedoch immer nur eine Datei an.
Im Prinzip funktioniert das Zusammenkopieren von Dateien genau so, wie Sie es beschreiben, und sollte zum Beispiel bei reinen Textdateien auch zum gewünschten Ergebnis führen. Auch in Ihrem Fall besteht die entstehende Zieldatei durchaus aus einer Aneinanderkettung der einzelnen Dateien - zu erkennen beispielsweise daran, dass ihre Größe der Summe der Größen der Quelldateien entspricht.

Dass Word in der Zieldatei nur den Inhalt der ersten Quelldatei anzeigt, liegt am Dateiformat: Sowohl doc- als auch rtf-Dateien enthalten am Anfang neben Informationen über Autor oder verwendete Formate auch eine Angabe über die Größe der Datei. Diese wertet Word aus und zeigt die Datei eben nur bis zu dieser Grenze an. Ein neuer Datei-Header mitten im Dokument, wie er beim Zusammenkopieren entsteht, ist im Dateiformat nicht vorgesehen.

Um mehrere doc- oder rtf-Dateien zusammenzukopieren, muss man Word selbst bemühen, damit am Ende wieder ein gültiges Dokument herauskommt. Das lässt sich glücklicherweise automatisieren: Über den Soft-Link erhalten Sie die Windows-Script-Host-Skripte DocCollect.vbs und RTFCollect.vbs, die das erledigen. Um sie im schnellen Zugriff zu haben, kopieren Sie sie zweckmäßigerweise in das Windows-Verzeichnis.

Als Aufrufparameter erwarten beide Skripte ein Verzeichnis, in dem sie dann nach doc- beziehungsweise rtf-Dateien suchen, und den Namen der zu speichernden zusammengefügten Datei. Ein typischer Aufruf auf der Eingabeaufforderung sieht etwa so aus

DocCollect.vbs Protokolle AlleProtokolle.doc

und demonstriert, dass die Skripte mit relativen Pfaden umgehen können. (hos)

Set args = WScript.Arguments
srcDir = args(0)
destFName = args(1)
Set fso = CreateObject("Scripting.FileSystemObject")
Set fol = fso.GetFolder(srcDir)
Set fils = fol.Files
Set doc = CreateObject("Word.Document")
Set sel = doc.range
liste = ""
For Each fil in fils
If LCase(Right(fil.path, 4)) = ".doc" Then
sel.InsertFile fil.path, , False
sel.Collapse 0
liste = liste & fil.path & vbCr
End If
Next
destFName = fso.GetAbsolutePathName(destFName)
If Len(liste) > 0 Then doc.SaveAs destFName
doc.Close

DocCollect.vbs (hier ohne Fehlerbehandlung) kopiert alle Word-Dokumente aus einem Ordner in eine Datei zusammen.

Infos zum Artikel

Anzeige

Anzeige

Anzeige