104. Extrahieren von Bildern von Docx-Dokumenten mit Batch

Einleitung

Ab Word 2007 gibt es die Speicherung im Docx-Format.

Das Extrahieren von Bildern aus Docx ist eigentlich nichts neues. Einfach die Dateiendung in *.zip umändern (Dazu muss die Ansicht mit Dateiendungen aktiviert sein: einfach im Ordner beliebigen Ordner öffnen: Organisieren - Layout - Menüleiste auswählen. In der Menüleiste: Extras - Ordneroptionen - Reiterkarte Ansicht: Dort Häkchen entfernen bei: Erweiterungen bei bekannten Dateitypen ausblenden.), danach mit Explorer in die Unterverzeichnisse word und Media und da liegen dann die Bilder im PNG-Format.

Damit entfiel die Ochsentour in den niedrigeren Wordversionen, dass Dokument als Webseite (htm,html) zu speichern und aus dem generierten Ordner mit Bildern diese zu extrahieren.

Der Sternenhimmelsturmer schrieb also Mal zwei Zeilen Code, um gerne auch mehrere Docx in valide Zip-Dateien umzuwandeln, deren Ordner mit den Bilddateien dann geöffnet werden. Legen Sie dazu die Batch in den Ordner mit den Docx-Dokumenten.
Dann können Sie die Bilder in Ruhe extrahieren. Es sollten also nur eine begrenzte Anzahl an Dateien im Ordner liegen, da so viele Bildordner geöffnet werden, wie Dateien vorhanden sind...


Inhaltsangabe

1. die Batch
2. Wie erstelle ich eine Batch
3. Zeile für Zeile erklärt
4. Abwandlung zur einfacheren Bedienung für den User
5. Fazit

1.Die Batch

Name: extrations.bat

----
copy *.docx *.zip
for %%f in ("*.zip") do start "" "C:\Users\Sternenhimmel stuermer\Desktop\test\%%f%\word\media"

---

Unschwer zu erkennen: Sie müssen den weiß geschriebenen Pfad bis zum Ordner test anpassen und dann das blau geschriebene Ende anfügen. Der weiße Text ist der Pfad, bis zu dem Ordner, in dem  die Batch mit den Dokumenten liegt!
Warum das so ist, wird gleich erklärt. Ansonsten die fertige Batch in den Ordner mit den Docx-Dokumenten legen! Die erste Zeile ist relativ - die funktioniert somit nur bei Dokumenten in der Nachbarschaft.

Nachtrag: Bei einer Testung einen Tag später kam eine Fehlermeldung. Der Explorer zeigte beim Bestätigen der Meldung zwar immer korrekt die Dateien an, aber die Fehlermeldung musste erst weggedrückt werden - leicht unverständlich...

2. Wie erstelle ich eine Batch?

Zur Erstellung einer Batch (*.bat) brauchen Sie nur bordeigene Mittel (Texteditor)

1. Als Voraussetzung müssen Sie sich bekannte Dateiendungen anzeigen lassen: beliebigen Ordner öffnen: Organisieren - Layout - Menüleiste auswählen. In der Menüleiste: Extras - Ordneroptionen - Reiterkarte Ansicht: Dort Häkchen entfernen bei: Erweiterungen bei bekannten Dateitypen ausblenden.

2. Nun auf dem Desktop oder in einem Ordner mit rechter Maustaste auf freie Fläche drücken und neu - Textdokument auswählen.

3. Neues Textdokument öffnen (linker Doppelmausklick) und folgenden Code durch kopieren über die Zwischenablage einfügen:

copy *.docx *.zip
for %%f in ("*.zip") do start "" "C:\Users\Sternenhimmel stuermer\Desktop\test\%%f%\word\media"

Wie gesagt, der Code muss an ihren Pfad angepasst werden, wo die Dateien liegen... Doppelnamen sind diesmal unproblematisch. Es sollten nicht zuviel Dateien in dem Ordner liegen, da alle Bilderordner zur Auswahl geöffnet werden - bei 20-30 Dateien kann das sehr nervend werden...

3. Zeile für Zeile erklärt



Das ist für zwei Zeilen in Ordnung, mehr ist zur Zeit nicht drin...


copy *.docx *.zip


Man kann die Docx - Dateien einfach durch Änderung der Dateiendung ändern. Das ist die also eher ein Ausnahmebefehl, den keine andere Webseite für eine andere Funktion verwenden kann. Im Prinzip ist eine Docx-Datei also nur ein Verzeichnis mit mehreren Unterordnern im Zip-Format - nur eben mit der mysteriösen Endung Docx.

