Bilder sukzessive umbenennen

Forum zur Erstellung von Anwendungen der erweiterten Scripting-Funktion
Info: Diese Schalter und Script-Anwendungen funktionieren erst ab der Version 11
Antworten
Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Bilder sukzessive umbenennen

Beitrag von Kundal » 3. Aug 2014 12:01

Dieser Schalter eignet sich, um Bilddateien nach dem Aufnahmedatum und einer Beschreibung des Inhalts individuell umzubenennen. Bei nicht vorhandenem Aufnahmedatum kann dieses vorab als Exif-Meta-Tag geschrieben werden.
Bei eingeschalteter Voransicht kann so komfortabel jedes einzelne Bild in einem Ordner betrachtet und mit sinnvollem Namen versehen werden. Der Schalter funktioniert auch im Flatview-Modus.

Funktion:
Der Schalter prüft zunächst, ob in den Metadaten der ersten ausgewählten Datei das Aufnahmedatum vorhanden ist. Ist dies nicht der Fall, öffnet sich eine Dialogbox, in der das Aufnahmedatum auf das Erstellungsdatum der Datei, das Datum der letzten Änderung oder das aktuelle Datum gesetzt werden kann. In einem Textfeld kann außerdem ein eigenes Datum mit Uhrzeit eingegeben werden (im Format YYYYMMDD HHMMSS).
Rename.png
Rename.png (11.4 KiB) 2456 mal betrachtet
Ist ein Aufnahmedatum vorhanden (oder im ersten Dialog gesetzt worden) öffnet sich für die erste markierte Datei eine Dialogbox, in der ein neuer Name eingegeben werden kann. Dem neuen Namen wird das Aufnahmedatum vorangestellt. Der resultierende Name lautet dann [Aufnahmedatum]_[Dialogbox-Eingabe].[Erweiterung]. Nachdem die Dialogbox mit OK abgeklickt wurde, wird die nächste Datei ausgewählt und (ggfs. nach Setzen des Aufnahmedatums in der ersten Dialogbox) eine Dialogbox für sie geöffnet, in der nun die letzte Eingabe als Vorgabe eingetragen ist. Alle Dateien in einem Ordner können so nacheinander umbenannt und mit individuellen Namen versehen werden. Dateien, die nicht umbenannt werden sollen, können übersprungen werden. Die Auswahl wird in einer unendlichen Schleife fortgesetzt, bis in der Dialogbox auf Abbrechen geklickt wird.
Der Umbenennen-Befehl und damit das Namens- und Datumsformat kann in Zeile 50 (Zeile 55 inder XML-Version) nach Wunsch editiert werden.
Rename2.png
Rename2.png (10.02 KiB) 2456 mal betrachtet
Beispiel:
Alter Dateiname: DC10027.jpg
Dialogbox-Eingabe: Bernd trinkt Bier
Neuer Dateiname: 2014-08-03 11;17;56_Bernd trinkt Bier.jpg
Bei der nächsten Datei wäre der Text Bernd trinkt Bier in der Dialogbox bereits vor-eingetragen, damit mehrere Bilder mit gleicher Beschreibung, aber unterschiedlichen Aufnahmedaten benannt werden können.

Bilder sukzessive umbenennen (Skriptfunktion)

Code: Alles auswählen

Function OnClick(ClickData)
    DOpus.vars.Set "last", ""
    ClickData.Func.Command.ClearFiles
    ClickData.Func.Command.AddFile ClickData.func.command.sourcetab.selected(0)
	Call Checkdate(ClickData)
End Function

