Optimierung Umbenennungstool

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Optimierung Umbenennungstool

Re: Optimierung Umbenennungstool

Post by just me » 25 Nov 2019, 05:39

Meister Lampe wrote:Könnte man das Script auf andere Weise dort anhalten...
Was glaubst Du wohl, was Dir dieser Beitrag zeigen sollte?

Du kannst natürlich nach dem Gui, Show, ... auch eine Variable setzen (wie Z.B. AuswahlFertig := False) und darauf warten, dass sie auf True gesetzt wird:

Code: Select all

...
Gui, Show, ...
AuswahlFertig := False
While !(AuswahlFertig)
   Sleep, 10 ; oder länger
...
Return
Du solltest aber bedenken, dass es mehrere mögliche Fehler gibt:
  1. Keine Auswahl
  2. Auswahl mit falschem Typ
  3. Frühere Auswahl, die hier gar nicht genutzt werden soll.
Und nachdem das Skript aus den Auswahlroutinen zurückkehrt, muss nochmal geprüft werden.

Du solltest deshalb darüber nachdenken, ob Du beim Start von Bearbeitungsroutinen nicht besser immer direkt in die Auswahlroutine verzweigst, wenn Du das weiterhin so realisieren willst.

Re: Optimierung Umbenennungstool

Post by Meister Lampe » 23 Nov 2019, 18:00

Hallo just me!

Es handelt sich nicht nur darum, das Tool in der Handhabung noch etwas einfacher zu gestalten - das natürlich auch, sondern es gibt auch andere Gründe:
Erstens wiederholt sich diese Prozedur am Anfang von mehreren Anwendungen: bei der Grundfunktion, dem Umbenennen sowie bei dem Trimmen und hier beim Ergänzen. Immer steht als erstes die Frage nach der Auswahl der Bestandsvorlage. Hätte man das einmal so geschrieben, könnte man es für alle vereinheitlichen.
Zweitens, und das ist - ebenfalls bei allen diesen Anwendungen - wohl bisher die größte Schwierigkeit in der Umsetzung im Code: Wenn ich die Möglickeit zur Auswahl mit Gosub Auswahlfenster aufrufe, dann fängt das Programm nach beim ersten return der drei zusammengehörenden Module (Anzeige der Gui) wieder an weiterzulaufen, noch während der Benutzer mit dem Auswählen beschäftigt ist. Ich muß also direkt nach dem Gosub die Sache wieder mit einem return stoppen. Und ein Gosub-Befehl, der nach dem Zurückkehren nicht weiterläuft (hier weil die eigentliche Subroutine noch gar nicht abgeschlossen ist), kommt schließlich einem Goto gleich.
Könnte man das Script auf andere Weise dort anhalten und das dann mit dem Ende der ganzen Subroutine, also dort, wo ich jetzt den Rückspringbefehl eingebaut habe, wieder lösen, dann wäre das auch eine Möglichkeit.

Viele Grüße von Meister Lampe

Re: Optimierung Umbenennungstool

Post by just me » 23 Nov 2019, 06:02

Meister Lampe wrote:Insbesonder Du wolltest ja wissen, wozu die mir nützlich sein sollten.
Ich wollte schlichtweg wissen, warum Du glaubst, dynamische Rücksprunglabel zu brauchen. Jetzt sehe ich es. Du springst mit Deinem Ansatz die Subroutine für die Ausgabe des Auswahlfensters mit einem Goto an und hast deshalb keine Möglichkeit, automatisch zum aufrufenden Statement zurückzukehren. Beim Gosub ist das das normale Verhalten. Wozu also Goto?

Und letzlich läuft das Ganze darauf hinaus, dem Benutzer die EIngabe von zwei Hotkeys zu ersparen, wenn er noch keine Auswahl getroffen hat. Ich halte das nach wie vor für überflüssig. Wenn Du das nicht allein hinkriegst, kannst Du mit einiger Wahrscheinlichkeit den Code auch nicht allein warten, falls Anpassungen/Änderungen erforderlich werden, an die Du heute noch nicht denkst.

Re: Optimierung Umbenennungstool

Post by Meister Lampe » 21 Nov 2019, 18:26

Hallo just me!

Nachdem ich aus dem anderen Thread einiges mitnehmen konnte und auch nochmals im Handbuch gestöbert habe, habe ich das mit den dynamischen Labels mal ausprobiert. Insbesonder Du wolltest ja wissen, wozu die mir nützlich sein sollten. Um das näher darzustellen und weil das noch nicht so klappt, wie es eigentlich nach der Beschreibung zu erwarten wäre, stelle ich den betreffenden Code hier nochmals herein.
Ich habe unter F12 ein Modul erstellt, das bei ausgewählten Bildern, wenn sie bis dahin nur "nackte" Nummern tragen, diese nach der ausgewählten Vorlage trimmt und entsprechende Bestandsnummer AktSign davorsetzt. Das ist nur bestimmt für Dateien ohne Index (StellenIndex = 0). Dafür gibt es eine Prüfung. Zuvor wird aber geprüft, ob überhaupt eine Bestandsvorlage ausgewählt ist. Und an dieser Stelle soll, falls nötig, der Abzweig zum Auswahlfenster und von dort wieder zurück stattfinden.
Das sieht jetzt so aus:

Code: Select all

F12::
If (AktSign = "")
   {
      MsgBox, 17, Keine Bestandsvorlage!, Sie müssen zuerst eine Bestandsvorlage auswählen!
      IfMsgBox Ok
      {
         Lb_Ruecksprung := "Lb_NameErgaenzen_1"
         Goto, Auswahlfenster
         Lb_NameErgaenzen_1:
      }
      else
      return
   }
   
   If !(StellenIndex = "0")
   {
      ;Gosub, Trimmen_mI
      MsgBox, 16, Fehler!,  Sie können keine Signaturen mit Indizes ergänzen!`nBitte wähle Sie eine andere Vorlage aus.
      Lb_Ruecksprung := "Lb_NameErgaenzen_2"
      Goto, Auswahlfenster
      Lb_NameErgaenzen_2:
   }
   else
      
   Clipboard := ""
   SendInput, ^c
   Clipwait, 1
 
   DateienAuslese := Clipboard
   SignStellen := StellenSign
   IndexStellen := StellenIndex
   NewAktname := AktSign
   
   Loop, Parse, Dateienauslese, `n, `r
	{
      SplitPath, A_LoopField, , Verzeichnis, Erweiterung, SignRumpf	
	  
		; Wenn NameArray[2] mit einer oder mehreren Ziffer(n) beginnt und mit einer oder keiner 'Nichtziffer' endet ...
      If RegExMatch(SignRumpf, "^(\d+)(\D?)$", Match) 
      {
         ; MsgBox, % StrLen(Match1) . ": " . Match1 . "   <>   " . Match2
         If (StrLen(Match1) = SignStellen)
            NewSign := SignRumpf
         else
         {
            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%
            }
         }
         FileMove, %A_LoopField%, %Verzeichnis%\%NewAktname%_%NewSign%.%Erweiterung%
      }      	
   }  	
return
und im letzten der sich nacheinander aufrufenden Module Auswahlfenster incl. ListView, Anwenden und Anzeige steht dann am Schluß der Befehl zu Rücksprung zum letzten abgespeicherten Label:

Code: Select all

Anzeige:
If (AktSign = "")
{
   LeerAnzeige = Es ist keine Bestandsvorlage ausgewählt! 
   Progress, m2 fs12 zh0 ct0000ff CWffffff, %LeerAnzeige%, , Vorschau, Verdana
}
else
{
   VorschauSign := Format("{:0" . StellenSign . "}", 1)
   If (StellenIndex = "0")
   {
      VorschauMsg = %AktSign%_%VorschauSign%
   }
   else
   {
      VorschauIndex := Format("{:0" . StellenIndex . "}", 0)
      VorschauMsg = %AktSign%_%VorschauSign%-%VorschauIndex%
   }
   Progress, m2 fs12 zh0 ct0000ff CWffffff B, %VorschauMsg%, , Vorschau, Verdana
}
SetTimer, ProgressOff, 1500
Goto, %Lb_Ruecksprung%
Return

ProgressOff:
Progress, Off
Return
Nur bekomme ich immer eine Fehlermeldung
---------------------------

---------------------------
Error: A Goto/Gosub must not jump into a block that doesn't enclose it.

Line#
243: {
244: VorschauIndex := Format("{:0" . StellenIndex . "}", 0)
245: VorschauMsg = %AktSign%_%VorschauSign%-%VorschauIndex%
246: }
247: Progress,m2 fs12 zh0 ct0000ff CWffffff B,%VorschauMsg%,,Vorschau,Verdana
248: }
249: SetTimer,ProgressOff,1500
---> 250: Goto,%Lb_Ruecksprung%
251: Return
254: Progress,Off
255: Return
267: ExplorerID := WinExist()
268: ShellWin := 0
269: For Win, in ShellApp.Windows
269: {

The current thread will exit.
---------------------------
OK
---------------------------
(Ab Zeile 267 beginnt ein anderer Teil des Scripts!)
Ich habe keine Ahnung, was ich damit anfangen soll.

Viele Grüße von Meister Lampe

Re: Optimierung Umbenennungstool

Post by Meister Lampe » 31 Oct 2019, 17:26

Hallo just me!

Ist es überhaupt möglich, eine Gui innerhalb eines laufenden Programmes "aufpoppen" zu lassen? Im konkreten Fall wäre das Folgendes:
Soweit ich im Tutorial gesucht habe, besteht im Gegensatz zur MsgBox bei der InputBox keine Möglichkeit, sie durch Veränderung der Parameter mit einem dritten Button zu versehen. Wenn man also ein Steuerelement mit Weiter - Ändern - Abbrechen zusammen mit einer Eingabemöglichkeit haben möchte, müßte man sich eine eigene Gui dafür erstellen. Da das dann aber wieder mit dem Aufruf von Subroutinen/Gosub und zwei return-Befehlen verbunden ist, wie ich ja bereits in meinem vorigen Post erwähnte, käme ich nicht mehr ins laufende Programm zurück. :?
Das wäre letztlich fast dasgleiche Problem wie oben und vielleicht auch dieselbe Lösung.
Wie könnte die aussehen?

Viele Grüße von Meister Lampe

Re: Optimierung Umbenennungstool

Post by Meister Lampe » 22 Oct 2019, 16:56

Hallo just me!
Subroutinen, die mit Gosub aufgerufen werden, kehren immer wieder zurück, wenn sie per Return beendet werden. Im Skript sorgt aber die Return Anweisung hinter dem Gosub dafür, dass die aufrufende Subroutine verlassen wird.
Hier habe ich, glaube ich, die Ursache gefunden:
Es handelt sich ja um zwei Subroutinen. Zuerst wird mit Gosub Auswahlfenster die Gui mit der Liste geöffnet, wo man sich die gewünschten Bestandsnamen auswählen soll. Dafür schließt sich die MsgBox "Keine Bestandsvorlage!" kurz. Aber der Code zum Öffnen der Gui endet mit einem return und damit läuft auch das Programm weiter, während die Gui auf eine Eingabe über die Subroutine Anwenden wartet, die ebenfalls mit return abschließt. Gibt es also einen anderen Befehl, mit dem man den Code zum Öffnen der Gui Auswahlfenster abschließen kann, daß der ohne zurückzuspringen auf die nächste Eingabe wartet?

Viele Grüße von Meister Lampe

Re: Optimierung Umbenennungstool

Post by just me » 06 Sep 2019, 03:31

Moin!

Progress:
Wenn die Anweisung so eingebaut ist und nur einmal kurz zu sehen ist, kann das eigentlich nur daran liegen, dass die Aktivitäten im Explorerfenster dieses über das Progressfenster schieben. Wenn Du das Skript innerhalb der Umbenennungsschleife mit Pause anhältst, kannst Du schauen, wo das Progressfenster abgeblieben ist.

Auswahlfenster:
Aber grundsätzlich bleibt die Frage: Wie kann ich mit AHK Subroutinen schreiben, die ich im laufenden Script aufrufen und abarbeiten kann und die anschließend wieder an dieselbe Stelle in das Script zurückkehren und dieses dort fortsetzen?
Subroutinen, die mit Gosub aufgerufen werden, kehren immer wieder zurück, wenn sie per Return beendet werden. Im Skript sorgt aber die Return Anweisung hinter dem Gosub dafür, dass die aufrufende Subroutine verlassen wird.

Trimmen-Funktion:
Das Array mit den fehlerhaften Dateien NamensFehler[] steht am Ende der ^F6 Routine zur Verfügung. Du kannst an dieser Stelle damit machen, was immer Du willst.

Grüße, just me

Re: Optimierung Umbenennungstool

Post by Meister Lampe » 05 Sep 2019, 16:04

Hallo just me!

Zwischen dem Progress liegt - bzw. soll liegen - das Umbenennungsmodul. Oder genauer: Es handelt sich ja um zwei Routinen, eine für Signaturen mit oder ohne Index. Das Progress wird jeweils nach der Verzweigung eingesetzt, denn dort beginnt ja erst der eigentliche Umbenennungsvorgang.
So sieht der Code aus:

Code: Select all

<!LButton::
   ; Explorerfenster bestimmen
   ExplorerID := WinExist()
   ShellWin := 0
   For Win In ShellApp.Windows {
      If (Win.HWND = ExplorerID) {
         ShellWin := Win
         Break
      }
   }
   If !(ShellWin) ; das aktive Explorerfenster wurde nicht gefunden, Abbruch!
      Return
   ; Auswahl nach unten erweitern
   Send, +{LButton}
   ; Auswahl einlesen und bereinigen. Die erste Datei (mit dem Fokus) kommt ans Ende.
   ; -> docs.microsoft.com/en-us/windows/desktop/shell/shellfolderview-selecteditems
   If !(ShellWin.Document.SelectedItems.Count > 0) { ; keine Auswahl
      MsgBox, Sie müssen mindestens eine Datei markieren!
      Return
   }
   SelectedItems := []
   For Item In ShellWin.Document.SelectedItems
      SelectedItems.Push(Item)
   LetzteDatei := SelectedItems.RemoveAt(1)  ; erste (bzw. letzte) Datei aus dem Array entfernen ...
   SelectedItems.Push(LetzteDatei)           ; ... und wieder anhängen
   Anzahl := SelectedItems.Length()
   ; Prüfen, ob die Dateinamenserweiterungen angezeigt werden
   ; -> docs.microsoft.com/en-us/windows/desktop/shell/shellfolderview-viewoptions
   ShowExt := (ShellWin.Document.ViewOptions & 2) ; SFVVO_SHOWEXTENSIONS (0x00000002)
   ; MsgBox, 0, ShowExt, %ShowExt%
   
   If (StellenIndex = "0")  ; fragt, ob Index vorhanden und wählt die Routine aus
      Gosub, OhneIndex
   Else
      Gosub, MitIndex
   return
   
MitIndex:       ; zum Umbenennen, wenn Index vorhanden
   ; Benutzereingaben zum Umbenennen holen
   LetzteSign := Format("{:0" . StellenSign . "}", ++LetzteSign) ; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
   InputBox, BoxSign, Vorschau, Es werden %Anzahl% Bilder umsigniert, , 225, 125, , , , ,%LetzteSign%
   
   If (ErrorLevel) {
      LetzteSign--
      Return
   }
   Progress, m2 fs12 zh0 ct0000ff CWffffff B, Bin gleich fertig ..., , Vorschau, Verdana
   If !InStr(BoxSign, ",") { ; Prüft, ob ein anderer Startindex durch Komma getrennt eingegeben wurde
      LetzteSign := Format("{:0" . StellenSign . "}", BoxSign) ; Setzt neue Signatur auf 4 Ziffern
      LetzterIndex := 0 ; Setzt Index auf 0
   }
   Else {
      StringSplit, BoxArray, BoxSign, `,
      If (BoxArray1 = "")
         LetzteSign := Format("{:0" . StellenSign . "}", LetzteSign) ; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
      Else
         LetzteSign := Format("{:0" . StellenSign . "}", BoxArray1) ; Setzt neue Signatur auf 4 Ziffern
      LetzterIndex := BoxArray2
   }
   ; Dateien umbenennen
   ShellWin.Document.SelectItem(SelectedItems[1], 4)
   For Index, Item In SelectedItems {
      ItemPath := Item.Path
      SplitPath, ItemPath, DateiName, , Erweiterung
      LetzterIndex := Format("{:0" . StellenIndex . "}", LetzterIndex)  ; Setzt Index auf 1 in 2 Ziffern
      Item.Name := AktSign . "_" . LetzteSign . "-" . LetzterIndex . (ShowExt ? "." . Erweiterung : "")
      LetzterIndex++
   }
   ; Fertig
   ; Letzte Datei selektieren
   ; -> docs.microsoft.com/en-us/windows/desktop/shell/shellfolderview-selectitem
   ShellWin.Document.SelectItem(SelectedItems[Anzahl], 29)
   For Index, Item In SelectedItems
      Item := ""
   ShellWin := ""
Progress, Off
Return

OhneIndex:      ; zum Umbenennen, wenn kein Index vorhanden
; Benutzereingaben zum Umbenennen holen
   If (LetzteSign = 0)
      LetzteSign := Format("{:0" . StellenSign . "}", 1)
   else
      LetzteSign := Format("{:0" . StellenSign . "}", LetzteSign) 
   InputBox, BoxSign, Vorschau, Es werden %Anzahl% Bilder umsigniert, , 225, 125, , , , ,%LetzteSign%

   If (ErrorLevel) {
      LetzteSign--
      Return
   }
   Progress, m2 fs12 zh0 ct0000ff CWffffff B, Bin gleich fertig ..., , Vorschau, Verdana
   If !InStr(BoxSign, ",") { ; Prüft, ob ein anderer Startindex durch Komma getrennt eingegeben wurde
      LetzteSign := Format("{:0" . StellenSign . "}", BoxSign) ; Setzt neue Signatur auf 4 Ziffern
      LetzterIndex := 0 ; Setzt Index auf 0
   }
   Else {
      StringSplit, BoxArray, BoxSign, `,
      If (BoxArray1 = "")
         LetzteSign := Format("{:0" . StellenSign . "}", LetzteSign) ; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
      Else
         LetzteSign := Format("{:0" . StellenSign . "}", BoxArray1) ; Setzt neue Signatur auf 4 Ziffern
      LetzterIndex := BoxArray2
   }
   
   ; Dateien umbenennen
   ShellWin.Document.SelectItem(SelectedItems[1], 4)
   For Sign, Item In SelectedItems {
      ItemPath := Item.Path
      SplitPath, ItemPath, DateiName, , Erweiterung
      LetzteSign := Format("{:0" . StellenSign . "}", LetzteSign)  ; Setzt Index auf 1 in 2 Ziffern
      Item.Name := AktSign . "_" . LetzteSign . (ShowExt ? "." . Erweiterung : "")
      LetzteSign++
   }
   ; Fertig
   ; Letzte Datei selektieren
   ; -> docs.microsoft.com/en-us/windows/desktop/shell/shellfolderview-selectitem
   ShellWin.Document.SelectItem(SelectedItems[Anzahl], 29)
   For Sign, Item In SelectedItems
      Item := ""
   ShellWin := ""
Progress, Off
return
Vielleicht sitzen die Befehle lediglich in der falschen Zeile.

Zu dem Auswahlfenster. Du sagst:
Wenn aus einer duch einen Hotkey ausgelösten Routine eine Fehlermeldung kommt, ist es doch recht 'normal', dass man diesen Hotkey nach Fehlerbereiningung noch einmal eingeben muss.
Das ist im Prinzip schon richtig, aber auch nur, wenn man voraussetzt, daß es sich um einen Fehler handelt. Die Auswahl ist ja nicht primär dafür da, vergessene Eingaben nachzuholen. Vor der Eingabe von F12 wird man ja nicht darauf hingewiesen. Außerdem bleibt die AktSign ja auch gespeichert, wenn ich zuvor mit einem anderen Modul gearbeitet hatte. Das muß aber nicht diejenige sein, die in diesem Fall verwendet werden soll. darum werde ich wohl noch eine weitere MsgBox einbauen oder mit der InputBox in eine Gui legen, die die aktuelle AktSign anzeigt und fragt, ob man sie ändern will. Eigentlich - das fällt mir gerade jetzt erst ein - bräuchte man dafür nur eine solche Gui, in die man den Hinweistext je nach Ergebnis der Abfrage hineinsetzt. Mal sehen, ob ich da noch was entwerfe. Vorerst aber eher nicht.
Aber grundsätzlich bleibt die Frage: Wie kann ich mit AHK Subroutinen schreiben, die ich im laufenden Script aufrufen und abarbeiten kann und die anschließend wieder an dieselbe Stelle in das Script zurückkehren und dieses dort fortsetzen?

Zuletzt noch einmal meine letzte Frage zu der Trimmen-Funktion über ^F6
Du schriebst:
Mein Code prüft, ob der Anfang des Dateinamens mit dem vorgegebenen Bestandsnamen übereinstimmt. Wenn nicht, wandert die Datei in das Fehlerarray.
Wie ich es verstanden habe, können die Bestandsnamen auch die für die Abtrennung von Signatur und Index genutzten Trennzeichen enthalten. Wie willst Du ermitteln, wo genau ein 'falscher' Bestandsname endet?
meine Antwort und Frage dazu war:
Wenn es dann eine Möglichkeit gibt, dieses Fehlerarray nach dem Ablauf des eigentlichen Scripts noch einmal in einem separaten Fenster o.ä. zu öfnen, um diese übriggebliebenen Dateien dann manuell zu korrigieren, dann wäre das schon in Ordnung. Man muß eben bedenken, daß man diese bei größeren Beständen sonst mühsam wieder zusammensuchen müßte.
Nochmal also: Ist es möglich, dieses Array so zu erhalten, daß man sich danach die einzelnen Dateien zum manuellen Umbenennen/Korrigieren vornehmen kann? oder daß sie alle zu diesem Zweck in einen separaten (Unter-)Ordner verschoben werden?

Viele Grüße von Meister Lampe

Re: Optimierung Umbenennungstool

Post by just me » 05 Sep 2019, 04:52

Moin,

zum Thema Progress habe ich als letztes das gefunden:

Code: Select all

Progress, m2 fs12 zh0 ct0000ff CWffffff B, Bin gleich fertig ..., , Vorschau, Verdana
...
Progress, Off
return
Um zu wissen, warum das Fenster nicht dauerhaft angezeigt wird, wäre es wichtig zu wissen, was sich hinter

Code: Select all

...
verbirgt.

Beim Thema Bestandsvorlage kann ich immer noch kein Problem erkennen. Wenn aus einer duch einen Hotkey ausgelösten Routine eine Fehlermeldung kommt, ist es doch recht 'normal', dass man diesen Hotkey nach Fehlerbereiningung noch einmal eingeben muss. Einen 'normalen' Mitarbeiter sollte das auch nicht überfordern.

Grüße, just me

Re: Optimierung Umbenennungstool

Post by Meister Lampe » 04 Sep 2019, 17:25

Hallo just me!

Ich habe mittlerweile meine separate Routine zur Ergänzung von Bildsignaturen ohne Bestandsnummern (AktSign) mit diesen nach dem vorgegebenen Muster verbessert:

Code: Select all

F12::
If (AktSign = "")
   {
      MsgBox, 17, Keine Bestandsvorlage!, Sie müssen zuerst eine Bestandsvorlage auswählen!
      IfMsgBox Ok
      {
         Gosub Auswahlfenster
         return
      }
      else
      return
   }
   
   If !(StellenIndex = "0")
   {
      ;Gosub, Trimmen_mI
      MsgBox, 16, Fehler!,  Sie können keine Signaturen mit Indizes ergänzen!`nBitte wähle Sie eine andere Vorlage aus.
      Gosub Auswahlfenster
      return
   }
   else
      
   Clipboard := ""
   SendInput, ^c
   Clipwait, 1
 
   DateienAuslese := Clipboard
   SignStellen := StellenSign
   IndexStellen := StellenIndex
   NewAktname := AktSign
   
   Loop, Parse, Dateienauslese, `n, `r
	{
      SplitPath, A_LoopField, , Verzeichnis, Erweiterung, SignRumpf	
	  
		; Wenn NameArray[2] mit einer oder mehreren Ziffer(n) beginnt und mit einer oder keiner 'Nichtziffer' endet ...
      If RegExMatch(SignRumpf, "^(\d+)(\D?)$", Match) 
      {
         ; MsgBox, % StrLen(Match1) . ": " . Match1 . "   <>   " . Match2
         If (StrLen(Match1) = SignStellen)
            NewSign := SignRumpf
         else
         {
            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%
            }
         }
         FileMove, %A_LoopField%, %Verzeichnis%\%NewAktname%_%NewSign%.%Erweiterung%
      }      	
   }  	
return	
Auch hier ergibt sich - wie ich bereits in meinem letzten Post geschrieben habe - das Problem, daß ich auf das Auswahlfenster mit Gosub umlenke, aber danach nicht wieder zurückkomme. Müßte man dazu den Abschluß dieser Subroutine ganz anders gestalten? Statt mit return mit einem (oder mehreren?) anderen Befehlen?
Und, was bereits seit Langem aussteht:
Ich habe immernoch nicht herausbekommen, warum das Progressfenster, das ich als Ersatz für ein animiertes Wartesymbol erstellt habe, nicht die ganze Zeit während dem Umbenennen-Vorgang angezeigt wird, sondern nur kurz aufblitzt.

Viele Grüße von Meister Lampe

Re: Optimierung Umbenennungstool

Post by Meister Lampe » 22 Aug 2019, 16:43

Hallo just me!
Mein Code prüft, ob der Anfang des Dateinamens mit dem vorgegebenen Bestandsnamen übereinstimmt. Wenn nicht, wandert die Datei in das Fehlerarray.
Wie ich es verstanden habe, können die Bestandsnamen auch die für die Abtrennung von Signatur und Index genutzten Trennzeichen enthalten. Wie willst Du ermitteln, wo genau ein 'falscher' Bestandsname endet?
Wenn es dann eine Möglichkeit gibt, dieses Fehlerarray nach dem Ablauf des eigentlichen Scripts noch einmal in einem separaten Fenster o.ä. zu öfnen, um diese übriggebliebenen Dateien dann manuell zu korrigieren, dann wäre das schon in Ordnung. Man muß eben bedenken, daß man diese bei größeren Beständen sonst mühsam wieder zusammensuchen müßte.

Jetzt habe ich noch eine Frage zum Anfang des Scripts. Dort steht zuerst die Überprüfung:

Code: Select all

 If (AktSign = "")
   {
      MsgBox, 17, Keine Bestandsvorlage!, Sie müssen zuerst eine Bestandsvorlage auswählen!
      IfMsgBox Ok
      {
         Gosub Auswahlfenster
         return
      }
      else
      return
   }
Wenn keine Bestandsvorlage im Speicher ist, werde ich nach Ok automatisch zu dem Modul Auswahlfenster mit der Gui zum Auswählen der Vorlagen weitergeleitet. Aber nach der Auswahl dort komme ich nicht wieder zurück, sodaß die Routine einfach weiterlaufen würde, sondern ich muß sie mit ^F6 erneut starten! Wie kann ich das erreichen? Das Modul Auswahlfenster ist ja auch als eigenständige Routine mit F8 abrufbar und endet deshalb mit einem return, das kann ich ja nicht einfach durch einen Sprungbefehl ersetzen. Abgesehen davon, daß ich es ja dann nicht mehr von anderswo aufrufen könnte.

Viele Grüße von Meister Lampe

Re: Optimierung Umbenennungstool

Post by just me » 20 Aug 2019, 04:36

Meister Lampe wrote:
13 Aug 2019, 16:45
...
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?
...
Mein Code prüft, ob der Anfang des Dateinamens mit dem vorgegebenen Bestandsnamen übereinstimmt. Wenn nicht, wandert die Datei in das Fehlerarray.
Wie ich es verstanden habe, können die Bestandsnamen auch die für die Abtrennung von Signatur und Index genutzten Trennzeichen enthalten. Wie willst Du ermitteln, wo genau ein 'falscher' Bestandsname endet?

Re: Optimierung Umbenennungstool

Post by Meister Lampe » 19 Aug 2019, 16:12

Hallo just me!
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?
Eigentlich ist das ja gerade der Zweck der Sache: Eine "wilde Mischung" von Formaten - und eben auch evtl. Tippfehlern - zu bereinigen. Im gleichen Ordner kommen immer auch nur Dateien vor, die zum gleichen Bestand gehören, aber eben nicht alle gleich sauber nach dem für ihn vorgegebenen Schema signiert. Um das zu bereinigen, ist das Script da. Wären das gemischte Dateien und würde ich auch noch unterschiedliche Bestandsnamen berücksichtigen wollen, dann müßte ich zu jeder Datei separat auch die entsprechende Vorlage einzeln aufrufen, da diese ja unterschiedliche Formate an Stellenzahlen in Signatur oder Index haben können.

Viele Grüße von Meister Lampe

Re: Optimierung Umbenennungstool

Post by just me » 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

Re: Optimierung Umbenennungstool

Post by Meister Lampe » 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

Re: Optimierung Umbenennungstool

Post by just me » 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"]

Re: Optimierung Umbenennungstool

Post by Meister Lampe » 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

Re: Optimierung Umbenennungstool

Post by Meister Lampe » 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

Re: Optimierung Umbenennungstool

Post by just me » 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.

Re: Optimierung Umbenennungstool

Post by Meister Lampe » 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

Top