Was passiert? Der Stern ist eine Wildcard und der Befehl heißt übersetzt: Kopiere alle Docx-Dateien im selben Ordner (Quellordner) als Zip-Dateien mit der ursprünglichen Namensbezeichnung im Zielordner, der eben auch gleichzeitig Quellordner ist. Eine Batch startet beim Doppelklicken im Ordner, wo Sie liegt. Deshalb ist keine Pfadangabe nötig.


for %%f in ("*.zip") do start "" "C:\Users\Sternenhimmel stuermer\Desktop\test\%%f%\word\media"


Batchdateien werden oft zur Stapelverarbeitung verwendet. Deshalb sollten Sie in Abständen den For-Befehl trainieren.  Das fängt mit  der  Webhilfe an (mit der Beschreibung kommen nur Profis zu recht, oder schauen Sie sich praktische Beispiele auf der Sternenhimmelstuermerseite an - einfach mal for in die Googlesuche auf dieser Seite eingeben - da dürften einige hilfreiche Treffer dabei sein.


for %%f in ("*.zip") do start "" "C:\Users\Sternenhimmel stuermer\Desktop\test\%%f%\word\media" heißt frei übersetzt:
Für die Variable F, die in (diesem Ordner) gleichzusetzen ist mit allen Dateinamen mit der Endung Zip ("*.zip") soll jeweils das Explorerfenster mit dem Pfad zur Datei im Zippordner gestartet werden (start "" "C:\Users\Sternenhimmel stuermer\Desktop\test) und zwar im Pfad zur Zipp-Datei  mit den Unterordnern (\%%f%\word\media") des Zipp-Ordners.


Das führt jetzt ein wenig in die Konfusion. Ja, es ist möglich, sich Unterordner von Zip-Ordnern mit dem Explorer anzuschauen. Das wissen Sie auch so. Wenn Sie auf ein Zip-Archiv im Explorer klicken, so wird die nächste Verzeichnisebene angezeigt. Im oberen Teil des Explorers steht dann immer die Option zum Extrahieren - oder im Eigenschaftsmenü. Mit dem Befehl start "" "Pfad" wird der Explorer angewiesen den betreffenden Pfad zu öffnen.

Diese Schwachstelle/Stärke des Explorers nutzt der Sternenhimmelstuermer aus, um an Dateien von Zip-Archiven heranzukommen. Genauso kann man auch andere Dateien wie Bilder in Zip-Archiven öffnen.

Wie das? Der Explorer hat eine Verteilerfunktion. Wenn Sie z. B. eine Bilddatei öffnen, dann wird das Programm geöffnet, dessen Dateiendung mit einem Standardprogramm zur Öffnung eingetragen ist. Der Explorer kommt auch in die Unterverzeichnisse der Zip-Archive. Um es kurz zu machen: Das Bild in einem Zip-Archiv kann genauso mit dem Startbefehl geöffnet werden - mit der Windowsbildanzeige in diesem Fall...


(\%%f%\word\media")


Das mysteriöse %%f% ist übrigens Der Name eines Dateinamens mit der Endung Zip. Sie erinnern sich? Batches mit einem For-Befehl sind Stapelverarbeitungsdateien. In einem Dokument wird Zeile für Zeile abgearbeitet.

In unserem Fall wird ZIP-Datei nach Zip-Datei abgearbeitet, bis keine mehr vorhanden ist. Das kann auch nur eine Zip-Datei sein - so gesehen ein kleiner Stapel -:) . Das zweite %%f% ist also eine Variable für einen Zip-Ordner, in dessen Verzeichnissen word\media der Explorer das Windowsfenster öffnet.

Danach passiert das mit dem nächsten Docx, soweit vorhanden.

Ginge das nicht einfacher?

Leider nein. Der Windowsexplorer kann mit der Wildcard Stern leider nicht so viel anfangen und braucht direkte Pfade, die er durch die Variable %%f% bekommt. Für jede Öffnung also ein valider Pfad. Die Prozentzeichenverteilung beinhaltet eine Verdopplung, weil wir uns in einer Batch befinden.

word\media

Das ist der feste Pfad in der Zipp-Datei. Der ist bei jedem Docx gleich. Hingegen können die Formate der Bilder abweichend sein...JPG oder PNG....

Das ist dann so ziemlich alles...

4. Abwandlung zur einfacheren Bedienung für den User


Wir fügen jetzt eine Zeile mehr zu, um die Anwendung für den User einfacher zu gestalten:

-----

set /p pfad= Geben Sie den Pfad zu den docx-Dokumenten an!
copy "%pfad%\*.docx" "%pfad%\*.zip"
for %%f in ("%pfad%\*.zip") do start "" "%%f%\word\media"
-----

Die erste Zeile ist schnell erklärt: set /p pfad ist die Definierung einer Variable mit Namen Pfad. Der Text nach dem Gleichheitszeichen wird nach dem Doppelklick des Users angezeigt. Dieser trägt dann den Pfad zu den Dokumenten ein. Die Lage der Batch ist nun egal - warum sehen Sie, wenn Sie die Erklärung für die nächsten Zeilen lesen:

copy "%pfad%\*.docx" bewirkt, dass nun der Pfad zum Ordner führt, wo alle Docx liegen (Quellverzeichnis der Kopierfunktion). Die Anführungszeichen sind ein liebevolles Detail: Hat ein User einen Doppelnamen oder Ordner mit Leerzeichen im Pfad, dann wird der Pfad dennoch richtig verarbeitet. Das ist bei der Dosbearbeitung in der Kommandozeile ein wichtiges Detail. Aus diesem Grund vergibt der Sternenhimmelstuermer absichtlich einen Doppelnamen mit Leerzeichen für sein Benutzerkonto. Viele Batches funktionieren dadurch erstmal nicht: Zur Erinnerung: der Pfad zum Desktop ohne Systemvariablen ist bei einem Doppelnamen mit Leerzeichen so in der Art: C:\Users\Manfred sternenhimmelstuermer\Desktop\you tube beim Ordner you tube, der in diesem Falle schon wieder ein Leerzeichen enthält. Erstellen Sie zur Übung einen Ordner mit einem Leerzeichen, nehmen Sie die Anführungszeichen weg und schauen sich die Fehlermeldung an - Anfängerfehler: den begehen leider auch viele Profis, weil Sie von Natur aus DOS-konforme Namen verwenden und aus allen Wolken fallen, wenn User nicht DOS-konforme Dateinamen verwenden.

Bei dem Ziel "%pfad%\*.zip" der Kopieraktion  gibt es nichts neues zu berichten.  Wir erstellen im selben Ordner, den der User als Pfad eingab, die Zip-Dateien.

Die dritte Zeile for %%f in ("%pfad%\*.zip") do start "" "%%f%\word\media" muss nur noch bezüglich des Pfades angepasst werden, wo die Stapelverarbeitung stattfindet. Das muss eben nicht derselbe Ordner sein, sondern kann irgendwo in einem Verzeichnis auf dem Computer sein. Da begegnen wir wieder den Anführungszeichen - wozu die gut sind, wurde bereits erklärt...

Da steckt jetz übrigens auch für fortgeschritten User  eine kleine Falle drin %%f ist nämlich der ganze Pfad! Das heißt Menschen, die versucht sind ...%pfad%\%%f\ßword\media hinzuschreiben, bekommen eine Fehlermeldung, da Sie die Pfadangabe verdoppelt haben. Ist keine Schande, passierte dem Sternenhimmelstuermer beim ersten Versuch auch. Wichtig bei For-Schleifen ist das genaue Lesen der Fehlermeldungen. Gerade wenn Pfade nicht gefunden werden, dann sehen in der Fehlermeldung  den  Pfadfehler in Kombination mit einem Text, der sinngemäß lautet kann z. B. Pfad C:\x\y%\z nicht finden. Schauen Sie sich dann den Pfad wirklich genau an - egal ob ein Prozentzeichen zuviel oder ?. Diese Fehler sind leicht zu finden!
 
Übrigens ist das der einfachere Weg: Zuerst konkret die Grundidee möglichst mit direkten Pfaden aufbauen. Später die Batch mit Variablen trimmen. Der Sternenhimmelstuermer findet das so herum einfacher. Bei größeren Projekten ab 15 Zeilen ist das dann schwerer - bis dahin kommen die meisten Gelegenheitsschreiber aber eher selten...

5. Fazit


Zwei bzw. drei Zeilen Code, über die man  stundenlang schreiben könnte! Die kleine Batch sollte nur ein wenig Einblick in die Batch- und Windowswelt geben. Nebenbei ist die Batch nach Anpassung ein nützliches Helferlein. Keine einfache Abhandlung - aber wer die versteht, kann gerne mit vier Zeilen weitaus mehr erreichen...






Haftungsausschluss - Das verwenden von Tipps oder Software auf dieser Seite auf eigene Gefahr.




Impressum
Datenschutz