roschka
Goto Top

Ich möchte das Filesystem-Erstellungsdatum einer (Bild)Datei auf das EXIF CreateDate setzen per BATCH oder VBS (und ExifTool)

Ich habe nur ridimentäre Kenntnisse im Scripting und komme manchmal alleine nicht weiter. Hier brauche ich Hilfe für Exiftool.

back-to-topProblem:

wenn Dateien auf einen anderen Datenträger kopiert werden, bekommen sie dort ein neues Erstellungsdatum. (Das Datum der letzten Änderung ist manchmal Jahre früher.)
Da Picasa (und andere Kataloge wohl auch) diese Bilder "gerne nach Datum sortiert" anzeigt, ist dieses Kopierdatum unbrauchbar und nachteilig. Darum möchte ich das gern auf das tatsächliche Erstellungsdatum des Dokumentes setzen. In manchen Digitalfotos ist das direkt in die Pixel geschrieben und man kann es von dort ablesen, andere haben das noch in den EXIF oder IPTC drin stehen.

Das Dateidatum läßt sich recht gut mit FileTouch.exe auf den gewünschten Wert setzen. Für den Zweck habe ich mir auch schon eine funktionierende Batch-Datei geschrieben, die ich nun bequem über Rechtsklick "öffnen mit ..." auswählen kann. Aber die Angabe des Datums (und der Zeit) muß ich derzeit noch manuell in das DOS-Fenser eingeben, was dann erscheint.
Daher würde ich gerne mit ExifTool das CreateDate (bzw alternativ auch noch DateTimeOriginal wenn CreateDate leer ist) auslesen und in eine Variable schreiben, welche dann FileTouch übernimmt.
Nur leider ist die Dokumentation zu ExifTool so grrottig, das ich fast nichts verstehe.

Immerhin konnte ich schon mal Rückgaben erhalten, doch so nicht weiterverwenden. Mit
E:\xyz\GeoSetter\tools>exiftool -d '%r %a, %B %e, %Y' -creationdate -S -s "E:\Dokumente und Einstellungen\Ronald\Eigene Dateien\Eigene Bilder\org*.jpg"  
wird Bspw.: "E:\Dokumente und Einstellungen\Ronald\Eigene Dateien\Eigene Bilder\org01.jpg
Create Date                     : 2004:09:08 16:55:32
" wird als ganze Zeilen zurück gegeben. Das sind aber jeweils zwei Zeilen und mehr, als ich brauche.
Diese müßte ich nun zerlegen und umbauen, damit etwas rauskommt, das FileTouch.exe verarbeiten kann.
Die Zeitangabe kann man unverändert übernehmen, doch das Datum muß umgebaut werden zu MM-DD-YYYY, also obiges zu 09-08-2004.

back-to-topHier nun das Script mit manueller Datumseingabe:
FileTouch.bat
@echo off
echo "Erstellungsdatum einer Datei neu setzen. MM-DD-YYYY."  
:enterdate
set /p newdate=Bitte Datum im Format mm-tt-jjjj eingeben:
set /p newtime=Bitte Zeit im Format HH:MM:SS eingeben (notfalls :00 fuer :SS):
if %newdate%=="" goto enterdate  
if %1.==.  goto end
if not exist %1 goto end
for %%a in (%0) do set pfad=%%~dpa
"%pfad%FileTouch.exe" /W /C /D %newdate% /T %newtime% %1   
echo %1 touched to %newdate%!
:end
(FileTouch.bat und FileTouch.exe befinden sich dabei nebeneinander im gleichen Ordner! und der ist nicht der aktuelle vom Kontextmenü. Daher %Pfad% aus Parameter %0 geholt.)
Und dieses Script soll nun um die Abfrage von ExifTool erweitert werden. Wenn ExifTool kein Datum findet, soll die manuelle Abfrage erfolgen/bleiben, sonst übersprungen werden.

Wenn das geschafft ist, würde ich auch gerne noch wissen, wie man in dem Zusammenhang auch den IPTC-Tag "Create Date" abfragen, und wenn leer gleich mit neu setzen kann.
(noch weiter ginge dann, wenn EXIF leer ist, aber IPTC ein CreateDate hat (das ich irgendwan rein schrieb), dieses zu nehmen und an FileTouch.exe zu übergeben, und in ExIf neu zu setzen. )

Content-ID: 182156

Url: https://administrator.de/contentid/182156

Ausgedruckt am: 23.11.2024 um 08:11 Uhr

mak-xxl
mak-xxl 18.03.2012 um 17:07:24 Uhr
Goto Top
Guten Tag, Roschka,

ich hoffe, das bisherige Schweigen des Forums hat etwas mit sonntäglicher Ruhe zu tun. Andernfalls wäre die Ursache durch Nachlesen der Forenregeln (Stichwort Beginn und Ende eines Beitrages) zu finden.

Zu Deinem Problem: Um das Datumsformat, wie es von <exiftool.exe> geliefert wird, zu nationalisieren und damit verdaulicher zu machen, genügt ein Blick in die Hilfe des Tools:
exiftool.exe -d "%d-%m-%Y" Bilddatei  
.
Das Filtern der Ausgabe erfolgt beispielsweise so:
exiftool.exe -d "%d-%m-%Y" Bilddatei | findstr /i "modification"  
.
Da das Datum noch separiert werden muss, kommt das ganze in eine for-Schleife:
for /f "delims=: tokens=2" %i in ('exiftool.exe -d "%d-%m-%Y" "bild 1.tif" ^| findstr /i "modification"') do echo %i  
Für Deine Batch soll das Ganze in einer Variable landen, also etwa so:
for /f "delims=: tokens=2" %i in ('exiftool.exe -d "%d-%m-%Y" "bild 1.tif" ^| findstr /i "modification"') do set %i=exifdate  
Der Rest dann adäquat (Zeit -> %exiftime%). Viel Erfolg!

Die Codebeispiele sind für die Kommandozeile, für Batchbetrieb sind die Variablen anzupassen (%%i).

Freundliche Grüße von der Insel und einen angenehmen Sonntag - Mario
bastla
bastla 18.03.2012 um 18:35:11 Uhr
Goto Top
... wobei die umgekehrte Reihenfolge erfolgversprechender sein dürfte face-wink:
for /f "delims=: tokens=2" %i in ('exiftool.exe -d "%d-%m-%Y" "bild 1.tif" ^| findstr /i "modification"') do set exifdate=%i
Soferne die Ausgabe tatsächlich (wie oben beschrieben) so
Create Date                     : 2004:09:08 16:55:32
aussehen sollte, dürfte
for /f "tokens=2-4* delims=: " %i in ('exiftool.exe -d '%r %a, %B %e, %Y' -creationdate -S -s "E:\Dokumente und Einstellungen\Ronald\Eigene Dateien\Eigene Bilder\org1.jpg" ^|findstr /i /c:"Create Date"') do set "exifdate=%j-%k-%i" & set "exiftime=%l"
besser passen (beides - und vor allem Letzteres face-wink - allerdings ungetestet) ...

Grüße
bastla
mak-xxl
mak-xxl 18.03.2012 um 18:45:26 Uhr
Goto Top
Hallo bastla,

mea culpa und vielen Dank für die Korrektur - mein Post ist wohl ein Klassiker für '... mit dem Hintern einreißen'.

Dir auch einen schönen Sonntag und an dieser Stelle vielen Dank für die vielen Hilfen, die mir das Mitlesen Deiner Beiträge über die Jahre brachte. Mario
bastla
bastla 18.03.2012 um 18:53:39 Uhr
Goto Top
[OT] Hallo Mario!
Ah Du warst das, der die immer gelesen hat ... face-wink

Auch Dir einen schönen Rest-Sonntag
bastla
[/OT]
Roschka
Roschka 19.03.2012 um 23:17:21 Uhr
Goto Top
Hallo ihr beiden,
zunächst Danke für eure Antworten.

ich möchte aber noch mal klarstellen, das ich nicht rein über die Befehlszeile arbeiten möchte, sondern eine (zwei) Variable(n) namens %newdate% und %newtime% erzeugen möchte, die dann an FileTouch.exe weitergegeben wird(werden)!!!

Und "modification" ist nicht interessant, sondern "Ceation Date"!!! (bzw. alternativ OriginalCreationDate)

Alle Hinweise auf etwas wie "modificationdate" helfen mir leider überhaupt nicht!

UND
Die Zeile "exiftool.exe -d "%d-%m-%Y" Bilddatei" bringt mir derzeit nur eine komplette Auflistung aller möglichen Optionen, ist also nicht fehlerfrei!:
(eingegeben)"E:\Dokumente und Einstellungen\Dell\Anwendungsdaten\GeoSetter\tools\exiftool" - d "%d-%m-%Y" keeani_lei_5.jpg(/eingegeben)  
(Ausgabe daraus:)
ExifTool Version Number         : 8.74
File Name                       : keeani_lei_5.jpg
Directory                       : .
File Size                       : 89 kB
File Modification Date/Time     : 01-02-2005
File Permissions                : rw-rw-rw-
File Type                       : JPEG
MIME Type                       : image/jpeg
Comment                         : English: American pornographic actress Keeani
Lei standing, out of doors, viewed from knees up. She is nude other than a brace
let and small necklace. She holds her pig-tails out with either hand. Her shaved
 pubic mound is visible. Facial expression is a toothy grin...Deutsch: Die ameri