Sub Checkdate(ClickData)
	If ClickData.func.command.sourcetab.selected(0).Metadata.image.datetaken = "" Then
	    Set dlg = ClickData.Func.Dlg
   		dlg.title = "Aufnahmedatum fehlt!"
   		dlg.message = "Aufnahmedatum eingeben im Format: YYYYMMDD HHMMSS"
		dlg.max = 19
   		dlg.buttons = "OK|Erstellt|Geändert|Aktuell|Abbrechen"
   		i = dlg.show

		If i = 1 Then
				ClickData.Func.Command.RunCommand("SetAttr META " & """" & "datetaken:" & dlg.input & """")
		End If
		
		If i = 2 Then
				ClickData.Func.Command.RunCommand("SetAttr META datetaken:createdate") 
		End If

		If i = 3 Then
				ClickData.Func.Command.RunCommand("SetAttr META datetaken:modifydate") 
		End If

		If i = 4 Then
				ClickData.Func.Command.RunCommand("SetAttr META " & """" & "datetaken:" & Year(Now) & "-" & Month(Now) & "-" & Day(Now) & " " & Time & """") 
		End If
	End If
	ClickData.Func.Command.RunCommand("Go Refresh")
	ClickData.Func.Command.RunCommand("Select {file} EXACT DESELECTNOMATCH")
    Call Edit(ClickData)
End Sub

Sub Edit(ClickData)
    Set dlg = ClickData.Func.Dlg
    dlg.message = "Bildbeschreibung eingeben:"
    dlg.title = "Bilder umbenennen"
    dlg.buttons = "OK|Überspringen|Abbrechen"
    dlg.max = 512
	dlg.default = DOpus.vars.Get("last")
    i = dlg.show
    DOpus.vars.Set "last", dlg.Input

    If i = 1 Then
		ClickData.Func.Command.RunCommand("Select NEXT")
   		ClickData.Func.Command.RunCommand("Rename FILEINFO CASE=extlower PATTERN=" & """" & "*.*" & """" & " TO=" & """" & "{shootingtime|D#yyyy-MM-dd} {shootingtime|T#HH;mm;ss}_" & dlg.Input & ".{ext}" & """")
        Call EditNext(ClickData)
    End If
	
    If i = 2 Then
    	ClickData.Func.Command.RunCommand("Select NEXT")
        Call EditNext(ClickData)
    End If
	
    If i = 0 Then
        Exit Sub
    End If
End Sub

Sub EditNext(ClickData)
    ClickData.Func.Command.ClearFiles
	ClickData.func.command.sourcetab.Update
    For Each item In ClickData.func.command.sourcetab.selected
        If item.selected = True Then
            ClickData.Func.Command.Addfile item
        End If
    Next
    Call Checkdate(ClickData)
End Sub
Fertiger Schalter im XML-Format

Code: Alles auswählen

<?xml version="1.0"?>
<button backcol="none" display="both" textcol="none">
	<label>Bilder sukzessive umbenennen</label>
	<icon1>#rename2</icon1>
	<function type="script">
		<instruction>Function OnClick(ClickData)</instruction>
		<instruction>    DOpus.vars.Set "last", ""</instruction>
		<instruction>    ClickData.Func.Command.ClearFiles</instruction>
		<instruction>    ClickData.Func.Command.AddFile ClickData.func.command.sourcetab.selected(0)</instruction>
		<instruction>	Call Checkdate(ClickData)</instruction>
		<instruction>End Function</instruction>
		<instruction />
		<instruction>Sub Checkdate(ClickData)</instruction>
		<instruction>	If ClickData.func.command.sourcetab.selected(0).Metadata.image.datetaken = "" Then</instruction>
		<instruction>	    Set dlg = ClickData.Func.Dlg</instruction>
		<instruction>   		dlg.title = "Aufnahmedatum fehlt!"</instruction>
		<instruction>   		dlg.message = "Aufnahmedatum eingeben im Format: YYYYMMDD HHMMSS"</instruction>
		<instruction>		dlg.max = 19</instruction>
		<instruction>   		dlg.buttons = "OK|Erstellt|Geändert|Aktuell|Abbrechen"</instruction>
		<instruction>   		i = dlg.show</instruction>
		<instruction />
		<instruction>		If i = 1 Then</instruction>
		<instruction>				ClickData.Func.Command.RunCommand("SetAttr META " & """" & "datetaken:" & dlg.input & """")</instruction>
		<instruction>		End If</instruction>
		<instruction>		</instruction>
		<instruction>		If i = 2 Then</instruction>
		<instruction>				ClickData.Func.Command.RunCommand("SetAttr META datetaken:createdate") </instruction>
		<instruction>		End If</instruction>
		<instruction />
		<instruction>		If i = 3 Then</instruction>
		<instruction>				ClickData.Func.Command.RunCommand("SetAttr META datetaken:modifydate") </instruction>
		<instruction>		End If</instruction>
		<instruction />
		<instruction>		If i = 4 Then</instruction>
		<instruction>				ClickData.Func.Command.RunCommand("SetAttr META " & """" & "datetaken:" & Year(Now) & "-" & Month(Now) & "-" & Day(Now) & " " & Time & """") </instruction>
		<instruction>		End If</instruction>
		<instruction>	End If</instruction>
		<instruction>	ClickData.Func.Command.RunCommand("Go Refresh")</instruction>
		<instruction>	ClickData.Func.Command.RunCommand("Select {file} EXACT DESELECTNOMATCH")</instruction>
		<instruction>    Call Edit(ClickData)</instruction>
		<instruction>End Sub</instruction>
		<instruction />
		<instruction>Sub Edit(ClickData)</instruction>
		<instruction>    Set dlg = ClickData.Func.Dlg</instruction>
		<instruction>    dlg.message = "Bildbeschreibung eingeben:"</instruction>
		<instruction>    dlg.title = "Bilder umbenennen"</instruction>
		<instruction>    dlg.buttons = "OK|Überspringen|Abbrechen"</instruction>
		<instruction>    dlg.max = 512</instruction>
		<instruction>	dlg.default = DOpus.vars.Get("last")</instruction>
		<instruction>    i = dlg.show</instruction>
		<instruction>    DOpus.vars.Set "last", dlg.Input</instruction>
		<instruction />
		<instruction>    If i = 1 Then</instruction>
		<instruction>		ClickData.Func.Command.RunCommand("Select NEXT")</instruction>
		<instruction>   		ClickData.Func.Command.RunCommand("Rename FILEINFO CASE=extlower PATTERN=" & """" & "*.*" & """" & " TO=" & """" & "{shootingtime|D#yyyy-MM-dd} {shootingtime|T#HH;mm;ss}_" & dlg.Input & ".{ext}" & """")</instruction>
		<instruction>        Call EditNext(ClickData)</instruction>
		<instruction>    End If</instruction>
		<instruction>	</instruction>
		<instruction>    If i = 2 Then</instruction>
		<instruction>    	ClickData.Func.Command.RunCommand("Select NEXT")</instruction>
		<instruction>        Call EditNext(ClickData)</instruction>
		<instruction>    End If</instruction>
		<instruction>	</instruction>
		<instruction>    If i = 0 Then</instruction>
		<instruction>        Exit Sub</instruction>
		<instruction>    End If</instruction>
		<instruction>End Sub</instruction>
		<instruction />
		<instruction>Sub EditNext(ClickData)</instruction>
		<instruction>    ClickData.Func.Command.ClearFiles</instruction>
		<instruction>	ClickData.func.command.sourcetab.Update</instruction>
		<instruction>    For Each item In ClickData.func.command.sourcetab.selected</instruction>
		<instruction>        If item.selected = True Then</instruction>
		<instruction>            ClickData.Func.Command.Addfile item</instruction>
		<instruction>        End If</instruction>
		<instruction>    Next</instruction>
		<instruction>    Call Checkdate(ClickData)</instruction>
		<instruction>End Sub</instruction>
	</function>
</button>
Der Schalter als *.dcf-Datei zum Download:
Bilder sukzessive umbenennen.zip
(1.19 KiB) 69-mal heruntergeladen

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Bilder sukzessive umbenennen

Beitrag von josinoro » 3. Aug 2014 18:34

Hallo Kundal,

der Schalter ist eine gute Idee. Leider funktioniert weder das Script, noch der identische Code als .xml File bei mir. Egal, ob ich eine oder mehrere Dateien ausgewählt habe, bleibt der Aufruf ohne jegliche Reaktion.

Mit freundlichen Grüßen

josinoro

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Bilder sukzessive umbenennen

Beitrag von Kundal » 3. Aug 2014 18:55

Hallo josinoro,
Danke für den Hinweis. Der Fehler war, dass die Variable last (benötigt, um die letzte Eingabe als Vorgabe in die nächste Dialogbox zu übertragen) zunächst existieren muss, damit das Script funktioniert. Habe das in Zeile 2 hinzugefügt. Jetzt sollte der Schalter funktionieren.
Wenn du mehrere Dateien auswählst, wird das übrigens ignoriert. Es wird dann die erste ausgewählte Datei umbenannt. Das ließ sich nicht ohne großen Aufwand anders machen.

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Bilder sukzessive umbenennen

Beitrag von josinoro » 5. Aug 2014 15:28

Hallo Kundal,

so funktioniert es! Probleme gibt es lediglich bei Bildern, die kein Aufnahmedatum als Tag gespeichert haben.

Mfg

josinoro

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Bilder sukzessive umbenennen

Beitrag von Kundal » 5. Aug 2014 21:25

Probleme gibt es lediglich bei Bildern, die kein Aufnahmedatum als Tag gespeichert haben.
Das ist natürlich kein Bug, sondern "by design". Der enthaltene Umbenennen-Befehl nutzt das in den Metadaten vorhandene Aufnahmedatum. Wenn diese Information nicht existiert, wird dieser Teil einfach weggelassen und der resultierende Name wäre _[Dialogbox-Eingabe].[Erweiterung].

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Bilder sukzessive umbenennen

Beitrag von josinoro » 6. Aug 2014 18:15

Hallo Kundal,
Kundal hat geschrieben:Das ist natürlich kein Bug, sondern "by design".
Das ist mir schon klar.
Vielleicht hast Du Lust eine Abfrage mit einzubauen, was anstatt des nicht vorhandenen Datums oder ob das aktuelle Datum stattdessen eingefügt werden soll!? Luxus wäre dann natürlich, wenn die entsprechende Datei dann tatsächlich mit den abgefragten Werten getagged würde.

MfG

josinoro

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Bilder sukzessive umbenennen

Beitrag von Kundal » 7. Aug 2014 11:49

Meistens macht das Erstellt-Datum doch mehr Sinn als das aktuelle Datum oder? Denkbar wäre eine Dialogbox in der das Erstellt-, Geändert- oder das aktuelle Datum gewählt oder ein eigenes Datum im Textfeld eingegeben werden kann. Das gewählte Datum könnte dann auch als Aufnahmedatum gesetzt werden.
Im Moment kann ich leider nicht sagen ob und wann ich dazu komme, mich damit weiter zu beschäftigen. Wenn das jemand übernehmen möchte darf das gerne hier gepostet werden.

Opianer
Beiträge: 5
Registriert: 27. Apr 2014 08:39
Betriebssystem: Win 7 64bit
Produkt: DOpus 11.3
Version DOpus: Pro

Re: Bilder sukzessive umbenennen

Beitrag von Opianer » 8. Aug 2014 08:51

Hallo Kundal,

Danke erstmal für diesen Schalter. Für mich ist das eine sehr gute und nützliche Funktion.

Ich würde mir noch wünschen, dass außer dem Datum auch die original Bildbezeichnung, also die Nummer, wie zum Beispiel bei meiner Canon: „IMG_7471“, mit eingefügt würde. Gerne auch am Ende. Damit ist es einfacher die Original Datei wiederzufinden, was besonders bei Bildern im RAW Format wichtig wäre, um auch später evtl. damit zu arbeiten. Bei mir wandern die Originale erstmal ins Archiv und bleiben unangetastet, das Umbenennen würde ich dann auf die bearbeiteten Bilder anwenden.
Das könnte dann so aussehen: „2014-08-03_Bernd trinkt Bier_IMG_7471.jpg

Vielleicht kannst du dir das auch vorstellen und siehst eine Möglichkeit das umzusetzen. Ich würde mich freuen, auch wenn es bestimmt nicht jeder brauchen wird. Vielleicht ist es besser, das mit einem zweiter Schalter zu realisieren.

Für deine Arbeit hier im Forum und deine vielen hilfreichen Tipps und Hilfestellungen, danke ich dir.

Herzliche Grüße aus Berlin

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Bilder sukzessive umbenennen

Beitrag von Kundal » 8. Aug 2014 09:17

Hallo Opianer,
Das ist nur eine Kleinigkeit. Ändere Zeile 21 des Scripts in Folgendes:

Code: Alles auswählen

ClickData.Func.Command.RunCommand("Rename FILEINFO CASE=extlower PATTERN=" & """" & "*.*" & """" & " TO=" & """" & "{shootingtime|D#yyyy-MM-dd} {shootingtime|T#HH;mm;ss}_" & dlg.Input & "-*" & ".{ext}" & """")
Dem ursprünglichen Umbenennen-Befehl muss dabei nur nach dem Teil & dlg.Input der neue Teil & "_*" eingefügt werden. In deinem Beispiel hast du nur das Datum ohne Uhrzeit angegeben. Wenn das wirklich so sein soll (evtl. problematisch,wenn mehrere Fotos vom gleichen Tag vorhanden sind), entferne zusätzlich die Zeichenfolge {shootingtime|T#HH;mm;ss} (mit der Leerstelle davor) aus der Zeile.

Opianer
Beiträge: 5
Registriert: 27. Apr 2014 08:39
Betriebssystem: Win 7 64bit
Produkt: DOpus 11.3
Version DOpus: Pro

Re: Bilder sukzessive umbenennen

Beitrag von Opianer » 8. Aug 2014 18:57

Hallo Kundal,

herzlichen Dank für deine schnelle Hilfe. Du bist wirklich richtig gut. Es hat wunderbar geklappt und funktioniert genau wie ich es mir vorgestellt habe.
Nur dass es bei mir die Zeile 26 und nicht 21 ist.

Nochmal Danke.

Herzliche Grüße

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Bilder sukzessive umbenennen

Beitrag von Kundal » 8. Aug 2014 19:56

In der XML-Version ist es Zeile 26. Im Schaltercode-Script ist es Zeile 21.

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Bilder sukzessive umbenennen

Beitrag von Kundal » 8. Aug 2014 21:24

Update:
Bei nicht vorhandenem Aufnahmedatum in den EXIF-Metadaten öffnet sich nun zunächst eine Dialogbox, in der das Erstellungsdatum, das Datum der letzten Änderung, das aktuelle Datum oder ein individuelles Datum im Format YYYYMMDD HHMMSS als Aufnahmedatum gesetzt werden kann. Wird diese Box mit Abbrechen beendet, wird kein Aufnahmedatum gesetzt. Erst danach (bei bereits vorhandenem Aufnahmedatum natürlich sofort) öffnet sich die Umbenennen-Dialogbox mit deren Hilfe die ausgewählte Datei umbenannt wird.
Der Text des ersten Beitrags wurde entsprechend umformuliert und die Script- und XML-Versionen erneuert.

@Opianer:
Das Editieren des Umbenennen-Befehls kannst du wie oben beschrieben in Zeile 50 des Scripts, bzw. in Zeile 55 der XML-Version vornehmen.

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Bilder sukzessive umbenennen

Beitrag von josinoro » 10. Aug 2014 01:02

Hallo Kundal,

danke für das Script.

MfG

josinoro

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast