seit mehr als 10 Jahren habe ich nicht mehr programmiert (Rentner), vieles vergessen, muss jetzt aber ein kleines Tool bauen und brauche dazu Hilfe.
Meine GoPro Kamera hatte ein falsches Datum, deshalb kann ich die vielen Fotos und Videos nicht mit denen vom Handy richtig sortieren.
Ich muss die Stunden des Erstelldatums bei den Dateien, die mit GX.. anfangen um 2 Stunden korrigieren. Das Exiftool, was frei verfügbar ist, ist viel zu umständlich. Da habe ich mir ein kleines Tool gebaut, was aber nur zum Teil funktioniert.
PB hat die Datumstypen
#PB_Date_Created : gibt das Erstellungsdatum der Datei zurück
#PB_Date_Accessed: gibt das Datum des letzten Zugriffs auf die Datei zurück
#PB_Date_Modified: gibt das Datum der letzten Veränderung an der Datei zurück
eingebaut. mein Prog funktioniert aber nur mit Created und Modified, dort werden die Stunden korrigiert, bei Accessed werden aber die Tage modifiziert.
Frage 1: Warum ist das so?
Frage 2: Wie komme ich an das Datum, bei MP4 "Medium erstellt" und bei jpg "Aufnahmedatum"?
Im Windows Explorer kann man sich das einstellen und auch mit dem Exiftool auslesen, aber wie mache ich das in PB?
Es wäre schön, wenn mir da jemand helfen könnte, vielen Dank im voraus.
WIN 10 64 bit, PB 6.0 LTS
Dieter
Code: Alles auswählen
;Stundenschieber für Dateien die mit "GX"... beginnen
;TODO: man muss einen Pfad mit einer oder mehreren Dateien haben, die mit GX anfangen
EnableExplicit
#Mainwindow = 1
Enumeration : #Datgadg : #Pfad_Wahl : #Start_Button : #Ende_Button : #TxtGadg_Std_Korr
#Pfad_Txt : #TxtGadg_Zeit : #combogadg_DaT_Art : #combogadg_DaT_Std
EndEnumeration
Define pfad$="C:\Temp\"
Define Ende
Global datum$ = FormatDate("%dd.%mm.%yyyy.%hh:%mm:%ss",Date())
Global datums_flag = #PB_Date_Created
Global shift_hour_flag = 0 ; Stundendifferenz (-2)-(-1)- 0 - (+1) -(+2)
Global DatumsWert ; Zahlenwert Datum
Global DW_neu ; Änderung mit Stundendifferenz
Procedure AendereDatum(Pfad$)
Protected Zeit$, file$
Protected gefunden
gefunden = ExamineDirectory(#PB_Any, pfad$, "GX*.*")
If gefunden
While NextDirectoryEntry(gefunden)
If DirectoryEntryType(gefunden) = #PB_DirectoryEntry_File
file$ = DirectoryEntryName(gefunden)
If Left(file$,2)= "GX"
file$ = pfad$ + file$
DatumsWert = GetFileDate(file$,datums_flag) : Debug DatumsWert
Zeit$ = FormatDate("%dd.%mm.%yyyy:%hh.%ii",Datumswert) : Debug Zeit$
DW_neu = AddDate(DatumsWert,#PB_Date_Hour,shift_hour_flag) : Debug DW_neu ; neuer Zeitwert
Zeit$ = FormatDate("%dd.%mm.%yyyy:%hh.%ii",DW_neu) : Debug Zeit$ ; Neue Zeit
DW_neu = DatumsWert + (3600 * shift_hour_flag) : Debug DW_neu ; alternative Berechnung
Zeit$ = FormatDate("%dd.%mm.%yyyy:%hh.%ii",DW_neu) : Debug Zeit$ ; Ergebnis bei alternativer Berechnung
SetFileDate(file$,datums_flag,ParseDate("%dd.%mm.%yyyy:%hh.%ii",zeit$))
SetGadgetText(#TxtGadg_Zeit, Zeit$) : Debug Zeit$
EndIf
EndIf
Wend
FinishDirectory(gefunden)
EndIf
EndProcedure
; --- Window
OpenWindow(#Mainwindow,0,0,200,250,"Dateidatum und Zeiten einstellen",
#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TextGadget(#TxtGadg_Std_Korr,5,10,190,25,"Stundenkorrektur")
ComboBoxGadget(#combogadg_DaT_Art,5,35,190,25)
AddGadgetItem(#combogadg_DaT_Art,0," Zeit -2 Std")
AddGadgetItem(#combogadg_DaT_Art,1," Zeit -1 Std")
AddGadgetItem(#combogadg_DaT_Art,2," Zeit +/-0 Std")
AddGadgetItem(#combogadg_DaT_Art,3," Zeit +1 Std")
AddGadgetItem(#combogadg_DaT_Art,4," Zeit +2 Std")
SetGadgetState(#combogadg_DaT_Art,2)
If #combogadg_DaT_Art = 7
GadgetToolTip(#combogadg_DaT_Art, "das Datum wird nicht verändert")
EndIf
; keine Korrektur, nicht verändert, es wird nur die Zeit ausgelesen
TextGadget(#TxtGadg_Zeit,5,65,190,25,datum$,#PB_Text_Border|#PB_Text_Center)
ComboBoxGadget(#combogadg_DaT_Std,5,95,190,25)
AddGadgetItem(#combogadg_DaT_Std,0," Datum erstellt")
AddGadgetItem(#combogadg_DaT_Std,1," Datum letzter Zugriff")
AddGadgetItem(#combogadg_DaT_Std,2," Datum geändert")
; AddGadgetItem(#combogadg_DaT_Std,3," Medium erstellt")
; AddGadgetItem(#combogadg_DaT_Std,4," Aufnahmedatum")
SetGadgetState(#combogadg_DaT_Std,0)
ButtonGadget(#Pfad_Wahl,5,125,190,30,"Pfad setzen")
TextGadget(#Pfad_Txt,5,165,190,25,"",#PB_Text_Border|#PB_Text_Center) ; zeigt den Pfad
SetGadgetText(#Pfad_Txt,Pfad$)
ButtonGadget(#Start_Button,5,200,60,30,"Start")
GadgetToolTip(#Start_Button, "startet einen Durchlauf, kann auch mehrfach betätigt werden")
ButtonGadget(#Ende_Button,135,200,60,30,"Ende")
SetGadgetColor(#Ende_Button, #PB_Gadget_FrontColor, $0000FF)
GadgetToolTip(#Ende_Button, "beendet das Programm")
; --- Main -------------
Repeat
Select WaitWindowEvent() ;Fenster aufrufen und auf Ereignis warten
Case #PB_Event_CloseWindow ;Fenster schließen
Ende=1
Case #PB_Event_Gadget ; Ende-Taste drücken
Select EventGadget()
Case #Ende_Button
Ende=1
Case #Pfad_Wahl ;Ordner auswählen
pfad$=PathRequester("Ordner wählen",pfad$)
SetGadgetText(#Pfad_Txt,pfad$)
Case #combogadg_DaT_Std ; Auswählen welche Zeitdaten korrigiert werden sollen
Select GetGadgetState(#combogadg_DaT_Std)
Case 0 : datums_flag = #PB_Date_Created: ; gibt das Erstellungsdatum der Datei zurück
Case 1 : datums_flag = #PB_Date_Accessed: ; gibt das Datum des letzten Zugriffs auf die Datei zurück
Case 2 : datums_flag = #PB_Date_Modified: ; gibt das Datum der letzten Veränderung an der Datei zurück
; Case 3 : datums_flag = #Medium erstellt ; Bei MP4
; Case 4 : datums_flag = #Aufnahmedatum ; Bei IPG
EndSelect
Case #combogadg_DaT_Art ; Auswählen um welche Anzahl die DW_neu korrigiert werden solle
Select GetGadgetState(#combogadg_DaT_Art)
Case 0 : shift_hour_flag = -2
Case 1 : shift_hour_flag = -1
Case 2 : shift_hour_flag = 0
Case 3 : shift_hour_flag = 1
Case 4 : shift_hour_flag = 2
EndSelect
Case #Start_Button ; Zeitänderung starten
AendereDatum(pfad$)
EndSelect
EndSelect
Until Ende
End