kanische Pornodarstellerin Keeani Lei stehend, nackt, von den Knien aufwõrts im
Bild. Ihre rasierten Genitalien sind teilweise sichtbar.
JFIF Version                    : 1.02
Exif Byte Order                 : Big-endian (Motorola, MM)
Make                            : NIKON CORPORATION
Camera Model Name               : NIKON D70
Orientation                     : Horizontal (normal)
X Resolution                    : 100
Y Resolution                    : 100
Resolution Unit                 : inches
Software                        : Adobe Photoshop CS2 Macintosh
Modify Date                     : 08-12-2006
White Point                     : 0.313 0.329
Primary Chromaticities          : 0.64 0.33 0.21 0.71 0.15 0.06
Y Cb Cr Coefficients            : 0.299 0.587 0.114
Y Cb Cr Positioning             : Co-sited
Exposure Time                   : 1/400
F Number                        : 11.0
Exposure Program                : Program AE
Exif Version                    : 0221
Date/Time Original              : 01-02-2005
Create Date                     : 01-02-2005
Components Configuration        : Y, Cb, Cr, -
Compressed Bits Per Pixel       : 4
Exposure Compensation           : 0
Max Aperture Value              : 2.8
Metering Mode                   : Center-weighted average
Light Source                    : Flash
Focal Length                    : 48.0 mm
User Comment                    :
Sub Sec Time                    : 10
Sub Sec Time Original           : 10
Sub Sec Time Digitized          : 10
Flashpix Version                : 0100
Color Space                     : Uncalibrated
Exif Image Width                : 532
Exif Image Height               : 800
Interoperability Index          : R03 - DCF option file (Adobe RGB)
Interoperability Version        : 0100
Sensing Method                  : One-chip color area
File Source                     : Digital Camera
Scene Type                      : Directly photographed
CFA Pattern                     : [Blue,Green][Green,Red]
Custom Rendered                 : Normal
Exposure Mode                   : Auto
White Balance                   : Manual
Digital Zoom Ratio              : 1
Focal Length In 35mm Format     : 72 mm
Scene Capture Type              : Standard
Gain Control                    : None
Contrast                        : Normal
Saturation                      : Normal
Sharpness                       : Normal
Subject Distance Range          : Unknown
Gamma                           : 2.2
Compression                     : JPEG (old-style)
Thumbnail Offset                : 1567
Thumbnail Length                : 5166
Current IPTC Digest             : 0b602fa9ed1f213a17479ceeed6031c5
Caption-Abstract                : Die amerikanische Pornodarstellerin Keeani Lei  stehend, nackt, von den Knien aufwärts im Bild. Ihre rasierten Genitalien sind  teilweise sichtbar.
Headline                        : Keeani_Lei_5
Special Instructions            : Erotik-Porno\Keeani_Lei_5.jpg
Source                          : http://commons.wikimedia.org/wiki/File:Keeani_Lei_5.jpg
Object Name                     : Keeani_Lei_5
Date Created                    : 2005:02:01
Category                        : Pornstars
Keywords                        : Erotik, nude, Keeani Lei
Copyright Notice                : http://www.keeani.com/
XMP Toolkit                     : 3.1.1-111
Date/Time Digitized             : 01-02-2005
Flash Fired                     : True
Flash Return                    : Return not detected
Flash Mode                      : Auto
Flash Function                  : False
Flash Red Eye Mode              : False
Native Digest                   : 36864,40960,40961,37121,37122,40962,40963,3750,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;6EC83EC509F2A93A2C42A0006107940F
Metadata Date                   : 08-12-2006
Creator Tool                    : Adobe Photoshop CS2 Macintosh
Document ID                     : adobe:docid:photoshop:68b174cb-763a-11d9-976e-
9c58a689a55b
Instance ID                     : uuid:EFA45893886611DB9A9CDF50356AD8D7
Format                          : image/jpeg
Color Mode                      : RGB
ICC Profile Name                : Adobe RGB (1998)
History                         :
Profile CMM Type                : ADBE
Profile Version                 : 2.1.0
Profile Class                   : Display Device Profile
Color Space Data                : RGB
Profile Connection Space        : XYZ
Profile Date Time               : 03-06-1999
Profile File Signature          : acsp
Primary Platform                : Apple Computer Inc.
CMM Flags                       : Not Embedded, Independent
Device Manufacturer             : none
Device Model                    :
Device Attributes               : Reflective, Glossy, Positive, Color
Rendering Intent                : Perceptual
Connection Space Illuminant     : 0.9642 1 0.82491
Profile Creator                 : ADBE
Profile ID                      : 0
Profile Copyright               : Copyright 1999 Adobe Systems Incorporated
Profile Description             : Adobe RGB (1998)
Media White Point               : 0.95045 1 1.08905
Media Black Point               : 0 0 0
Red Tone Reproduction Curve     : (Binary data 14 bytes, use -b option to extract)
Green Tone Reproduction Curve   : (Binary data 14 bytes, use -b option to extract)
Blue Tone Reproduction Curve    : (Binary data 14 bytes, use -b option to extract)
Red Matrix Column               : 0.60974 0.31111 0.01947
Green Matrix Column             : 0.20528 0.62567 0.06087
Blue Matrix Column              : 0.14919 0.06322 0.74457
DCT Encode Version              : 100
APP14 Flags 0                   : (none)
APP14 Flags 1                   : (none)
Color Transform                 : YCbCr
Image Width                     : 532
Image Height                    : 800
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:4:4 (1 1)
Aperture                        : 11.0
Flash                           : Auto, Fired, Return not detected
Image Size                      : 532x800
Scale Factor To 35 mm Equivalent: 1.5
Shutter Speed                   : 1/400
Create Date                     : 01-02-2005
Date/Time Original              : 01-02-2005
Modify Date                     : 08-12-2006
Thumbnail Image                 : (Binary data 5166 bytes, use -b option to extr
act)
Circle Of Confusion             : 0.020 mm
Field Of View                   : 28.1 deg
Focal Length                    : 48.0 mm (35 mm equivalent: 72.0 mm)
Hyperfocal Distance             : 10.46 m
Ich will doch nur das "Creation Date" auslesen, und nicht die "kompletten" EXIF-Tags!!!
Und dieses Datum in eine Variable schreiben!!!
In diesem Beispiel ist also das "Creation Date" "01-02-2005" das gesuchte, und soll in die Variable "newdate", die FileTouch setzen soll, weil ###egal ist, wann ich dieses (oder andere) Bild(Dateien) herunterlud/kopierte.
Außerdem brauche ich in der Variablen für FileTouch.exe das Datum auch noch in der bescheuerten Schreibweise "Monat-Tag-Jahr" (MM-DD-YYYY)!

Und diese Datei ist nur ein X-beliebiges Beispiel! (in der/die/das ich schon mit meinem FileTouch.bat aus dem ersten Post das/die Filedatum neu gesetzt hatte! und auch fehlende Matatags habe ich schon hinzugefügt.) vor wenigen Tagen herunter geladen...)
(ich 'tagge' meine Dateien so "ordentlich wie möglich". Quellenhinweise und Copyright-Hinweise sind mir wichtig. Mit dem IPTC-Tag "special instructions" kann ich im Schadensfall aus "file098752.chk" wieder den Dateinamen eines JPG's rekonstruieren!...)

Gruß Roschka.
mak-xxl
mak-xxl 20.03.2012 um 08:06:25 Uhr
Goto Top
Moin Roschka,

es ist sicherlich für Dich frustrierend, wenn die Antworten auf Dein Hilfegesuch so (fast) gar nichts mit dem Anliegen zu tun haben scheinen - da kann man schon mal verbal in den Fäkalbereich ausrutschen.

Es is aber ebenso frustrierend für die Helfenden, wenn offensichtlich kaum etwas von dem gelesen wird, was an Hilfestellungen gegeben wurde.

So war die Zeilen

"Um das Datumsformat, wie es von <exiftool.exe> geliefert wird, zu nationalisieren und damit verdaulicher zu machen, genügt ein Blick in die Hilfe des Tools:"
exiftool.exe -d "%d-%m-%Y" Bilddatei  

ein Hinweis darauf, wie man bereits das Programm dazu bringen kann, z.B. das Datumsformat in gewünschter Form zu erzeugen, um Stringmanipulation in der Weiterverarbeitung zu vermeiden.

Die Zeile:

for /f "delims=: tokens=2" %i in ('exiftool.exe -d "%m-%d-%Y" "bild 1.tif" ^| findstr /i "modification"') do set exifdate=%i  

(die Korrektur von bastla am Ende und die Datumsschreibweise beachten!) macht genau das, was Du wolltest: Es wird nur das Datum der letzten Bildmanipulation (Zeile 7 Deines Posts) in der Kamera zurückgegeben - und das nicht ohne Grund: Wenn Du nicht über das RAW-Image zusätzlich in der Kamera verfügst, ist dieses Datum das Bilderstellungsdatum - hat keine Manipulation (Nachbearbeitung) in der Kamera stattgefunden - dann ist 'Creation Date' = 'Modification Date'.
Dein Part wäre es also, das Suchwort für 'findstr' in 'Create Date' zu ändern.

Um eine Befehlszeile in einer Batch-Datei zu nutzen, ist die Schreibweise einiger Variablen anzupassen: %i wird %%i. Sorry, das hatte ich als bekannt vorausgesetzt.

Die vorgeschlagene Variable '%exiftime%' wird adäquat befüllt:

for /f "delims=: tokens=2" %i in ('exiftool.exe -d "%H:%M:%S" "bild 1.tif" ^| findstr /i "create date"') do set exiftime=%i  

Mit diesen Beispielen hast Du also (bis auf die Variablenschreibweise) bereits zwei fertige Zeilen für eine Batch, die genau das gewünschte liefern.

Wie Du eine Liste der Dateien erzeugst oder ein Logbuch führst, wirst Du wissen.

Bastla hat übrigens ein Beispiel gepostet, das schon mit 'Create Date' arbeitet, außerdem übernimmt es Datum und Uhrzeit als Gesamtstring und zerlegt diesen. Etwas schwerer zu lesen - aber effizienter als 2 Einzeiler (weil <exiftool.exe> nur 1x gerufen wird).

Freundliche Grüße von der Insel - Mario
Roschka
Roschka 20.03.2012 um 11:39:46 Uhr
Goto Top
Hallo Mario,
danke für deine Antwort. Das Problem für mich ist doch, da ich kein "Befehlszeilen-Akrobat" bin, fällt es mir schwer Eure Beispiele so zu verstehen, das ich sie einfach umwandeln kann. Ich hätte gehofft die betreffenden Zeilen so zu bekommen, wie sie in mein Batch reinpassen, und nicht wie sie von der Kommandozeile aus funktionieren könnten. Ich habe auch versucht die exiftool-Hilfe zu lesen, fand aber nicht wonach ich suche.
Wenn ich im DOS das hier eingebe:
exiftool.exe -d "%d-%m-%Y" keeani_lei_5.jpg  | findstr /i "creation date"  
bekomme ich gleich mehrere Daten: ;)
File Modification Date/Time     : 01-02-2005
Modify Date                     : 08-12-2006
Date/Time Original              : 01-02-2005
Create Date                     : 01-02-2005
Date Created                    : 2005:02:01
Date/Time Digitized             : 01-02-2005
Metadata Date                   : 08-12-2006
Profile Date Time               : 03-06-1999
Create Date                     : 01-02-2005
Date/Time Original              : 01-02-2005
Modify Date                     : 08-12-2006
Fehler war wohl "creation date" statt "Create Date" zu schreiben. ;) Nein, es werden immer alle Daten ausgegeben und als DD-MM-YYYY. Also nicht das was ich möchte.

Ich habe versucht die "for "-Zeilen in mein Batch einzubauen, aber es funktioniert nicht so richtig. Ich bekomme die Fehlermeldung "E:\Dokumente" ist entweder falsch geschrieben oder konnte nicht gefunden werden. Da müssen wohl noch Anführungszeichen hinzu.
...
 for %%a in (%0) do set pfad=%%~dpa
for /f "delims=: tokens=2" %%i in ('"%Pfad%exiftool.exe" -d "%d-%m-%Y" "%%1" ^| findstr /i "Create Date"') do set exifdate=%%i  
echo "ExifDate: "%exifdate%  
goto ProcessFile
...
bekomme ich die Rückmeldung:
Der Befehl "E:\Dokumente" ist entweder falsch geschrieben oder konnte nicht gefunden werden.  
"ExifDate: "  
Lasse ich in der Zeile "for /f delims " %Pfad% weg, kommt folgende Rückmeldung:
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
"ExifDate: "  
Da ich so kein %exifdate% bekomme, kann ich auch nicht sehen, in welchem Format das ausgegeben wird. Und ob es in der Schreibweise MM-DD-YYYY ist.

Eigentlich möchte ich ja noch die Abfrage rein haben, ob ein Datum gefunden werden konnte, um dann weiter zu verzweigen.
Wäre das etwa so richtig?
...

if %exifdate%=="" goto enterdate (oder frage mit noch einer Schleife anderes Datum ab)  
if %newdate%~=="" goto ProcessFile  (wenn nicht leer)  
...
Es wäre echt nett, wenn ihr nicht die Kommandozeilen-Schreibweisen nennen würdet, sondern gleich so geschrieben, wie es in meine Batch rein muß.
Ich habe die Kommandozeile mit dem Pipe ausprobiert. Da kommt aber auch ein Vorspann in der Rückmeldung mit.

Viele Grüße Roschka.

ich habe noch ein wenig mit euren Beispielen herum experimentiert. besonders die "ungetesteten" lieferten Fehler und verwirrten mich. Auch "bild 1.tif" nutz mir nichts, da muß "%1" hin! (konnte ich aber noch leicht ändern).

for /f "delims=: tokens=2" %i in ('exiftool.exe -d "%d-%m-%Y" "bild 1.tif" ^| findstr /i "modification"') do set %i=exifdate  
machte zunächst keine Ausgabe.
for /f "delims=: tokens=2" %i in ('exiftool.exe -d "%d-%m-%Y" "bild 1.tif" ^| findstr /i "modification"') do set %i=exifdate echo %exifdate%  
bringt Fehler, weil "set %i=exifdate" verkehrtrum ist. "echo %i" gibt aber das Datum. Nur nicht in der "richtigen" Form. und ich will auch nicht "modification" wissen.
Richtig rum geschrieben: ('exiftool.exe -d "%m-%d-%Y" "%1") und (set exifdate=%%i) erhalte ich nun schon mal das Datum in der gewünschten Form MM-DD-YYYY in %exifdate%!
Der erste Erfolg! Doch leider funktioniert das nur mit "modification" und nicht mit "Create Date"!?
Da muß also noch nachgebessert werden!

Die Zeile:
for /f "delims=: tokens=2" %i in ('exiftool.exe -d "%H:%M:%S" "bild 1.tif" ^| findstr /i "createdate"') do set exiftime=%i  
gibt zurück (wenn ich echo drunter schreibe):
"ExifTime: 00" dir  
Direkt in der Kommandozeile werden viele Zeilen mit einzelnen Zahlen ausgeworfen. ?
Auch wenn ich beim Datum das "modification" durch "creationdate" ersetze, kommt nur: "00 dir"?!?
__Testet bitte eure nächsten Vorschläge erst aus__, ob sie auch genau tun was ich brauche, und schreibt nicht nur "aus dem Kopf" etwas auf, (das gehen müßte) mit auch noch für mich falschen Parametern.
Ich habe mal @echo on gesetzt und geguckt, was passiert:
...
for /F "delims=: tokens=2" %i in ('exiftool.exe -d "M:1" | findstr /i "Create Date"') do set exiftime=%i  
...
Da wird aus "%H:%M:%S" dann "M:1" ??? Es muß also "%%H:%%M:%%S" geschrieben werden! Woher soll ich das wissen???
Ich will auch nicht "bild1.tif" in die Batch schreiben, sondern die übergebene Datei als Parameter "%1" verarbeiten.
Jetzt kommt bei @echo on:
@echo on
...
>for /F "delims=: tokens=2" %i in ('exiftool.exe -d "%H:%M:%S" ""E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Photos\dsc00168.jpg""  |  findstring /i "Create Date"') do set exiftime=%i  
File not found: E:/Dokumente
File not found: und
File not found: Einstellungen/Dell/Eigene
File not found: Dateien/Photos/dsc00168.jpg


Viele Grüße Roschka.
mak-xxl
mak-xxl 20.03.2012 um 16:28:30 Uhr
Goto Top
Moin Roschka,

zwei Vorbemerkungen:

- Dies ist ein Forum zur Hilfestellung und für Lösungsvorschläge. Die Helfer erwarten im Gegenzug zumindest, dass der Hilfesuchende genau durchliest, was er angeboten bekommt. Von Dir kommt stattdessen die Frage: 'Woher soll ich das wissen?' Warum? Weil es im vorherigen Post stand! (Variablen im Batch: z.B %i wird %%i)
- Wir sollen unsere Vorschläge erst austesten? Du kannst gern einige hier im Forum beauftragen, Dir eine Software bei exakter Pflichtenheftdefinition entgeltlich zu erstellen, die wird dann nach allen Regeln getestet und dokumentiert. Bis dahin können wir, denke ich, zumindest erwarten, dass Du z.B. einen Parameter wie 'Create Date' nicht in drei verschedenen Schreibweisen (s.o.) den geposteten Befehlszeilen überhilfst und dann noch meinst, unsere Vorschläge seien an den vermurksten Ergebnissen schuld.

Der nachfolgende Mehrzeiler ergibt eine Batch, die die beiden benötigten Tools im Pfad erwartet (der besseren Übersichtlichkeit wegen), ansonsten musst Du das ergänzen.
@echo off
del flist.dat > NUL
del tlist.dat > NUL
chcp 1252 > NUL
for /f "delims=" %%f in ('dir /s /b "Bildpfad mit Leerzeichen\*.jpg"') do echo "%%f" >> flist.dat  
chcp 850 > NUL
for /f "delims=" %%f in (flist.dat) do (  
 for /f "delims=: tokens=2" %%i in ('exiftool.exe -d "/W /A /C /D %%m-%%d-%%Y /T %%H#%%M#%%S" %%f ^| findstr /i "date"') do (  
  set tp=%%i
  set t=%tp:#=:%
  echo %t% %%f >> tlist.dat
 )
)
rem for /f "delims=" %%f in (tlist.dat) do filetouch.exe %%f  

- Zeilen 2+3 löschen die Hilfsdateien
- Zeilen 4+6 stellen die Codepages um, damit in Zeile 5 Umlaute richtig gelesen werden
- Zeile 5 schreibt alle Bilder (*.jpg, bei Bedarf anpassen) mit Pfad in eine Datei (<flist.dat>), den Pfad bitte anpassen!
- Zeilen 7+8 rufen das <exiftool> mit je einer Zeile aus der <flist.dat>, bei dem Parameterblock wird ausgenutzt, das dieser frei konfigurierbar ist und deswegen gleich die komlette Parameterliste für <filetouch> erzeugt werden kann. Das spart etliche spätere Stringmanipulationen.
- Zeilen 9+10 ersetzen das '#' im Zeitstring durch ':' (sonst würde von der Uhrzeit die Stunde der letzte Eintrag in %%i sein; ggf. mit echo %%i anschauen)
- Zeile 11 schreibt die Datei <tlist.dat>, darin steht für jede Bilddatei die komplette Befehlszeile für <filetouch>.
- Zeile 14 setzt, wenn auskommentiert, <filetouch> für alle Einträge (Zeilen) in <tlist.dat> in Gang.

Achtung: Vor dem Ausführen der Zeile 14 solltest Du genau kontrollieren, ob die Einträge in der <tlist.dat> Deinen Vorstellungen entsprechen, da EXIF-Daten zwar nach Codierung (Position in der Bilddatei), nicht aber nach Umfang und Schlüsselwörtern von nur 2 Herstellern gleich implementiert werden. So ist z.B. der String 'Create Date' vom <exiftool> nicht bei allen gelesenen Bildern zu füllen, weil kein Pendant in der Datei vorhanden ist.

Denke bitte auch daran, wenn Du die <tlist.dat> editiert und ergänzt hast und jetzt die Zeile 14 vom 'rem' befreist, dass Du die Zeilen 3+11 auskommentieren musst, sonst wird die Datei gelöscht!

Die Lösung mit 2 Hilfsdateien wurde gewählt, um Dir die Lesbarkeit zu erleichtern und die Möglichkeit der Nachbearbeitung zu geben.

Viel Erfolg und freundliche Grüße von der Insel - Mario
Roschka
Roschka 21.03.2012 um 01:18:27 Uhr
Goto Top
Hallo Mario,
danke für deine Antwort.
Aber ich habe oft so meine Verständnisprobleme, besonders bei solchen "for ..."-Schleifen, weil mir die Bedeutung vieler Teile davon einfach unklar ist! Und das Wissen um die Verdopplung von % in verschiedenen Fällen ist mir leider nicht "selbstverständlich". Und klappt auch nicht in jedem Fall.
Ich probierte eure Vorschläge aus, und bekam leider nicht was ich erhoffte! Oft jedoch mir unverständliche Fehlermeldungen.

Dein neues Beispiel ist für mich leider auch wieder nur "böhmische Dörfer". Wie paßt das mit den flist.dat in mein Batch?
Ich kann mit der Zeile "for /f "delims=" %%f in ('dir /s /b "Bildpfad mit Leerzeichen\*.jpg"') do echo "%%f" >> flist.dat " leider nichts anfangen, weil ich den Sinn nicht verstehe! Wieso soll ich hier 'dir' anwenden, wenn mein Batch (FileTouch[Exif].bat) per Rechtsklick auf eine Datei und "öffnen mit" (eben dieser FileTouchExif.bat) nur eine einzige Datei samt Pfad übergeben bekommt als %1 ????

Ich fand beim Lesen hier im Forum schon sehr gute, dokumentierte Vorschläge für allerdings ganz andere Probleme, die gut dokumentiert waren. Leider halfen die mir nicht bei meinem Problem. Es ging da zum Beispiel um die Neuorganisation und Umbenennung von Dateien nach Datum. Ich will die Dateien aber weder umbenennen, noch in neuer Struktur anordnen!

Ich habe sehr wohl gelesen, was ihr mir vorgeschlagen habt und ausprobiert! Doch hat es mich leider nicht zu meinem Ziel geführt! Es entstanden leider nur neue Verwirrungen! (__ein Profi nimmt als selbstverständlich an, was ein Anfänger nicht wissen kann!__)
Ich habe absolut keine Ahnung, wozu "chcp 850 > NUL " nützlich sein soll, was es tut, oder was es überhaupt ist!?!?!
Sowas ist für mich "ein böhmisches Dorf"!
Wenn ich "Kirschen pflücken will", und du erklärst "wie man Erdbeeren anbaut", hat das in etwa den gleichen "Nutzen".
Genausogut könntest du einem Radfahrer erklären, wie man einen Autoreifen wechselt! ;) Oder einem Busfahrer, wie man ein U-Boot fliegt. ;)

