Optimierung Umbenennungstool

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

just me
Posts: 6425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Optimierung Umbenennungstool

20 Jun 2019, 02:24

Moin,
Das Script, das Du mir im letzten Post geschickt hast, arbeitet noch nicht so wie gewünscht. Es wird lediglich die erste Datei geprüft und ggf. korrigiert, alle weiteren werden dann im der Liste "Umbenennen?" eingesammelt und angezeigt ...
Das Skript, das ich gepostet habe, soll lediglich die eingelesenen Dateien filtern. Die, die nicht zu dem vorgegebenen Namensschema passen, sollen in das Array Namensfehler gestellt und angezeigt werden. Alle anderen Dateinamen sollen im Array Umbennen landen. Das wird am Ende mit folgender For Schleife abgearbeitet:

Code: Select all

   For Each, Datei In Umbenennen
   {
      ; FileMove, % Datei["Alt"], Datei["Neu"]
      MsgBox, 0, Umbenennen!, % Datei["Alt"] . "`n`n" . Datei["Neu"]
   }
Wenn da tatsächlich umbenannt werden soll, musst Du das Semikolon vor der FileMove Anweisung entfernen (und ggf. die MsgBox Anweisung entfernen/auskommentieren). Es kann z.Zt. allerdings passieren, dass der alte und der neue Name identisch sind. Das könnte in der For Schleife abgefangen werden.

Ich kann übrigens nicht erkennen, wo in der aktuellen ^F6 Routine auch nur eine einzige Datei umbenannt wird.

Grüße, just me
User avatar
Meister Lampe
Posts: 115
Joined: 06 Apr 2014, 13:28

Re: Optimierung Umbenennungstool

04 Jul 2019, 17:21

Hallo just me!

Ich habe jetzt in der Praxis im Archiv das erste Modul (Umbenennen/Neusignieren über Alt+LButton) mehrfach erfolgreich testen können. Ich grüble nur noch daran, wieso das Progressfenster, das ein animiertes Wartesymbol ersetzen soll, lediglich kurz angezeigt wird und wenn es viele Dateien sind nicht bis zum Abschluß des Vorgangs sichtbar bleibt, obwohl ich den Befehl Progress, Off ans Ende des Scripts gesetzt habe.

Code: Select all

Progress, m2 fs12 zh0 ct0000ff CWffffff B, Bin gleich fertig ..., , Vorschau, Verdana
...
Progress, Off
return
Zu Punkt 5.) aus meinem letzten Post:
Ich habe die Abfrage nach abweichender Stellenlänge jetzt auch auf sich nicht deckende Bestandsnamen erweitert:

Code: Select all

; statt:
If !(StrLen(Match1) = SignStellen)
; jetzt
If (StrLen(Match1) <> SignStellen or NameArray[1] <> AktSign)
Damit scheint es zu klappen. Es genügt jetzt ein Unterstrich vor der Ziffernkette, um diese als die Signatur zu erkennen.
Ich wüßte gerne, ob man das auch ganz ohne machen könnte, so wie ich in Punkt 6.) beschrieben habe.
Schließlich:
In Deinem letzten Script gibt es ja nur eine FileMove-Schleife. D.h., daß ich dort bei Datei["Neu"] bei unter den im Array Umbenennen gesammelten Dateien vorher wieder unterscheiden muß zwischen denen mit und einen ohne Index. Habe ich das richtig gesehen?

Viele Grüße von Meister Lampe
User avatar
Meister Lampe
Posts: 115
Joined: 06 Apr 2014, 13:28

Re: Optimierung Umbenennungstool

19 Jul 2019, 17:03

