jk87
Goto Top

Erstellungsdatum mit EXIF-Datum ersetzen

Hallo,

habe mir ein paar Batch-Befehle zusammengestellt um meine Fotosammlung besser zu organisieren, greife dafür auch auf Jhead zurück.
Nun möchte ich noch das Erstellungsdatum der Fotos mit dem Bild-Aufnahmedatum aus dem EXIF-Header ersetzten.
Wie kann ich das Erstellungsdatum unter Windows beeinflussen bzw. weiß jemand von euch wie man mit/ohne Jhead das Aufnahmedatum auslesen und damit das Erstellungsdatum überschreiben kann?

Danke schon mal für eure Bemühungen.
JK


Falls notwendig hier der bisherige Code:
echo     Alle im Ornder befindlichen JPG-Dateien werden umbenannt:
echo       20090708_140912_BEZEICHUNG.jpg
echo       EXIF-Datum_-Uhrzeit_BEZEICHUNG.jpg
echo.
for /f %%i in ('dir *.jpg ^2^>nul^|find "Datei(en)"') do set /a anz+=%%i  
echo Es werden %Anz% JPG-Dateien berarbeitet.
echo.
:begin
set /P bezeichnung=Bitte geben Sie die Bezeichnung ein: 
if "%bezeichnung%"=="" goto begin  
echo.
echo     Fotos werden laut EXIF-Daten umbenannt:
jhead -nf%%Y%%m%%d-%%H%%M%%S "**\*.jpg"  
echo     Fotos werden mit Bezichnungen versehen...
for /f  %%i in ('dir "*.jpg" /B^|findstr /V /I /B "%bezeichnung%"') do ren "%%~fi" "%%~ni_%bezeichnung%%%~xi"  
echo.
echo     Fotos werden laut EXIF-Daten gedreht:
jhead -autorot "**\*.jpg"  
echo.
echo     EXIF-Daten werden dem Aenderungsdatum zugewiesen:
jhead -exonly -ft "**\*.jpg"  

Content-Key: 121351

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

Printed on: April 23, 2024 at 07:04 o'clock

Member: bastla
bastla Jul 26, 2009, updated at Oct 18, 2012 at 16:38:52 (UTC)
Goto Top
Hallo JK87!

Zum Thema "Aufnahmedatum auslesen" hatten wir mal diesen Thread ...
Das Ändern des Erstellungsdatums kannst Du entweder mit einem "touch"-Tool vornehmen oder auf die "harte" Tour: Systemdatum und Zeit jeweils passend setzen und Foto kopieren bzw das Systemdatum vor dem Rotieren ändern (dadurch dürfte ja auch eine neue Datei "erstellt" werden) ...

[Edit] Noch eine Anmerkung: In der Beschreibung von "Jhead" wird auch die Funktion "Re-name or date stamp files according to exif timestamp erwähnt ... [/Edit]

Grüße
bastla
Member: JK87
JK87 Jul 26, 2009, updated at Oct 18, 2012 at 16:38:52 (UTC)
Goto Top
Hallo bastla!

Erstmal Danke für deine schnelle Antwort.
Zum Thema "Aufnahmedatum auslesen" hatten wir mal
diesen Thread
Leider kann ich mit diesem Thread nicht wirklich etwas anfangen, müsste doch auch irgendwie mit Batch zu realisieren gehen.

Das Ändern des Erstellungsdatums kannst Du entweder mit einem
"touch"-Tool vornehmen oder auf die "harte" Tour
Da mein Tool automatisch funktionieren sollte, kommt wohl zum Ändern des Erstellungsdatums nur ein touch-Tool infrage. Fürchte nur das wird länger dauern bis ich das brauchbar mit Batch kombiniert habe.

[Edit] Noch eine Anmerkung: In der Beschreibung von "Jhead"
wird auch die Funktion "Re-name or date
stamp
files according to exif timestamp

erwähnt ... [/Edit]
Bei dieser Beschreibung ist meines Wissens das Verwenden des EXIF-Datum/Zeitstempel nur für den Dateinamen und nicht für das Erstellungsdatum gemeint - und in die Dateinamen lass ich es bereits reinkopieren.

Gruß
JK
Member: bastla
bastla Jul 26, 2009, updated at Oct 18, 2012 at 16:38:52 (UTC)
Goto Top
Hallo JK87!
müsste doch auch irgendwie mit Batch zu realisieren gehen.
Ich würde das auch heute noch als Batch (wenn auch mit ein klein wenig VBScript garniert face-wink) bezeichnen ...
Verwenden des EXIF-Datum/Zeitstempel nur für den Dateinamen und nicht für das Erstellungsdatum gemeint
Die hier beschriebene Option
-ft Sets the file's system time stamp to what is stored in the Exif header.
würde ich anders interpretieren (habe ich allerdings nicht getestet) ...

Grüße
bastla
Member: JK87
JK87 Jul 26, 2009 at 20:31:59 (UTC)
Goto Top
als Batch (wenn auch mit ein klein wenig VBScript garniert face-wink) bezeichnen ...
Du hast ja eigentlich recht, vor allem wenn das VBScript auch schon fertig geschrieben ist face-smile
Habe deinen Code aus dem Thread einmal ausprobiert, aber leider werden die Bilder in einen Ordner namens "--DSC-T100" verschoben. Also bezeichnet der Index 25 das Kameramodell und nicht das Aufnahmedatum - sehr merkwürdig, weil überall diesem Index diese Funktion zugeschrieben wird, ich verwende WindowsXP.