freundliche Grüße
Roschka
60730
60730 22.03.2012 um 08:39:31 Uhr
Goto Top
Moin,

Ich nehme mir mal eine zeile heraus.
(ein Profi nimmt als selbstverständlich an, was ein Anfänger nicht wissen kann

Wie definierst du profi?

Die riege von steve wozniak, wenn ja hast du vielleicht recht.
Ein profi, der sich hierherverirrt und anderen gratis und des problemloesueng finden wegen hilft, ist eine ganz andere liga.

Denn wir heinis haben allesamt unseren profistatus dadurch erlangt, das wir aus fremden beispielen abgekupfert und gelernt haben.

Also mehr oder weniger - nur der, dessen erstes programm kein hallo welt problem geloest hat, sondern der der die hilfe geschrieben hat fuer die befehle mit denen man hallo welt ausgeben kann - der ist so ausserirdisch, dass er noch nie anfaenger war, sondern gleich profi.

Gruss.
@ mak-xxl

Wenn ichs noch nicht geschrieben habe, willkommen im club und hochachtung vor deiner ausdauer !
Roschka
Roschka 28.03.2012 um 23:59:17 Uhr
Goto Top
Hallo mak-xxl,
ich habe durchaus "Ausdauer", wenn ich auf der Suche nach Problemlösungen bin. ;)
Aber das "aktuelle Tagesgeschäft" kann mich schon mal behindern, die ProblemLösungsSuche fortzuführen...

Ich schrieb vor einigen Stunden schon mal eine Antwort. Leider vergaß ich "mein Prinzip Forumsbeiträge vor den Senden zu kopieren"!!! Somit verlor ich ALLES Geschriebene, weil eine "Anmeldung erforderlich Meldung" dazwischen kam...
Daher muß ich alles vorhin geschriebene komplett neu durchdenken und schreiben.

=Wie definierst du Profi?
;) Jeder der diese ganzen Befehlszeilen Möglichkeiten "rein aus dem kopf" schreiben kann, ist für mich "Profi", weil ich das (als 'fortgeschrittener' Anwender) nicht kann!
Ich versuche aus allen hier im Forum angebotenen Antworten zu lernen...

Leider finde ich zu den mir aktuell anstehenden Problemem hier kaum Lösungen aus anderen Fragen . Oft geht es um das kopieren, Umbenennen, oder sonstwas nach Datum im Vergleich mit %heute%.
Das interessiert mich aber nicht, sondern ich möchte das "Creation Date" (Kopier-Erstellungsdatum) einer Datei nur neu dann setzen, wenn es neuer ist, als das ExifCreation-Date oder das DIR modifikation-Date!. Nicht immer gibt es beide!
Ich möchte also das "Erstellungsdatum" einer Datei auf das älteste findbare Bearbeitungs- oder (Exif)Fotodatum setzen!
Ich habe Fotos mit z.B. Erstellungsdatum 2012, die ein Datum der "letzten Änderung" von z.B. 2004 haben..
Seltener, aber im Idealfall, haben die dann auch noch ein Exif-Datum (der Fotografie) von z.B. 2003.
Ich möchte nun das "älteste Datum" finden und dann im Batch dieses an FileTouch.exe übergeben, welches dann das "Erstellungsdatum" einer Datei auf das älteste findbare Datum setzt.

Alles was ich hier zum Thema Datum vergleichen fand, war zwei Dateien mit einander, oder Dateidatum mit heute vergleichen. Meist nur mit einfachen == behandelt. Ich brauch aber "größer oder kleiner als".
Ich fand dann bei wer-weis-was.de etwas passendes, das ich mir aber umarbeiten mußte. Denn auch da wurden wieder zwei Dateien verglichen.
Der DIR-Befehl gibt ja zunächst nur das "Modification Date" zurück. Um auch an das "Creation Date" zu kommen, braucht es den Schalter /T:C . Nun kann man beide vergleichen.

Hier mal das neue Batch, welches das Vergleichen löst:
rem Compare2DatesOf1File.bat
echo off
rem Zwei DatumsAngaben EINER Datei vergleichen.
rem das Erstellunggsdatum und das Veränderungsdatum
rem dir <file> bringt das Änderungsdatum, dir <file> /T:C das Erstellungsdatum. dir /T:W auch wieder das Änderungsdatum.
echo off
dir %1 > dir1.txt
dir %1 /T:C > dir2.txt
for /F "tokens=1-5 delims=.: " %%i in ('findstr %1 dir1.txt') do set ChangeDATE1=%%k%%j%%i-%%l%%m & set newdate1=%%j-%%i-%%k & set newtime1=%%l:%%m:00  
for /F "tokens=1-5 delims=.: " %%i in ('findstr %1 dir2.txt') do set CreationDATE2=%%k%%j%%i-%%l%%m & set newdate2=%%j-%%i-%%k & set newtime2=%%l:%%m:00  
rem Die beiden Zeilen habe ich so verlängert, das gleich noch die Variablen für FileTouch.exe mit erzeugt werden.
del dir1.txt
del dir2.txt
rem Die folgenden beiden Variablen lassen nun den Altersvergleich zu.
echo DATE1(%1) = %ChangeDATE1%
echo DATE2(%1) = %CreationDATE2%
if %ChangeDATE1% GTR %CreationDATE2% echo Change ist juenger als Creation, Keine Aktion noetig.
if %ChangeDATE1% EQU %CreationDATE2% echo Change und Creation sind gleich alt, Keine Aktion noetig.
if %ChangeDATE1% LSS %CreationDATE2% echo Change ist aelter als Creation, aendere Erstellungsdatum. & goto Processfile
rem an dieser Stelle müßte noch der Vergleich mit dem Exif-Datum erfolgen.
goto EOF

:Processfile
echo ein neues Erstellungsdatum wird in die Datei %1 geschrieben.
echo  "%pfad%FileTouch.exe" /C /D %newdate1% /T %newtime1% %1   
rem In obiger Zeile das "echo" entfernen, damit der Befehl wirklich ausgeführt wird.  
echo %1 touched to %newdate1%!

