Hallo,
an folgendem Problem beiße ich mir gerade die Zähne aus. Über Vorschläge wäre ich sehr dankbar.
Ich will Fotos, die in einem bestimmten Zeitraum entstanden sind, oder die folgendes Dateiformat haben (YYYYMMDD-HHMMSS.jpg) umbenennen.
Bevor ich mehrere Fotos von einem Gegenstand mache, starte ich ein AHK-Skript, bei dem ich eine Artikelnummer eingebe. Gleichzeitig wird in einer ini-Datei der Zeitstempel eingetragen.
Dann fotografiere ich munter los und wenn ich damit fertig bin, wird wieder ein Zeitstempel in der ini-Datei eingetragen.
Wenn ich schließlich mehrere Gegenstände fotografiert habe, habe ich die Zeiträume, in denen die einzelnen Fotos entstanden sind. Nun wäre es super, wenn ich z.B. die Fotos per AHK-Skript umbenennen könnte, so dass die eingegebene Artikelnummer vor den Dateinamen gestellt wird.
Über Lösungsvorschläge würde ich mich sehr freuen.
Liebe Grüße.
Dateien eines bestimmten Zeitraums umbenennen
Moderator: jNizM
Re: Dateien eines bestimmten Zeitraums umbenennen
Moin,
wenn die Zeiten synchron sind, sollte das kein Problem sein. Aus den Dateinamen im Format YYYYMMDD-HHMMSS.jpg lässt sich durch Entfernen der Dateiendung und des Bindestrichs ein schöner Zeitstempel erzeugen. Den kannst Du einfach mit den Start- und Endezeitstempeln aus der INI vergleichen:
wenn die Zeiten synchron sind, sollte das kein Problem sein. Aus den Dateinamen im Format YYYYMMDD-HHMMSS.jpg lässt sich durch Entfernen der Dateiendung und des Bindestrichs ein schöner Zeitstempel erzeugen. Den kannst Du einfach mit den Start- und Endezeitstempeln aus der INI vergleichen:
Code: Select all
If (Dateizeitstempel >= Startzeitstempel) && (Dateizeitstempel <= Endezeitstempel) {
...
}
Re: Dateien eines bestimmten Zeitraums umbenennen
Hey, vielen Dank. Das hat mich schon mal ein wenig weitergebracht, aber bei der Umsetzung tue ich mir noch sehr schwer, denn ich habe keine Lösung gefunden, was ich in die if-Klammer schreiben könnte. Agesehen davon hat AHK Probleme mit dem Auslesen des Dateinamens, jedenfalls wird bei mir angezeigt, dass die Variable (der Dateinamen mit dem Bindestrich in der Mitte) ein nicht gültiges Zeichen enthält. Ich habe es auch deswegen nicht den Bindestrich mit StringReplace wegbekommen.
Ich habe folgenden Lösungsansatz versucht, nachdem ich etwas über loop gelesen habe. Aber es funktioniert nicht. Die Datei wurde nicht umbenannt.
Geht es überhaupt damit und wo könnte der Fehler liegen?
Viele Grüße!
Ich habe folgenden Lösungsansatz versucht, nachdem ich etwas über loop gelesen habe. Aber es funktioniert nicht. Die Datei wurde nicht umbenannt.
Code: Select all
loop, C:\Autohotkey\*.jpg
{
EnvSub, ZeitstempelEnde, %A_LoopFileTimeCreated%, seconds
EnvSub, ZeitstempelStart, %A_LoopFileTimeCreated%, seconds
if (ZeitstempelEnde >= 0 && ZeitstempelStart <=0)
{
FileMove, C:\Autohotkey\%A_LoopFileFullPath%.jpg, C:\Autohotkey\%Verkaufsnummer%%A_LoopFileFullPath%.jpg
}
}
Viele Grüße!
Re: Dateien eines bestimmten Zeitraums umbenennen
Wenn dieser Fehler bei dir kommt hast du mit fast 100% Wahrscheinlichkeit %% da benutzt wo es nicht hingehört.festigrat wrote:Agesehen davon hat AHK Probleme mit dem Auslesen des Dateinamens, jedenfalls wird bei mir angezeigt, dass die Variable (der Dateinamen mit dem Bindestrich in der Mitte) ein nicht gültiges Zeichen enthält.
Zudem sehe ich, dass du nie die Ini ausliest.
Du müsstest vorher also noch die Daten der Inis auslesen. Wie genau sieht deine/die Inis denn aus?
Recommends AHK Studio
Re: Dateien eines bestimmten Zeitraums umbenennen
Hallo,
den Teil mit der Ini habe ich weggelassen. Hier das Auslesen der Ini:
und hier die Ini-Datei:
den Teil mit der Ini habe ich weggelassen. Hier das Auslesen der Ini:
Code: Select all
IniRead, ZeitstempelStart, Verkaufsnummer.ini, %Verkaufsnummer%, Zeitstempel-Start
IniRead, ZeitstempelEnde, Verkaufsnummer.ini, %Verkaufsnummer%, Zeitstempel-Ende
- [S0001]
Verkaufsnummer=S0001
Zeitstempel-Start=20170312102331
Zeitstempel-Ende=20170312102354
[V0001]
Verkaufsnummer=V0001
Zeitstempel-Start=20170311100000
Zeitstempel-Ende=20170312143000
[V0002]
Verkaufsnummer=V0002
Zeitstempel-Start=20170312125414
Zeitstempel-Ende=20170312125438
Re: Dateien eines bestimmten Zeitraums umbenennen
Bei dem FileMove sehe ich ein paar Fehler:
A_LoopFileFullPath enthält den ganzen Pfad zur aktuellen Datei also z.B.: "C:\Autohotkey\2017031-2102331.jpg".
Wenn du nun bei deinem FileMove noch ein "C:\AutoHotkey\" davor hängst und ein ".jpg" dranhängst versucht AutoHotkey die Datei "C:\AutoHotkey\C:\Autohotkey\2017031-2102331.jpg.jpg" zu verschieben die einfach nicht existiert.
Richtig würde es heißen:
FileMove, %A_LoopFileFullPath%, %A_LoopFileDir%%Versionsnummer%%A_LoopFileName%
Bei dem If kannst du die Variable direkt vergleichen anstatt zu subtrahieren und dann mit 0 zu vergleichen - dabei bleiben dir dann auch die Werte der Zeitstempel erhalten:
if (ZeitstempelEnde >= A_LoopFileTimeCreated && ZeitstempelStart <= A_LoopFileTimeCreated )
A_LoopFileFullPath enthält den ganzen Pfad zur aktuellen Datei also z.B.: "C:\Autohotkey\2017031-2102331.jpg".
Wenn du nun bei deinem FileMove noch ein "C:\AutoHotkey\" davor hängst und ein ".jpg" dranhängst versucht AutoHotkey die Datei "C:\AutoHotkey\C:\Autohotkey\2017031-2102331.jpg.jpg" zu verschieben die einfach nicht existiert.
Richtig würde es heißen:
FileMove, %A_LoopFileFullPath%, %A_LoopFileDir%%Versionsnummer%%A_LoopFileName%
Bei dem If kannst du die Variable direkt vergleichen anstatt zu subtrahieren und dann mit 0 zu vergleichen - dabei bleiben dir dann auch die Werte der Zeitstempel erhalten:
if (ZeitstempelEnde >= A_LoopFileTimeCreated && ZeitstempelStart <= A_LoopFileTimeCreated )
Recommends AHK Studio
Re: Dateien eines bestimmten Zeitraums umbenennen
OK, erst einmal zum Inhalt der INI:
- Der Wert des Keys Verkaufsnummer ist identisch mit dem Namen der Section -> überflüssig.
- Solange es eindeutig bleibt, sollten m.E. die Keynamen kurz gehalten werden. Deshalb -> Start anstelle Zeitstempel-Start, aber das ist reine Geschmackssache.
- AHK bietet Dir die Möglichkeit, die Namen aller Sections in einem Rutsch einzulesen:
Jetzt stehen alle Sectionnamen getrennt durch einen Zeilenvorschub `n in Sections.
Code: Select all
IniRead, Sections, NamerDerIniDatei
- Jetzt solltest Du Dir für alle Sections die Werte für Start und Ende holen, damit Du das nicht für jede Datei wiederholen musst. Speichern kann man das recht gut in einem Assoziativen Array.
Code: Select all
IniDatei := NamerDerIniDatei IniRead, Sections, %IniDatei% IniArray := {} ; neues leeres Array definieren Loop, Parse, Sections, `n { Section := A_LoopField IniRead, Start, %IniDatei%, %Section%, Start IniRead, Ende, %IniDatei%, %Section%, Ende IniArray[Section] := {Start: Start, Ende: Ende} ; dem Key Section wird ein assoziatives Array mit den Keys Start und Ende zugewiesen }
- Um später auf die im Array gespeicherten Werte zuzugreifen, kannst Du eine For-Schleife nutzen:
Code: Select all
For Section, Zeit In IniArray { If (Dateizeitstempel >= Zeit.Start) && (Dateizeitstempel <= Zeit.Ende) ... ; der Name der Section steht in der Variablen Section }
Re: Dateien eines bestimmten Zeitraums umbenennen
Ihr Beiden,
herzlichen Dank für Eure Unterstützung! Jetzt gibt es endlich Licht am Ende des Tunnels. Das mit dem Assoziativen Array sieht spannend aus. Ich werde es mir mal in einer ruhigen Minute anschauen.
Ansonsten klappt das Skript prinzipiell. Nach dem Umbenennen der Fotos hatte das letzte Foto im Zeitraum immer am Anfang zweimal die Verkaufsnummer. Anscheinend hat das Skript diese Datei ein weiteres Mal umbenannt. Ich habe das Problem dadurch umgangen, dass ich die Fotos mit FileMove nicht nur umbenannt habe, sondern auch gleich an einen anderen Ort kopiert habe, womit ich gut leben kann.
Hier nochmal das fertige Skript. Ich habe mich noch anstatt A_LoopFileCreated für A_LoopFileTimeModified entschieden.
herzlichen Dank für Eure Unterstützung! Jetzt gibt es endlich Licht am Ende des Tunnels. Das mit dem Assoziativen Array sieht spannend aus. Ich werde es mir mal in einer ruhigen Minute anschauen.
Ansonsten klappt das Skript prinzipiell. Nach dem Umbenennen der Fotos hatte das letzte Foto im Zeitraum immer am Anfang zweimal die Verkaufsnummer. Anscheinend hat das Skript diese Datei ein weiteres Mal umbenannt. Ich habe das Problem dadurch umgangen, dass ich die Fotos mit FileMove nicht nur umbenannt habe, sondern auch gleich an einen anderen Ort kopiert habe, womit ich gut leben kann.
Hier nochmal das fertige Skript. Ich habe mich noch anstatt A_LoopFileCreated für A_LoopFileTimeModified entschieden.
Code: Select all
IniRead, ZeitstempelStart, Verkaufsnummer.ini, %Verkaufsnummer%, Zeitstempel-Start
IniRead, ZeitstempelEnde, Verkaufsnummer.ini, %Verkaufsnummer%, Zeitstempel-Ende
sleep, 500
loop, C:\Autohotkey\*.jpg
{
if (ZeitstempelEnde >= A_LoopFileTimeModified && ZeitstempelStart <= A_LoopFileTimeModified)
{
FileMove, %A_LoopFileFullPath%, C:\Autohotkey\Fotos\%Verkaufsnummer%-%A_LoopFileName%
}
}
Who is online
Users browsing this forum: No registered users and 54 guests