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.