rem Es ist darauf zu achten, das die Datumsvariablen unterschiedlich formatiert werden!
rem Um die Alterswerte zu vergleichen, ist ein anderes Format notwendig, als an FileTouch.exe übergeben werden musz!
rem Um in einer FOR-Schleife gleich mehrere Variablen zu setzen, ist ein " & set " notwendig, sonst funktioniert es nicht!  
rem Der DIR-Befehl gibt keine Sekunden aus. Daher muß diese Variable newtime um :00 erweitert werden, da %%n nicht funktioniert.
:EOF
__Das funktioniert und löst nun einen Teil meiner Problemstellung.__ Ähnlich sollte auch ein Vergleich mit dem ExIf-Datum funktionieren können. Nur gelingt es mir da noch nicht die ExIf Zeit einzeln zu bekommen, wie ich weiter oben beschrieb. Zur Not muß ich eben auf die Exif-Zeit in meinem ersten Batch verzichten.
Aber wie im Batch von "__mak-xxl schreibt am 20.03.2012, 16:28:30 Uhr __" beschrieben, sollte ich das Exif-Datum und die Zeit bekommen.
Ich muß es nur noch in das neue einbauen. --- Leider tut es nicht funktionieren: "Das System kann tlist.dat nicht finden". Weil die Variablen leer sind. Das Bild hatte wohl kein ExIfDatum. Andere hatten zwar ein Exif "DateTime", aber kein "CreationDate". Somit funktionierte es ebenfalls nicht. Doch selbst bei Bildern die mindestens ein Exifdatum haben. z.B. die kompletten, originalen Camera-Exif, bleibt die Fehlermeldung: "tlist.dat konnte nicht gefunden werden."! Denn die Variablen sind immernoch leer.
Wenn ich Echo einschalte, sehe ich das %%i leer an exiftool.exe übergeben wird!!! Und das obwohl in flist.dat genau eine Zeile mit Pfad und Dateinamen steht.
Jetzt stehe ich wieder auf dem Schlauch.

Und komischerweise klappt dieses Batch Compare2DatesOf1File.bat aber auch nur direkt in der Kommandozeile und noch nicht per Rechtsklick auf eine Datei und "öffnen mit...", so wie es die FileTouch.bat aus meinem Anfangsbeitrag tut.
Aber letztendlich soll es ja über "Öffnen mit ... " funktionieren.

Gruß Roschka
bastla
bastla 29.03.2012 um 12:23:28 Uhr
Goto Top
[OT]
Hallo Roschka!
Somit verlor ich ALLES Geschriebene, weil eine "Anmeldung erforderlich Meldung" dazwischen kam...
Daher muß ich alles vorhin geschriebene komplett neu durchdenken und schreiben.
Bei der nächsten derartigen Gelegenheit nach der Anmeldung einfach im Browser "zurückgehen" (zB mit der Taste "Backspace") und neu senden ...

Grüße
bastla
[/OT]
mak-xxl
mak-xxl 29.03.2012 um 15:08:37 Uhr
Goto Top
Moin Roschka,

schön, dass Du Dich zurückmeldest, wenn es auch etwas arbeitsintensiver war, aber dazu hat bastla die zukünftige Lösung gepostet.

Zunächst noch einmal Grundsätzliches:

- Du wolltest ursprünglich (und wohl immer noch) den Bilddateien auf Deinem Rechner das EXIF-Datum verpassen, wenn diese Dateien nicht dieses Datum (sichtbar) besitzen.
- das Ganze soll erstmal mittels Batch-Datei(en) gelöst werden, deren Details und/oder Aufbau noch nicht so ganz klar sind.
- Die Bedienung soll letztendlich per Drag'nDrop oder per Shell-Eintrag stattfinden.

Bis hierher alles gut und richtig.

ABER:

- wenn man an die Basis des Dateimanagements geht (Datumseinträge verändern), dann:
- müssen die Tools im Automatikbetrieb völlig fehlerfrei oder, besser, völlig fehlertolerant arbeiten (also im Zweifelsfalle nichts verändern).
- eine solide Basis an Daten (korrektes und sinnfälliges Datum/Zeit) vorfinden) - ich schrieb es schon und Du hast es herausgefunden - EXIF kann unvollständig sein.

Wenn dann noch ein unsicherer User (kein 'Batchelor') und Fernhilfe zusammenkommt ...

Und jetzt nochmal (kurz) zu meinem Vorschlag vom 20.03.2012:
@echo off
del flist.dat > NUL
del tlist.dat > NUL
chcp 1252 > NUL
for /f "delims=" %%f in ('dir /s /b "Bildpfad mit Leerzeichen\*.jpg"') do echo "%%f" >> flist.dat  
chcp 850 > NUL
for /f "delims=" %%f in (flist.dat) do (  
 for /f "delims=: tokens=2" %%i in ('exiftool.exe -d "/W /A /C /D %%m-%%d-%%Y /T %%H#%%M#%%S" %%f ^| findstr /i "date"') do (  
  set tp=%%i
  set t=%tp:#=:%
  echo %t% %%f >> tlist.dat
 )
)
rem for /f "delims=" %%f in (tlist.dat) do filetouch.exe %%f  

Das funktioniert weder per Drag'nDrop noch per Shell - sondern die Batchdatei (nennen wir sie <exifdt.cmd> wird explizit vom Anwender gerufen und, jetzt noch ein wenig konkreter, sie steht zusammen mit den Dateien <exiftool.exe> und <filetouch.exe> z. B. im Verzeichnis 'C:\Temp'.

Der Pfad in Zeile 5 wird dann von Dir zunächst angepasst auf einen tatsächlich vorhandenen Bildpfad (i.e. 'X:\Archiv\Bilder\Canon EOS\2011\Urlaub Seychellen'), also ein Beispiel mit Leerzeichen. Von diesem gesamten Ordner sollte ein geprüftes Backup existieren!

Der erste Probelauf generiert jetzt im Arbeitsverzeichnis ( 'C:\Temp') eine Datei <flist.dat> (= filelist), in der samt Pfad alle zum Suchmuster passend gefundene Dateien aufgelistet sein sollten.

Und jetzt kommst Du: Kontrolliere die gelisteten Dateien auf: Alle?, Gewünschte?, Unerwünschte? Unterverzeichnisse? etc. pp.

Die zweite entstandene Datei <tlist.dat> (=touchlist) enthält für jede gefundene Datei den per EXIF ermittelten Datums-/Zeiteintrag - wahrscheinlich aber nicht für alle (vor allem, wenn die Dateien aus verschiedenen Quellen stammen) - hier musst Du detailliert kontrollieren.

Und genau das macht das (natürlich getestete, andernfalls wäre vermerkt 'ungetestet') Script.

Genau das und bis hierher solltest Du testen und berichten, dann kann man den nächsten Schritt in Angriff nehmen.

Freundliche Grüße von der Insel - Mario
Roschka
Roschka 29.03.2012 um 20:47:50 Uhr
Goto Top
Hallo batsla,
genau das mit backspace hatte ich gemacht. "Seite nicht mehr gültig" kam da. ;)
Jetzt denke ich wieder dran mein geschriebenes vor dem Absenden erst mal zu kopieren...

Hallo Mario,

ich habe dein Beispiel ausprobiert. In einem Ordner mit nur wenigen Bildern die ein EXIF haben blieb tlist.dat leer.
Ordner gewechselt, in einen Ordner mit 30 Fotos, die sicher noch EXIF haben.
Es dauerte ziemlich lange, weil alle Unterordner mit durchsucht wurden. Nun ist tlist.dat zwar nicht mehr leer, enthält aber auch keine Datumsangaben, sondern alle namen nochmal, aber mehrfach!?
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\000_about_these_pictures.jpg"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\000_about_these_pictures.jpg"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00001.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00001.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00001.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00001.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00001.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00218.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00218.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00218.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00218.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00218.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00218.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00218.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00219.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00219.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00219.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00219.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00219.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00220.JPG"   
#=: "E:\Dokumente und Einstellungen\Dell\Eigene Dateien\Eigene Bilder\Handy W760i\DSC00220.JPG"   
In deiner letzten Zeile habe ich das rem mal duch Echo ersetzt, um zu sehen wie die Zeile dann aussehen würde.
Das sind die Letzten Zeilen im DOS-Fenster nach Scriptlauf:
File not found: E:/Dokumente und Einstellungen/Dell/Eigene Dateien/Eigene Bilder/Handy W760i/Hiddensee und Stralsund/DSC00392_R│gendamm_ICEstitch_aus_2.jpg
File not found: E:/Dokumente und Einstellungen/Dell/Eigene Dateien/Eigene Bilder/Handy W760i/Hiddensee und Stralsund/pano Hafen Stralsund F§hre.jpg
File not found: E:/Dokumente und Einstellungen/Dell/Eigene Dateien/Eigene Bilder/Handy W760i/Hiddensee und Stralsund/pano Neuendorf S│d.jpg
File not found: E:/Dokumente und Einstellungen/Dell/Eigene Dateien/Eigene Bilder/Handy W760i/Ronald im Park/@½«0287.jpg
File not found: E:/Dokumente und Einstellungen/Dell/Eigene Dateien/Eigene Bilder/Handy W760i/Ronald im Park/@½«0288.jpg
File not found: E:/Dokumente und Einstellungen/Dell/Eigene Dateien/Eigene Bilder/Handy W760i/Ronald im Park/@½«0289.jpg
File not found: E:/Dokumente und Einstellungen/Dell/Eigene Dateien/Eigene Bilder/Handy W760i/Ronald im Park/imag0149_@½«0290.jpg
for /f "delims=" %f in (tlist.dat) do filetouch.exe %f  
Da wurden nirgends Datumsvariablen gesetzt!?
Ich verstehe nicht was das soll. Das ist etwas ganz anderes, als ich vorhabe.
Ich will nicht ganze Ordner in einem Rutsch bearbeiten. Ich will auch keine kompletten Pfade "in" die Batch schreiben, sondern der Batch Dateinamen übergeben. Aus anderen Batches weis ich, daß das einen Unterschied macht.

back-to-topMeine Frage war:
"Daher würde ich gerne mit ExifTool das CreateDate (bzw alternativ auch noch DateTimeOriginal wenn CreateDate leer ist) auslesen und in eine Variable schreiben, welche dann FileTouch übernimmt. "

back-to-topDie Antwort die ich suchte ist: (fand ich nach langem Herumprobieren heraus)
der Befehl:
exiftool -d %%m-%%d-%%Y -DateCreated -S -s %1
liefert in der Kommandozeile das IPTC-Datum "Create Date" im gewünschten Format für FileTouch. (hat keine Zeitangabe)
der Befehl:
exiftool -d %%m-%%d-%%Y -DateTimeOriginal -S -s %1
liefert das EXIF-Datum im gewünschten Format für FileTouch.
Nur mit der Zeitangabe klappt das noch nicht so ganz.