Hallo just me!
In Deinem letzten Script gibt es ja nur eine FileMove-Schleife. D.h., daß ich dort bei Datei["Neu"] bei unter den im Array Umbenennen gesammelten Dateien vorher wieder unterscheiden muß zwischen denen mit und einen ohne Index. Habe ich das richtig gesehen?
Habe ich natürlich nicht. ich hatte nicht gesehen, daß die Erstellung der Namen zu diesem Zeitpunkt eigentlich schon vollzogen ist, es werden ja in der Vorschau alle schon zugeordnet und bereitgestellt. Mit dem FileMove findet wohl lediglich deren Vergabe statt.
Ich habe die MsgBox jetzt auskommentiert und die Schleife aktiviert. Trotzdem klappt es noch nicht wie gewünscht - weder bei den Signaturen mit noch bei denen ohne Index.
Und wenn ich das einrichten will, wie ich es beireits bei dem ersten Script (F6) gemacht habe und den vorangestellten Bestandsnamen AktSign gleich aus der Vorlage entnehme und im Dateinamen einsetze, dann müßten ja wohl die Kontrollfragen bzw. die Aufsplittung des Dateinamens in Deinem Script etwas geändert werden. Ein wenig rumprobiert habe ich da zwar auch schon, aber da das Original noch nicht richtig geklappt hat, habe ich das schnell aufgegeben.

Viele Grüße, Bernhard
just me
Posts: 6425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Optimierung Umbenennungstool

20 Jul 2019, 05:16

Moin Meister,

ich würde Dir ja gern helfen, ich verstehe aber wieder einmal nicht, wo Du hinwillst. Meine letzten Codeschnipsel sind keine eierlegende Wollmilchsau. Sie sind der Versuch einer Umsetzung Deines Vorschlags, dass das Skript anhand der vorgegebenen Indexstellen automatisch zwischen Dateien mit und ohne Index unterscheiden soll. Bei Vorgabe von Indexstellen = 0 wird bei den markierten Dateien lediglich auf eine vorhandene Signatur geprüft. Die wird ggf. korrigiert und alles, was auf die vorhandene Signatur folgt, wird blind angehängt. Bei Indexstellen <> 0 wird außerdem geprüft, ob der SIgnatur ein Index folgt und dieser ggf. korrigiert. Als ich das geschrieben habe, war von Dateien ohne gültiges AktSign nicht die Rede. Wenn wir weiter Zusammenarbeiten wollen, müssen wir gleichzeitig in dieselbe Richtung gehen, d.h., schrittweise ein Problem lösen, bevor eine neue Baustelle aufgemacht wird. Für die Lösung brauche ich konkrete Beispiele von Dir, welche getesteten Dateinamen auf welche Weise falsch verarbeitet werden (Input -> Output).

Grüße, just me
User avatar
Meister Lampe
Posts: 115
Joined: 06 Apr 2014, 13:28

Re: Optimierung Umbenennungstool

22 Jul 2019, 16:24

Hallo just me!
Sie sind der Versuch einer Umsetzung Deines Vorschlags, dass das Skript anhand der vorgegebenen Indexstellen automatisch zwischen Dateien mit und ohne Index unterscheiden soll.
Ja, das habe ich schon begriffen und in der MsgBox werden die alten/neuen Namen ja auch sehr schön aufgeführt. Nur die Umbenennung durch das FileMove klappt eben noch nicht.
Und deshalb habe ich erstmal an dem bereits (zumindest für die Namen ohne Index) funktionierenden Script experimentiert, u.a. weil mir auch schon eine Weile zwei Gedanken durch den Kopf gingen:
1.) Ich wähle für das Trimmen zwar eine Vorlage aus, aber der Bestandsname spielt dabei keine Rolle. Wenn ich an einem Bestand mit Namen A 565--4 arbeite, die Signatur 4 Stellen und der Index 3 Stellen haben soll, dann könnte ich statt A 565--4 | 0001 | 000 genausogut die Vorlage K 67 | 0001 | 000 auswählen, und würde dasselbe Ergebnis erhalten. Das erschien mir verwirrend und sinnlos.
2.) Was ist, wenn der Bestandsname nicht richtig geschrieben wurde? Warum nicht gleich ganz überschreiben bzw. durch den mit der Vorlage gewählten ersetzen? Damit reicht es, beim Aufsplitten des Dateinamens den vorderen Teil zu verwerfen, um nachher die aktuelle AktSign anzufügen.
Das ist mir ja auch für das Script ohne Index ganz gut gelungen.
Zur Ansicht der Code daraus:

Code: Select all

F6::
   Clipboard := ""
   SendInput, ^c
   Clipwait, 1
 
   DateienAuslese := Clipboard
   SignStellen := StellenSign
   IndexStellen := StellenIndex
   NewAktname := AktSign
   If !(StellenIndex = "0")
   {
      ;Gosub, Trimmen_mI
      MsgBox, 16, Fehler!,  Sie können keine Signaturen nach Vorlagen mit Indizes prüfen!
      return
   }
   else
   Loop, Parse, Dateienauslese, `n, `r
   {
      SplitPath, A_LoopField, , Verzeichnis, Erweiterung, AlterName
      NameArray := StrSplit(AlterName, "_")
      
       ; Wenn NameArray[2] mit einer oder mehreren Ziffer(n) beginnt und mit einer oder keiner 'Nichtziffer' endet ...
      If RegExMatch(NameArray[2], "^(\d+)(\D?)$", Match)
      {
         ; MsgBox, % StrLen(Match1) . ": " . Match1 . "   <>   " . Match2
         If (StrLen(Match1) <> SignStellen or NameArray[1] <> AktSign)
         {
            Match1 += 0 ; führende Nullen entfernen
            If !(StrLen(Match1) > SignStellen)
            {
               NewSign := Format("{:0" . SignStellen . "}", Match1) . Match2
               ; MsgBox, % StrLen(NewSign) . ": " . NewSign . "   <>   " . Match2
               FileMove, %A_LoopField%, %Verzeichnis%\%NewAktname%_%NewSign%.%Erweiterung%
            }
         }
      }      	
   }  
return
Ich hatte versucht, das auch in Deinen Vorschlag einzubauen, aber schnell davon abgelassen, weil ich keine Möglichkeit zur Kontrolle hatte.
Aber im Prinzip bin ich schon mit Dir einer Meinung, daß man die Schritte schön hintereinander machen sollte.
Für die Lösung brauche ich konkrete Beispiele von Dir, welche getesteten Dateinamen auf welche Weise falsch verarbeitet werden (Input -> Output).
Kann ich hier einen Screenshot o.ä. einfügen mit der Ansicht der MsgBox, in der die alten und neuen Dateinamen dann aufgelistet sind?
Ich glaube, so könnte das am besten gehen.

Viele Grüße von Bernhard
Last edited by Meister Lampe on 13 Aug 2019, 16:47, edited 1 time in total.
just me
Posts: 6425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Optimierung Umbenennungstool

23 Jul 2019, 05:27

Hallo,

Du brauchst von MsgBoxen kein Bildschirmfoto zu machen. Du kannst bei aktivem MsgBox-Fenster mit Strg+c den Inhalt als Text in einen beliebigen Editor oder direkt in Deinen Beitrag kopieren.
User avatar
Meister Lampe
Posts: 115
Joined: 06 Apr 2014, 13:28

Re: Optimierung Umbenennungstool

06 Aug 2019, 17:05

Hallo just me!

Hier kommt jetzt einmal eine konkrete Auswertung.
Zuerst 10 Beispiele ohne Index, die die meisten Fälle abdecken dürften:

Code: Select all

W 134_0.tif			(nur eine Null, die aber als Nummer gilt)
W 134_000006a.tif			(korrekt, mit Buchstabe hinten)
W 134_000012.tif			(korrekt, ohne Buchstabe hinten)
W 134_0035s.tif				(zu wenig Zeichen, mit Buchstabe hinten)
W 134_933.tif				(zu wenig Zeichen, ohne Buchstabe hinten, keine Null am Anfang)
W 134_07924.tif			(zu wenig Zeichen, ohne Buchstabe hinten)
W 134_07934-.tif			(zu wenig Zeichen, mit Sonderzeichen hinten)
W 134_00007935.tif			(zu viele Nullen vorne, ohne Buchstabe hinten)
W 134_000070933B.tif		(zu viele Nullen vorne, mit Buchstabe hinten)
W 134_1000001.tif			(zu viele Zeichen, keine Null vorne)
Ich arbeite jetzt mit Deinem Script und habe erstmal in der Umbennen-Schleife das FileMove deaktiviert:

Code: Select all

 For Each, Datei In Umbenennen
   {
      ;FileMove, % Datei["Alt"], Datei["Neu"]
      MsgBox, 0, Umbenennen!, % Datei["Alt"] . "`n`n" . Datei["Neu"]
   }
Ich habe über F8 die Vorlage W 134 | 000000 | - eingerichtet und ausgewählt.
Nach dem Markieren der Dateien und ^F6 meldet sich zuerst eine MsgBox:
---------------------------
Fehler!
---------------------------
Folgende Dateinamen können nicht korrigiert werden:
D:\Users\Bernhard\Eigene Hotkeys\HotKeys fürs Verzeichnen\Beispielbilder Pragher\Problemfälle\W 134_1000001.tif
Sollen 9 dennoch umbenannt werden?
---------------------------
Ja Nein
Daß das Programm damit nicht zurecht kommt, war ja vorauszusehen.
Nach dem Bestätigungsklick auf "Ja" erscheint für jede der weiteren Dateien eine MsgBox wie diese hier:
---------------------------
Umbenennen!
---------------------------
D:\Users\Bernhard\Eigene Hotkeys\HotKeys fürs Verzeichnen\Beispielbilder Pragher\Problemfälle\W 134_0 .tif
D:\Users\Bernhard\Eigene Hotkeys\HotKeys fürs Verzeichnen\Beispielbilder Pragher\Problemfälle\W 134_000000 .tif
---------------------------
OK
Darin werden die richtig(!) korrigierten Dateinamen schön brav in einer Vorschau mit den Originalen verglichen, auch diejenigen, bei denen ein Umbenennen nicht nötig wäre.

Wenn ich jetzt umgekehrt die MsgBox auskommentiere und das FileMove aktiviere:

Code: Select all

 For Each, Datei In Umbenennen
   {
      FileMove, % Datei["Alt"], Datei["Neu"]
      ;MsgBox, 0, Umbenennen!, % Datei["Alt"] . "`n`n" . Datei["Neu"]
   }
dann kommt erstmal wieder dieselbe Fehlermeldung ("..können nichtg korrigiert werden..") wie oben.
Nach dem Bestätigen mit "Ja" schließt sich das Fenster wieder, aber dann tut sich auch nichts mehr. Korrekturen oder sonstige Veränderungen der Dateinamen werden nicht unternommen.
Schließlich habe ich einmal, um das besser nachvollziehen zu können, im Code die MsgBox vor das FileMove gesetzt und beide aktiviert:

Code: Select all

 For Each, Datei In Umbenennen
   {
      MsgBox, 0, Umbenennen!, % Datei["Alt"] . "`n`n" . Datei["Neu"]
      FileMove, % Datei["Alt"], Datei["Neu"]
   }
Es werden auch hier alle Dateien durchgegangen und in der Vorschau angezeigt, aber nichts umbenannt.

Soweit für heute. Ich werde analoge Tests, also was das korrekte Umbenennen betrifft, morgen an Namen mit Indizes ausführen und Dir davon berichten.

Viele Grüße von Meister Lampe
User avatar
Meister Lampe
Posts: 115
Joined: 06 Apr 2014, 13:28

Re: Optimierung Umbenennungstool

08 Aug 2019, 17:04

Hallo just me!

Hier auch die Ergebnisse des Tests von Dateinamen mit Index:
Dabei gilt die Vorlage B 123--4 | 000 | 0000 .
12 Beispiele habe ich ausgesucht.

Code: Select all

B 123--4_001-0002.bmp			(korrekt nach Vorlage)
B 123--4_006-10030.bmp			(Index zu viele Zeichen, aber keine Null vorne)
B 123--4_014-0002ab.bmp			(Index mit 2 Buchstaben, sollte toleriert werden)
B 123--4_014-03.bmp				(Index zu kurz)		
B 123--4_017-00006.bmp			(Index zu lang)
B 123--4_17-07.bmp				(Signatur u. Index zu kurz)
B 123--4_00018-0001.bmp			(Signatur zu lang)
B 123--4_019c-0000.bmp			(Signatur mit Buchstabe, Index zu lang)
B 123--4_000045-0000024.bmp		(Signatur u. Index zu lang)
B 123--4_045-022d.bmp			(Index mit Buchstabe, aber zu kurz)
B 123--4_256-7525.bmp			(korrekt, aber ohne Nullen vorne)
B 123--4_4000-0000.bmp			(Signatur zu viele Zeichen, aber keine Null vorne)
Ich habe zum besseren Nachvollziehen des Vorgangs erstmal wieder nur die MsgBox und nicht das FileMove aktiviert :

Code: Select all

For Each, Datei In Umbenennen
   {
      MsgBox, 0, Umbenennen!, % Datei["Alt"] . "`n`n" . Datei["Neu"]
      ;FileMove, % Datei["Alt"], Datei["Neu"]
   }
Dann kommt nach dem Start mit ^F6 wieder eine Fehlermeldung:
---------------------------
Fehler!
---------------------------
Folgende Dateinamen können nicht korrigiert werden:

D:\Users\Bernhard\Eigene Hotkeys\HotKeys fürs Verzeichnen\Bilder zum Probieren\Problemfälle mit Index\B 123--4_4000-0000.bmp
D:\Users\Bernhard\Eigene Hotkeys\HotKeys fürs Verzeichnen\Bilder zum Probieren\Problemfälle mit Index\B 123--4_006-10030.bmp
D:\Users\Bernhard\Eigene Hotkeys\HotKeys fürs Verzeichnen\Bilder zum Probieren\Problemfälle mit Index\B 123--4_019c-0000.bmp

Sollen 5 dennoch umbenannt werden?
---------------------------
Ja Nein
---------------------------
Das sind 3 Fälle, für die das vorauszusehen war. Zumindest der letztere wird kaum Probleme machen, da eine zusätzliche Indizierung der Signatur mit Buchstaben innerhalb eines zweigliedrigen nicht zu erwarten ist. Denkbar wäre, die in solchen Fällen in der Fehlerliste gesammelten Namen bis nach der Umbenennung aufzubewahren, daß man sie dann anschließend genauer prüfen und manuell korrigieren kann.
Und bei den ersten beiden Fehlern wäre ja noch die Möglichkeit, falls sie signifikant häufig auftreten, daß es sich gar nicht um Fehler bei der Nummernvergabe handelt, sondern es einfach so viele Dateien sind, daß die Vorlage zu kurz erstellt worden ist. Dann würden in dieser MsgBox riesige Listen auftauchen.

Wenn ich dann in der Fehlermeldung mit "Ja" bestätige kommt wieder eine neue MsgBox:
---------------------------
Umbenennen!
---------------------------
D:\Users\Bernhard\Eigene Hotkeys\HotKeys fürs Verzeichnen\Bilder zum Probieren\Problemfälle mit Index\B 123--4_014-03.bmp
D:\Users\Bernhard\Eigene Hotkeys\HotKeys fürs Verzeichnen\Bilder zum Probieren\Problemfälle mit Index\B 123--4_014-0003.bmp
---------------------------
OK
---------------------------
Es werden - wie bei den Dateinamen ohne Index - nacheinander die Originale mit einer korrekten Vorschau verglichen. Dieses Mal werden die bereits allerdings diejenigen, die nicht verändert werden müssen, auch gar nicht angezeigt. Interessant dabei ist, daß einer unterschlagen wird: B 123--4_00018-0001.bmp. Der gehört weder zu den unlösbaren Fällen (3 Stück), noch zu den bereits korrekten (auch 3 .

Jetzt die Probe mit dem FileMove:

Code: Select all

For Each, Datei In Umbenennen
   {
      ;MsgBox, 0, Umbenennen!, % Datei["Alt"] . "`n`n" . Datei["Neu"]
      FileMove, % Datei["Alt"], Datei["Neu"]
   }
Zuerst kommt - natürlich - wieder dieselbe Fehlermeldung mit den 3 Unkorrigierbaren.
Nach dem Bestätigen mit "Ja" schließt sich das Fenster wieder, aber auch wars das dann.
Auch hier habe ich mal MsgBox und FileMove zusammen aktiviert:

Code: Select all

 For Each, Datei In Umbenennen
   {
      MsgBox, 0, Umbenennen!, % Datei["Alt"] . "`n`n" . Datei["Neu"]
      FileMove, % Datei["Alt"], Datei["Neu"]
   }
Und wieder passiert werden wie oben die Fehlermeldung und die Vorschauen (bis auf eine) korrekt durchgegangen, aber sonst tut sich nichts.
Die unterschlagene Datei ist übrigens immer dieselbe B 123--4_00018-0001.bmp, auch wenn ich die Bilder anders sortiere oder eine andere Ansicht wähle.

So, ich hoffe, das kann ein bißchen weiterhelfen.

Viele Grüße von Meister Lampe
just me
Posts: 6425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Optimierung Umbenennungstool

09 Aug 2019, 06:12

Moin,

eigentlich war ich mir absolut sicher, dass ich das Folgende gestern schon gepostet habe:

FileMove: Spendiere dem Kommando im zweiten Parameter auch einen 'erzwungenen Ausdruck': FileMove, % Datei["Alt"], % Datei["Neu"]
User avatar
Meister Lampe
Posts: 115
Joined: 06 Apr 2014, 13:28

Re: Optimierung Umbenennungstool

13 Aug 2019, 16:45

Hallo just me!

Ja, jetzt tut sich was. Bei den Dateinamen ohne Index scheint das schon annähernd zu klappen. Allerdings läuft das Programm hier auch alle bereits korrekten Namen durch. Fragt also weiterhin in der ersten Fehleranzeige der Unkorrigierbaren, ob es die restlichen 9 (!) Dateien trotzdem umbenennen soll.Obwohl das nur bei 7 noch nötig wäre.
Bei denen mit Index wird ein großer Teil auch richtig korrigiert, nämlich alle, bei denen der Index nicht dem Vorlagenformat entspricht. Wenn aber der Index in Ordnung ist, wird eine fehlerhafte Signatur nicht geändert, sondern unterschlagen. Der Name taucht weder bei den "unlösbaren Fällen" am Beginn des Vorgangs auf, noch - wenn ich die MsgBox in der Schleife zusammen mit dem FileMove aktiviere - in einer der dann angezeigten Meldungen. Hier werden aber - im Unterschied zu den Fällen ohne Index (s.o.) - die bereits korrekten Dateinamen in der Vorschau nicht mehr mit angezeigt.

Schließlich könnte man sich doch mal überlegen, ob man, wie ich neulich bereits vorgeschlagen hatte, die Bestandssignatur AktSign nicht gleich aus der Vorlage heraus verwendet, statt sie von jedem Dateinamen separat abzutrennen und nacher wieder anzukleben.
Gründe dafür waren u.a.:
1.) Ich wähle für das Trimmen zwar eine Vorlage aus, aber der Bestandsname spielt dabei keine Rolle. Wenn ich an einem Bestand mit Namen A 565--4 arbeite, die Signatur 4 Stellen und der Index 3 Stellen haben soll, dann könnte ich statt A 565--4 | 0001 | 000 genausogut die Vorlage K 67 | 0001 | 000 auswählen, und würde dasselbe Ergebnis erhalten. Das erschien mir verwirrend und sinnlos.
2.) Was ist, wenn der Bestandsname nicht richtig geschrieben wurde? Warum nicht gleich ganz überschreiben bzw. durch den mit der Vorlage gewählten ersetzen? Damit reicht es, beim Aufsplitten des Dateinamens den vorderen Teil zu verwerfen, um nachher die aktuelle AktSign anzufügen.
Wäre das nicht auch im Code einfacher?

Viele Grüße von Bernhard
just me
Posts: 6425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Optimierung Umbenennungstool

14 Aug 2019, 04:51

Hallo Bernhard,
Wenn aber der Index in Ordnung ist, wird eine fehlerhafte Signatur nicht geändert, sondern unterschlagen.
Ich schaue mir das noch mal an.

Die "Umbennung" bereits korrekter Dateinamen kann man einfach per Prüfung (AlterName != NeuerName) verhindern. Die Frage sollte dann in "Sollen die restlichen n Dateien trotzdem verarbeitet werden?" geändert werden.

Hinsichtlich der Vorgabe eines Bestandsnamens habe ich weiterhin meine Zweifel. Wenn der Benutzer eine "wilde" Mischung von Dateien markiert, die dann mit einem neuen Bestandsamen versehen werden, Ihre Signatur und ggf. ihren Index aber behalten, mag das zu recht merkwürdigen Ergebnissen führen. Willst Du das wirklich so haben?

Grüße, just me

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 12 guests