Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Erstellungsdatum mit EXIF-Datum ersetzen

Frage Entwicklung Batch & Shell

Mitglied: JK87

JK87 (Level 1) - Jetzt verbinden

26.07.2009, aktualisiert 18.10.2012, 10844 Aufrufe, 8 Kommentare

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:
01.
echo     Alle im Ornder befindlichen JPG-Dateien werden umbenannt: 
02.
echo       20090708_140912_BEZEICHUNG.jpg 
03.
echo       EXIF-Datum_-Uhrzeit_BEZEICHUNG.jpg 
04.
echo. 
05.
for /f %%i in ('dir *.jpg ^2^>nul^|find "Datei(en)"') do set /a anz+=%%i 
06.
echo Es werden %Anz% JPG-Dateien berarbeitet. 
07.
echo. 
08.
:begin 
09.
set /P bezeichnung=Bitte geben Sie die Bezeichnung ein:  
10.
if "%bezeichnung%"=="" goto begin 
11.
echo. 
12.
echo     Fotos werden laut EXIF-Daten umbenannt: 
13.
jhead -nf%%Y%%m%%d-%%H%%M%%S "**\*.jpg" 
14.
echo     Fotos werden mit Bezichnungen versehen... 
15.
for /f  %%i in ('dir "*.jpg" /B^|findstr /V /I /B "%bezeichnung%"') do ren "%%~fi" "%%~ni_%bezeichnung%%%~xi" 
16.
echo. 
17.
echo     Fotos werden laut EXIF-Daten gedreht: 
18.
jhead -autorot "**\*.jpg" 
19.
echo. 
20.
echo     EXIF-Daten werden dem Aenderungsdatum zugewiesen: 
21.
jhead -exonly -ft "**\*.jpg"
Mitglied: bastla
26.07.2009, aktualisiert 18.10.2012
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
Bitte warten ..
Mitglied: JK87
26.07.2009, aktualisiert 18.10.2012
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
Bitte warten ..
Mitglied: bastla
26.07.2009, aktualisiert 18.10.2012
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 ) 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
Bitte warten ..
Mitglied: JK87
26.07.2009 um 22:31 Uhr
als Batch (wenn auch mit ein klein wenig VBScript garniert ) bezeichnen ...
Du hast ja eigentlich recht, vor allem wenn das VBScript auch schon fertig geschrieben ist
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.
01.
echo     EXIF-Daten werden dem Aenderungsdatum zugewiesen:  
02.
jhead -exonly -ft "**\*.jpg"
Bitte warten ..
Mitglied: bastla
26.07.2009 um 22:56 Uhr
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 ...
Bitte warten ..
Mitglied: JK87
27.07.2009 um 15:50 Uhr
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
Bitte warten ..
Mitglied: JK87
28.07.2009 um 10:48 Uhr
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:
01.
@echo off 
02.
echo. 
03.
echo   -------------------------------------------------------------- 
04.
echo      JPG-Archivist                                Build by JK 
05.
echo   -------------------------------------------------------------- 
06.
echo. 
07.
echo     Alle im Ornder befindlichen JPG-Dateien werden umbenannt: 
08.
echo       20090708_140912_BEZEICHUNG.jpg 
09.
echo       EXIF-Datum_-Uhrzeit_BEZEICHUNG.jpg 
10.
echo. 
11.
for /f %%i in ('dir *.jpg ^2^>nul^|find "Datei(en)"') do set /a anz+=%%i 
12.
echo Es werden %Anz% JPG-Dateien berarbeitet. 
13.
echo. 
14.
:begin 
15.
set /P bezeichnung=Bitte geben Sie die Bezeichnung ein:  
16.
if "%bezeichnung%"=="" goto begin 
17.
echo. 
18.
echo     Fotos werden laut EXIF-Daten umbenannt: 
19.
jhead -nf%%Y%%m%%d-%%H%%M%%S "**\*.jpg" 
20.
echo     Fotos werden mit Bezichnungen versehen... 
21.
for /f  %%i in ('dir "*.jpg" /B^|findstr /V /I /B "%bezeichnung%"') do ren "%%~fi" "%%~ni_%bezeichnung%%%~xi" 
22.
echo. 
23.
echo     Fotos werden laut EXIF-Daten gedreht: 
24.
jhead -autorot "**\*.jpg" 
25.
echo. 
26.
echo     Erstellungs-, Aenderungs- und Zugriffsdatum werden 
27.
echo     mit EXIF-Aufnahmedatum angepasst: 
28.
jhead -exonly -ft "**\*.jpg" 
29.
for /f "tokens=3-8 delims=: " %%i in ('jhead *.jpg^|findstr /b /c:"File name"') do ( 
30.
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 
31.
32.
echo. 
33.
echo. 
34.
echo     Aenderungen durchgefuehrt! 
35.
echo. 
36.
echo. 
37.
pause
Bitte warten ..
Mitglied: MikeHunter
30.08.2010 um 20:29 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Windows Netzwerk
Windows Server 2003 SBS Netzwerk durch neuen Server Ersetzen (9)

Frage von MultiStorm zum Thema Windows Netzwerk ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...