Der Befehl:
exiftool -d "%%Y%%m%%d-%%H%%M%%S" -DateTimeOriginal -s -s -s %1  
liefert das Datum in einem Format, das für Altersvergleiche zweier Variablen geeignet ist.
Im Batch sieht das dann so aus:
...
for /F "delims=: tokens=2,3,4,5" %%i in ('exiftool -DateTimeOriginal -d %%H:%%M:%%S %1 ^| findstr /i "date"') do (set exiftime=%%i:%%j:%%k)  
for /F "delims=: tokens=2" %%i in ('exiftool -DateTimeOriginal -d %%m-%%d-%%Y %1 ^| findstr /i "date"') do (set exifdate=%%i)  
echo Die Variablen sind nun: %exifdate% und %exiftime%
if %exifdate%=="" echo "Kein ExIf-Datum"   
goto AskForCreationDate
...
Da braucht man keine externen Arbeitsdateien! Nach diesen Lösungen suchte ich!

Mit DateCreated gestaltet es sich etwas schwieriger:
...
:AskForCreationDate
for /F "delims=: tokens=2,3,4,5" %%i in ('exiftool -DateCreated -d %%H:%%M:%%S -S %1 ^| findstr /i "date"') do (set createtime=%%i:%%j:%%k)  
for /F "delims=: tokens=4,3,2,1" %%i in ('exiftool -DateCreated -d %%m-%%d-%%Y -S -s %1') do (set createdate=%%j-%%k-%%i)  
echo Die Variablen sind nun: %createdate% und %createtime%
...
Komischerweise klappt es nur das Datum in dem Format zu bekommen, wie es Exiftool zum schreiben bräuchte 2004:02.23 (aber mit Urzeitplatzhalter! Zeile 1)
In der zweiten Zeile habe ich im Ergebnis ein Leerzeichen vor den Jahr zuviel: "02-23- 2004"(?) Das muß noch weg!

Und dann kommt das Vergleichen des Datums mit dem der Datei. FileTouch soll nur dann zum Einsatz kommen, wenn das EXIF oder das "Create Date" älter ist als das Filedatum.
if %exifdate%==%filedate%
ist unzureichend. Ich brauche auch "ist %exifdate% größer oder kleiner als %filedate%". Und schon gar nicht %heute% vergleichen. Am 20.03.2012 schrieb ich, wie ich an das Filedate komme.
Um zwei Variablen zu vergleichen muß zuerst geprüft werden, ob eine Variable leer geblieben ist (weil nichts zum auslesen da war) Und die ältere soll dann gegebenenfalls an FileTouch weitergegeben werden.
Zu Vergleichsmöglichkeiten hätte ich jetzt gerne Vorschläge, und wie ich das überflüssige Leerzeichen weg bekomme.

Viele Grüße
Roschka
bastla
bastla 29.03.2012 um 21:27:41 Uhr
Goto Top
Hallo Roschka!

[OT]
Beschwerst Du Dich jetzt allen Ernstes ("fand ich nach langem Herumprobieren heraus") darüber, dass Du zur Lösung Deines Problems Dich selbst mit einem Tool (von dem Du bis jetzt nur einen Namen, aber nicht etwa Hersteller, Versionsnummer, Downloadlink genannt hast) beschäftigen musstest? (Naja, im Hinblick darauf, dass schon der Threadtitel - so wie viele Deiner Sätze - mit "Ich" beginnt ...)
[/OT]

Da Du jetzt gerne Vorschläge hättest - hier ist einer: Poste Deine Erkenntnisse in vernünftiger Form, zB als Ausgabe von
exiftool -DateCreated -d %%H:%%M:%%S -S %1 | findstr /i "date"
und das daraus gewünschte Ergebnis, und dann schaun mer mal (oder auch nicht) ...

Grüße
bastla
Roschka
Roschka 30.03.2012 um 11:52:29 Uhr
Goto Top
Hallo bastla,
Entschuldigung bitte, aber manche Beiträge von euch haben mich eher verwirrt. Ich benutze das exiftool, das mit Geosetter mit kam. Der lädt sich gelegentlich Updates davon. ExifTool Version Number : 8.15

Mir ist noch ein anderes Mißverständnis aufgefallen. Ich habe ja den ganzen Tread mehrfach durchgelesen und immer wieder versucht eure Vorschläge zu verwenden. Leider bekam ich meist Fehlermeldungen, die ich nicht verstand. (kleine Tippfehler reichen um Verwirrung zu stiften.)

Das Exiftool kann ja recht viele Datumsangaben abfragen (etwa 11 habe ich gezählt). Allerdings sind dabei zwei doppelt: "Create Date" und "Modify Date", Dann gibt es auch noch ein "Date Created", wessen Schreibweise (ohne Formatanweisung in der Zeile) andersrum ist und wohl das IPTC abfragt mit dem Schalter -DateCreated. Und dann gibt es noch "File Modifikation Date".
Das sind also 3 mögliche "Erstellungsdaten" und 3 mögliche Modifizierungsdaten, die auch noch unterschiedlich sein können. das alles wußte ich am Anfang ja noch gar nicht.
Und als du eine Zeile mit " findstr /i "modification"" vorgeschlagen hast, fehlte mir die Information, das dies ja das "File Modifikation Date", also das was man auch im Explorer als Änderungsdatum sieht, ist. Genau dies bräuchte man aber dann, wenn keine EXIF-Daten vorhanden und kein IPTC "Create Date" eingetragen ist doch noch.

Zu deinem letzten Einzeiler. ich habe den genau so in eine neue, leere Batch kopiert und mit einer Datei als parameter in der Kommandozeile aufgerufen. Als Rückmeldung kommt, da ohne "echo off":
I:\Pfad egal\>exiftool -DateCreated -d %H:%M:%S -S dsc00017.jpg   | findstr /i "date"  
DateCreated: 2003:08:18
Das ist aber nicht die Urzeit, sondern das Datum wie Urzeit formatiert. Das wäre also ein falsches Ergebnis. Jetzt kenne ich zwar inzwischen den Grund, aber anfangs nicht. Der Schalter -DateCreated fragt von den 3 möglichen "creationdate" ausschließlich den vom IPTC ab, und der hat wohl keine Urzeit, daher wird genommen, was kommt. (in Irfanview oder Geosetter kann man im IPTC-Tag "Create Date" keine Urzeit eintragen. Ich hatte dort mal ein bewußt auffällig falsches Datum eingetragen um das herauszufinden.)
Ändert man in dieser Zeile -DateCreated in -DateTimeOriginal, und nimmt eine Datei die auch EXIF hat, dann kommt wie erwartet auch die Urzeit zurück:
DateTimeOriginal: 17:57:49
erhält also das erwartete Ergebnis. Sonst bleibt die Variable leer.

Modifiziert man deinen Einzeiler zu:
exiftool -DateCreated -d "%%m-%%d-%%Y %%H:%%M:%%S" -S %1 | findstr /i "date"  
kommt als Rückmeldung:
DateCreated: 2006:03:05
also wieder ohne Urzeit und nicht wie vorgegeben MM-DD-YYYY formatiert!???

Aber es kann noch "verrückter" kommen: mit eingeschaltetem Echo sieht man folgendes (aus einem anderen Batch):
I:\Pfad egal>for /F "delims=: tokens=2,3,4,5" %i in ('exiftool.exe -d "%H:%M:%S" dsc00123.jpg |findstr /i "Create Date"') do set exiftime=%i:%j:%k  
I:\Pfad egal>set exiftime= 14:37:42
I:\Pfad egal>set exiftime= 10:02:20
I:\Pfad egal>set exiftime= 14:37:42
I:\Pfad egal>set exiftime= 2003:06:08
I:\Pfad egal>echo "ExifTime:  2003:06:08  
"ExifTime:  2003:06:08  
(nimmt man nur "delims=: tokens=2", bekommt man nur die erste Zahl.)
Es werden also 4 Zeilen mit der Zeichenkette "Create Date" gefunden, und der Reihe nach ausgelesen. Viermal wird bei diesem einen Aufruf also die Variable exiftime neu gesetzt. Da in der 4. Zeile wohl keine Urzeit steht, wird das Datum urzeitformatiert ausgeworfen. Und da soll man nicht "verwirrt" werden? ;)

Freundliche Grüße Roschka
mak-xxl
mak-xxl 30.03.2012 um 12:23:50 Uhr
Goto Top
Moin Roschka,

ich hatte in meinem ersten Post meine Version so kenntlich gemacht: <exiftool> - also als Link. Den habe ich jetzt kontrolliert - leider ohne Funktion. In diesem Sinne bin ich schuldig, weil von Dir kein Widerspruch und damit für mich die Rede und Verwendung vom gleichen Tool gegeben war.

Wenn Du Dir die Mühe machen willst, mit dem von mir verwendeten Tool (muss nicht installiert werden) mal einen Versuch zu machen - gerne. Ich werde im Gegenzug mal das von Dir verwendete Tool auf Herz und Nieren prüfen (wenn ich es finde ...).

Die Probleme, die Du in dem letzten Post schilderst, sind übrigens in der von mir ursprünglich geposteten Variante bereits gelöst (siehe Hinweise zu '#=:'), nur eben mit anderem <exiftool>. Und nachdem Du herausgefunden hast, wie komplex das Thema Datum/Zeit aus EXIF-Daten ist, verstehst Du evtl. auch meine vorsichtige Gangart in Richtung Veränderung von Dateieigenschaften - ich habe mit diesem Zeugs seit vielen Jahren im medizinischen Bereich (PACS/DICOM) zu tun.

Leider kann ich aus zeitlichen Gründen erst ab heute abend dieser Sache wieder nachgehen.