-ft Sets the file's system time stamp to what is stored in the Exif header.
würde ich anders interpretieren (habe ich allerdings nicht getestet) ...
Das -ft beeinflusst leider nur das Änderungsdatum - habe ich auch in Verwendung.
echo     EXIF-Daten werden dem Aenderungsdatum zugewiesen: 
jhead -exonly -ft "**\*.jpg"  
Member: bastla
bastla Jul 26, 2009 at 20:56:17 (UTC)
Goto Top
Hallo JK87!
Das -ft beeinflusst leider nur das Änderungsdatum - habe ich auch in Verwendung.
Tja, dann eben tatsächlich ein "touch" oder das Kopieren (nur zur Sicherheit: das "Erstellungsdatum" wird beim erstmaligen Schreiben auf den Datenträger gesetzt) der Datei (nach Setzen von Datum/Uhrzeit auf den ausgelesen Wert) in eine Temporär-Datei und ein anschließendes "move" zurück, um die ursprüngliche Datei zu überschreiben.
Wieso willst Du eigentlich das Datum nicht über "jhead" auslesen? Mit
for /f "tokens=3-8 delims=: " %%a in ('jhead TEST.JPG^|findstr /b /c:"File date"') do echo %%c.%%b.%%a %%d:%%e:%%f
solltest Du ja alle Datums-/Zeitbestandteile erhalten und entsprechend weiter verarbeiten können ...

Grüße
bastla

P.S.: Das angesprochene VBScript liefert (unter XP bei mir) mit "25" das Ergebnis "Dateiname$Timestamp", wenn die Zeile 10 so geändert wird:
echo For Each F In Fld.Items:WScript.Echo F^&"%Delim%"^&Fld.GetDetailsOf(F,25):Next>>%G%
Die Ausgabe von "Dateiname" und "Timestamp" (getrennt durch "$", daher auch in der "for"-Schleife als "delim" verwendet) ist übrigens erforderlich, weil das VBScript nur ganze Ordner, nicht aber einzelne Dateien auslesen kann ...
Member: JK87
JK87 Jul 27, 2009 at 13:50:21 (UTC)
Goto Top
Hallo bastla!

Wieso willst Du eigentlich das Datum nicht über "jhead" auslesen?
An diese Variante habe ich noch gar nicht gedacht und die ist die Beste überhaupt, danke!

Jetzt muss ich das nur noch irgendwie in das Erstellungsdatum reinmachen. Glaube das Kopieren der Datei ist zu Zeitaufwendig bei 1000 Fotos mit je einem ~1MB, aber es wäre dann halt reines Batch und ich würde kein zusätzliches Tool mehr benötigen, mal schauen mit was ich es überhaupt zum Laufen bringe.

Bezüglich deinem VBScript muss ich mich entschuldigen, habs jetzt am Desktop-PC ausprobiert, funktioniert einwandfrei! Ich glaube es ist jetzt wirklich an der Zeit mein Notebook neu aufzusetzten face-smile
Member: JK87
JK87 Jul 28, 2009 at 08:48:40 (UTC)
Goto Top
Hallo bastla!

Hab es jetzt mit WinTouch realisiert, somit ist mein Batch-File fertig und es macht genau das was es machen soll.
Vielen Herzlichen Dank für deine Hilfe!

Der Vollständigkeit halber hier mein gesamtes Batch-File, vielleicht hilft es einmal jemanden:
@echo off
echo.
echo   --------------------------------------------------------------
echo      JPG-Archivist                                Build by JK
echo   --------------------------------------------------------------
echo.
echo     Alle im Ornder befindlichen JPG-Dateien werden umbenannt:
echo       20090708_140912_BEZEICHUNG.jpg
echo       EXIF-Datum_-Uhrzeit_BEZEICHUNG.jpg
echo.
for /f %%i in ('dir *.jpg ^2^>nul^|find "Datei(en)"') do set /a anz+=%%i  
echo Es werden %Anz% JPG-Dateien berarbeitet.
echo.
:begin
set /P bezeichnung=Bitte geben Sie die Bezeichnung ein: 
if "%bezeichnung%"=="" goto begin  
echo.
echo     Fotos werden laut EXIF-Daten umbenannt:
jhead -nf%%Y%%m%%d-%%H%%M%%S "**\*.jpg"  
echo     Fotos werden mit Bezichnungen versehen...
for /f  %%i in ('dir "*.jpg" /B^|findstr /V /I /B "%bezeichnung%"') do ren "%%~fi" "%%~ni_%bezeichnung%%%~xi"  
echo.
echo     Fotos werden laut EXIF-Daten gedreht:
jhead -autorot "**\*.jpg"  
echo.
echo     Erstellungs-, Aenderungs- und Zugriffsdatum werden
echo     mit EXIF-Aufnahmedatum angepasst:
jhead -exonly -ft "**\*.jpg"  
for /f "tokens=3-8 delims=: " %%i in ('jhead *.jpg^|findstr /b /c:"File name"') do (  
for /f "tokens=3-8 delims=: " %%a in ('jhead %%i^|findstr /b /c:"File date"') do wintouch -p %%i -t "%%c.%%b.%%a %%d:%%e:%%f" -s -a -m -c  
)
echo.
echo.
echo     Aenderungen durchgefuehrt!
echo.
echo.
pause
Member: MikeHunter
MikeHunter Aug 30, 2010 at 18:29:34 (UTC)
Goto Top
Danke JK.
Dein Skript hat mir heute wirklich aus der Patsche geholfen.

Ich habe es etwas modifiziert aber der Ansatz war Gold wert.

Gruß
Mike