Freundliche Grüße von der Insel - Mario
Roschka
Roschka 31.03.2012 um 00:30:00 Uhr
Goto Top
Hallo Mario, hallo bastla,
vielen Dank für deine (eure) Geduld und deine (eure) Hilfsbereitschaft. (ebenso an bastla, den ich als kompetenten Menschen in Erinnerung in Sachen Batch und VBS habe! Ebenso habe ich Biber in sehr positiver Erinnerung!)
Das Problem ist wohl meistens, wenn man "Brocken ohne Erklärung hingeworfen" bekommt.
Zum Beispiel fiel bei mir bastlas Zeile mit "modification" durch, weil mir nicht klar war, das es eigentlich das "Änderungsdatum von Windows" ist! Die Erklärung fehlte! Denn das gibt's nicht doppelt!

Langsam bekomme ich den Eindruck, das es auch von exiftool.exe sehr unterschiedliche Versionen zu geben scheint!
Gibt man "exitool /?" in der Kommandozeile ein, kommt nichts, oder eine Fehlermeldung. Hat man einen Syntaxfehler in der Zeile kommt manchmal ein "ellenlanges" (doch unverständliches) 'Handbuch'. Das wonach ich such(t)e kommt nie drin vor. Dafür oft, wie man Geo-Koordinaten bearbeitet.

Wenn ich meinen kompletten Laptop nach "exiftool.exe" durchsuchen lasse, kommen __sehr unterschiedliche Dateien__ zum Vorschein.:
in C:Windows\prefetch sind 2. Eine 8KB, eine 33KB groß. in %temp%\par-Dell\cache-exiftool-8.15\ eine 53 KB große. In C:\Windows\ eine 4.325 KB große (kopierte ich dahin!), wie in D:\Programme\GeoSetter\tools; in D:\Programme\ExifyMe\ eine mit 4.492 KB; (eine ebensogroße in I:\Dokumente und Einstellungen\<User>\Lokale Einstellungen\Anwendungsdaten\GeoSetter\tools;
eine 4.496 B große in D:\Programme\Prune\ ; und dann gibt es noch eine 4.669 KB große in ..\All Users\downloads\Bildbearbeitung\ExifToolGui\., die aber auch wiederum in E:\Dokumente und Einstellungen\Dell.Dell-Laptop\Anwendungsdaten\Geosetterßtools\ erscheint. !?!?!?!?
__Welche Vielfalt!!!__
Welche arbeitet denn nun???
Jedes Programm, das exiftools.exe verwendet, arbeitet scheinbar mit anderen Versionen??? Wer soll das ahnen???
Das Prog AvPicFaceXmpTagger_1.7.exe benutzt temporär eine "E:\Temp\AnVoIt.PicasaLib.Resources.exiftool_8.16.exe".

Es sieht also erstmal so aus, als sollte ich DEINEM Link folgend mir ExifTool herunterladen, damit ich Deine Vorschläge nachvollziehen kann!!!

back-to-top__Von diesem Durcheinander konnte ich anfangs doch gar nichts wissen!!!__

Mir kommt jetzt die Vermutung, das sind unterschiedliche Kompilierungen mit unterschiedlichen Fähigkeiten!?

Zu deinem Link: irgendwie hatte ich genau diese Seite in einem BrowserTab schon offen: Download Version 8.85 (3.2 MB) - Mar. 25, 2012.
Ich werde jetzt die "Windows Executable: exiftool-8.85.zip (3.3 MB)" herunterladen und installieren...

Freundliche Grüße Roschka.

P.S.: Download kappte. In "Windows Executable: exiftool-8.85.zip (3.3 MB)" ist nur eine exiftool(-k).exe enthalten. Hoffentlich die selbe, wie deine. 4.835.441 byte 25.03.2012 07:03 , CRC32 631BC82F.

P.P.S.: ich habe den download wegen Domain *.cn bei virustotal.com untersuchen lassen, er scheint Sauber.. Kürzlich lies ich svchost.exe und userinit.exe dort prüfen. svchost.exe hatte einen Win32.Trojan.Gen und Userinit.exe einen Winn32.Banker,trj drin. Habe beide durch saubere Versionen ersetzt. Auch die beiden sind heute sauber.


So nun mal ausprobieren. Das Ergebnis scheint das gleiche.. Aber neue Gedanken.
Die Zeile:
I:\Pfad egal>exiftool(-k) -d "%m-%d-%Y %H:%M:%S" -S 872141.jpg   | findstr /i "date"  
bringt folgende Ausgabe: (durch -S stark verkürzt, aber immernoch ein Leerzeichen zu viel in der letzten Zeile)
FileModifyDate: 03-05-2006 17:57:50
ModifyDate: 03-23-2006 13:12:25
DateTimeOriginal: 03-05-2006 17:57:49
CreateDate: 03-23-2006 13:12:25
MetadataDate: 03-23-2006 13:12:25
DateCreated: 2006:03:05
wie man sieht ist die Letzte Zeile ohne Urzeit und das Datum als Urzeit formatiert.
Wenn man das genau weis, kann man anders vorgehen.
for /f "delims=: tokens=2,3,4" %%i in ('exiftool.exe -d "%%m-%%d-%%Y" -DateCreated %1 ^| findstr /i "Created"') do set jahr=%%i & set monat=%%j & set tag=%%k  
set newdate=%monat%-%tag%-%jahr%
Aber leider ist die Rückmeldung dann:
>set newdate=03 -05- 2006
also mit überflüssigen Leerzeichen, die wegmüssen. Aber wie?
mak-xxl
mak-xxl 31.03.2012 um 18:22:31 Uhr
Goto Top
Moin Roschka,

nun denn - herzlich willkommen in der Welt der Zerwirrnis, also der Rechnerwelt.

Teste also mal bitte das Tool (so wie mit Post vom 29.03.2012, 15:08:37 vorgeschlagen), am besten mit einem Bildverzeichnis mit ca. 10 Dateien und poste danach die Inhalte der erzeugten <*.dat>.
Die <exiftool(-k).exe> kannst Du in <exiftool.exe> umbenennen, den Sinn des Originalnamens 'kriejen wa später ...'.

Freundliche Grüße von der Insel - Mario
Biber
Biber 31.03.2012 um 20:39:12 Uhr
Goto Top
Moin Roschka,

das Detailproblem mit den überflüssigen Leerzeichen (trailing blanks) kannst du auf mehrere Arten lösen:

for /f "delims=: tokens=2,3,4" %%i in ('exiftool.exe -d "%%m-%%d-%%Y" -DateCreated %1 ^| findstr /i "Created"') do (  
   (set jahr=%%i) & (set monat=%%j) & (set tag=%%k)
) 
set "newdate=%monat%-%tag%-%jahr%"  
:: -- oder --
for /f "delims=: tokens=2,3,4" %%i in ('exiftool.exe -d "%%m-%%d-%%Y" -DateCreated %1 ^| findstr /i "Created"') do (  
   set "jahr=%%i" & set "monat=%%j" & set "tag=%%k"   
) 
set "newdate=%monat%-%tag%-%jahr%"  
:: -- oder, das naheliegendste
for /f "delims=: tokens=2,3,4" %%i in ('exiftool.exe -d "%%m-%%d-%%Y" -DateCreated %1 ^| findstr /i "Created"') do (  
   set "newdate=%%j%-%%k-%%i"  
)

Grüße
Biber
Roschka
Roschka 02.04.2012 um 23:58:13 Uhr
Goto Top
Hallo Mario,
das umbenennen war kein Problem ;) Ich werde mal 10 Bilder mit Exif zusammensuchen und in einen separaten Ordner kopieren, um den Versuch zu wiederholen. Jetzt gleich schaffe ich das nicht, weil andere Aufgaben drängen. Aber ich werde es machen, weil ich herausfinden will, was dein Script tun soll...

Hallo Biber,
Danke für deine Vorschläge. Konnte ich schnell ausprobieren. Das Problem liegt aber bei diesem (mir eigentlich auch als Vorhandensein wichtigen) IPTC-Date created. Das ist kein echter Exif-Tag.
Zusammenfassend nur die echos von set newdate: (Reihenfolge wie deine)
  I:\Pfad egal>rem Vorschlõge von Biber: Leerzeichen wegbekommen.
I:\Pfad egal>for /F "delims=: tokens=2,3,4" %i in ('exiftool.exe -d "%m-%d-%Y" -DateCreated 872141.jpg | findstr /i "Created"') do ((set jahr=%i )  & (set monat=%j )  & (set tag=%k ) )  
I:\Pfad egal>((set jahr= 2006 )  & (set monat=03 )  & (set tag=05 ) )
I:\Pfad egal>set "newdate=03-05- 2006"  
I:\Pfad egal>for /F "delims=: tokens=2,3,4" %i in ('exiftool.exe -d "%m-%d-%Y" -DateCreated 872141.jpg | findstr /i "Created"') do (set "jahr=%i"   & set "monat=%j"   & set "tag=%k"  )  
I:\Pfad egal>(set "jahr= 2006"   & set "monat=03"   & set "tag=05"  )  
I:\Pfad egal>set "newdate=03-05- 2006"  
I:\Pfad egal>for /F "delims=: tokens=2,3,4" %i in ('exiftool.exe -d "%m-%d-%Y" -DateCreated 872141.jpg | findstr /i "Created"') do (set "newdate=%ji" )  
I:\Pfad egal>(set "newdate=03i" )  

Wie man sieht bleiben in den ersten beiden Varianten leider doch noch Leerzeichen übrig, und in der letzten kommt was ganz seltsames zustande. Ein Tippfehler : (set "newdate=%%j%-%%k-%%i")! Der mir auch nicht gleich auffiel!
Nach der Korrektur kommt aaus dieser Zeile:
I:\Pfad egal>(set "newdate=03-05- 2006" )  
wie bei den anderen.
Das Problem liegt in der Originalzeile zwischen "Date Created : 2005:03:05"!? Das scheint irgendwie ein "komisches Leerzeichen" zu sein.
Dennoch habe ich nebenbei auch gelernt, wie ich mit exiftool das EXIF Datum "Kammeradatum" __und das IPTC__-Datum "__Date Created__" schreiben kann, wenn es fehlt. Denn dieses IPTC-Datum habe ich bisher (aber noch nicht bei allen) immer von Hand eingetragen, was mühsam ist. Damit kann man aber das "Dokumenterstellungsdatum" bewahren, auch wenn sich die Filedatums ändern, auch bei Dateien, die keine Digitalfotos mit EXIF sind. "Dokument" meint in dem Falle nicht "Datei". Meine Geburtsurkunde hat zum Beispiel das Dokumenterstellungsdatum der Geburtsurkunde in IPTC bekommen, und nicht das Datum, wann ich es eingescannt habe. usw.
Ich habe einige Fotos, die das "gepixelte" Datum der Fotografie enthalten, aber EXIF verloren haben. Das trage ich dann in IPTC "Date created" von Hand ein, weil sich diese Pixel nicht elektronisch als Datum auslesen lassen. Mitunter hat man ja gescannte Fotos, die ihr Erstellungsdatum nur "gepixelt" enthalten.
Und ergänzend zu diesem "komischen Leerzeichen-Problem" stellt sich die Frage, wie man herausbekommt, das dieses Datum eigentlich leer ist, ohne zwei Anführungszeichen in dieser Variablen zu haben?
Viele Grüße aus (Ober-)Sachsen Roschka
bastla
bastla 03.04.2012 um 00:23:47 Uhr
Goto Top
Hallo Roschka!

Da sich ja nach "DateCreated:" noch ein Leerzeichen befindet, dieses aber nicht als Delimiter festgelegt wurdr, muss es ja vor der Jahreszahl erhalten bleiben - daher:
for /F "tokens=2,3,4 delims=: " %%i in ('exiftool.exe -d "%m-%d-%Y" -DateCreated 872141.jpg | findstr /i "Created"') do set "newdate=%%j-%%k-%%i"
Grüße
bastla
Roschka
Roschka 05.04.2012 um 16:53:08 Uhr
Goto Top
Danke bastla. Auf die geniale Idee, "tokens und delims" zu vertauschen, muß man erstmal kommen!!!
Prima, so kriegt man die Leerzeichen weg.

Bleibt noch die Frage, wie man die Datumseinträge vergleichen kann um das kleinere also ältere Datum zu finden. Auf eine andere Art meine ich, als in ( Roschka schreibt am 28.03.2012, 23:59:17 Uhr ) beschrieben, weil man dafür bei jedem Datum zwei Variablen schreiben müßte, oder eine zweimal umwandeln. Geht das auch anders?

Und dann wüßte ich gern wie man herausfindet daß ein Datum leer, also nicht vorhanden ist, damit nicht sowas herauskommt: (Datum '20.03.2004' ist älter als '' ) ? (wobei '' eigentlich 'leer' sein sollte.)
Das ältere Datum soll dann mit den nächten verglichen werden, bis man das älteste Datum hat.

Besser wäre ja, bei einer leer gebliebenen Variablen auf den nächsten Batch-Teil, mit einer anderen Datumsanfrage zu verzweigen.
z.B. Wenn ExIf-"DateTime Original" nicht vorhanden, also leer ist, zu einer Abfrage von Exif DateTime zu verzweigen. Ist dies auch leer zur Abfrage von IPTC-DateCreated. Ist alles leer, kann man nur noch FileModification mit FileCreation vergleichen. Das auch mal auch "Digitized Date" vorkommt ist eher selten.

Freundliche Grüße Roschka
bastla
bastla 05.04.2012 um 17:16:00 Uhr
Goto Top
Hallo Roschka!
Und dann wüßte ich gern wie man herausfindet daß ein Datum leer, also nicht vorhanden ist
Wenn Du vorweg die Variable löschst, kannst Du nach der (versuchten) Zuweisung feststellen, ob sie jetzt existiert:
set "newdate="  
for /F "tokens=2,3,4 delims=: " %%i in ('exiftool.exe -d "%m-%d-%Y" -DateCreated 872141.jpg | findstr /i "Created"') do set "newdate=%%j-%%k-%%i"  
if defined newdate echo Datum gefunden
Hinsichtlich des Datumsvergleiches kenne ich für Batch keine sinnvolle Alternative zur angesprochenen Umwandlung in das Format "JJJJMMTT" - das lässt sich zwar auch unmittelbar in der zweiten Schleife realisieren (womit nur der erste Datumswert in eine eigene Variable gestellt werden müsste), ist aber mit 2 Datumsvariablen sicher übersichtlicher ...

Grüße
bastla
Roschka
Roschka 06.04.2012 um 03:51:37 Uhr
Goto Top
Hallo bastla, danke für deine Antwort.
Dieser Lösungsweg sieht interessant aus. Ich erkenne schon mal einen Fehler von mir: (set "newdate=") sieht anders aus, als (set newdate=""), wie ich es versuchte.
Solche Kleinigkeiten sind es oft, die einen zum Verzweifeln bringen können!
Inzwischen erkenne ich auch Flüchtigkeitsfehler, wie vergessene Dppelung von %.
(Ich arbeite mit BATCH nicht täglich, sondern vielleicht "einmal im Jahr"!)
Wenn man dann funktionierende Teilscripte zusammensetzen will, und plötzlich heißt es an Stellen, die vorher alleine funktionierten: "echo ist an dieser Stelle syntaktisch nicht erlaubt". Ebenso an gleicher Stelle, "do ist syntaktisch nicht erlaubt". ? (z.B. "if newdate="" echo Datum ist leer", klappte in Dreizeiler alleine. Eingebaut in "größere", kommt plötzlich so eine Fehlermeldung.???)
müßte man das dann so abfragen:
if not defined newdate goto anderswo
???

Welche Aktion und wie hängt man an
if defined newdate echo Datum gefunden
"then goto" (oder "do" oder "call" dran???
Ansonsten, wenn mann es schafft die Variablen "jahr", "monat" und "tag" in einer FOR-Schleife zu produzieren, sollte es nicht schwer sein auch gleich eine weitere Variable vom Muster JJJJMMTT zu erzeugen. Allerdings werden die nötigen Variablennamen deutlich länger sein müssen, als in bisherigen Beispielen. Darin sehe ich aber kein Problem!

Außerdem kann man die Vergleichsvariable "YYYYMMDD" bzw. "JJJJMMTT" auch gleich so zum Neuschreiben der eventuell fehlenden IPTC-CreateDate benutzen. Denn...
bisher versuchte ich ein fehlendes IPTC-DateCreated immer von Hand einzutragen (soweit ich welche kannte), was ich leider nie konsequent durchgehend tun konnte, wegen dem Zeitaufwand, oder fehlender Information.
Nun kommt mir in gewisser Weise die Einstellung von IrfanView zu Hilfe, wo ich anhakte das "Modifikation Date" unangetastet zu lassen, wenn ich Dateien nur taggte oder Bildunterschriften, bzw Kommentare hinzufügte. Ich änderte ja nicht den eigentlichen Bildinhalt, sondern nur die Zusatzinformationen.

Bis V3.8 arbeitete Picasa ähnlich.Doch seit V3.9 ist das anders. Kennwörter, Kommentare, Bildunterschriften ändern nun doch das "Modification Date" der Datei. (das Picasa das vorher nicht tat, meldeten welche als BUG! Ich fand's gut. Denn nun geht die Information verloren, daß eine Datei ursprünglich aus z.B. 2003 stammt (letzte Änderung am Inhalt), kopiert 2010, wird sie nun durch "taggen" zu 2012.
Ich will aber die Info "2003" erhalten. Ich fand in der __neuen Version Picasa3,9__ aber eine nützliche neue Funktion: "Tools/Datum und Urzeit anpassen...". Damit kann man einen Teil der Sachen, die ich per BATCH und FileTouch versuche, per Mausklick machen. Aber es ist inkonsequent in der Trennung der Information. Erscheint "Kameradatum" ist nie klar, ob das aus EXIF oder IPTC stammt. Datei-Erstellungs- und änderungsdatum zeigt es nur getrennt an, wenn unterschiedlich, sonst heißt es nur "Dateidatum".
Der Menüpunkt "Tools/Datum und Zeit anpassen..." nimmt nicht automatisch das älteste Datum, sondern schlägt das Dateidatum vor. Man muß also genau hinschauen und "Eigenschaften" (i) eingeblendet haben, zum kontrollieren.
Hat man das "neue" Datum eingestellt, schreibt Picasa3,9 nicht nur das FileCreationDate neu, sondern auch (zuerst nur) das IPTC-DateCreated neu! (egaal ob leer oder nicht). in EXIF schreibt Picasa das Datum aausschließlich dann, wenn EXIF überhaupt schon benutzt war! Sonst nicht.
Aaber schon das (Neu-)Schreiben des IPTC-Tags DateCreated hilft enorm beim "Behalten eines Dokumenterstellungsdatums"!

Wie auch immer. Ich möchte das mit Batch trotzdem machen können.
Viele Grüße
Roschka
bastla
bastla 06.04.2012 um 09:15:04 Uhr
Goto Top
Hallo Roschka!

Wenn Du per
if not defined newdate goto anderswo
einen Sprung durchgeführt hast, erreichst Du die folgende Zeile im Batch ohnehin nur, wenn %newdate% existiert - also eigentlich kein zusätzlicher Code erforderlich ...

Soferne in beiden Fällen Aktionen durchzuführen sind, kannst Du auch "else" verwenden:
if defined newdate (echo %newdate% erstellt) else (echo Kein Datum gefunden)
oder auch
if defined newdate (
    echo %newdate% erstellt
    echo Eintragung wird vorgenommen
) else (
    echo Kein Datum gefunden
)
Grüße
bastla

P.S.:
if newdate="" echo Datum ist leer
sollte nie funktioniert haben - wenn, dann
if "%newdate%"=="" echo Datum ist leer
denn es muss bei einem Vergleich auf beiden Seiten des Vergleichsoperators zumindest "irgendetwas" stehen ...