Post by Meister Lampe » 08 Aug 2021, 16:44
Hallo just me & gregster!
Danke für Eure Hinweise.
Ich habe jetzt das Umbenennungsscript etwas modifiziert und diese neuen Elemente mit eingebaut. Hintergrund hierfür ist die Zusammenführung von Bildern aus verschiedenen Scannern in jeweils einen Datensatz.
Und so weit bin ich gekommen:
Code: Select all
Zusammenführen:
+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
}
Gosub, Sub_Zusammenführen
return
Sub_Zusammenführen:
SelectedItems := []
For Item In ShellWin.Document.SelectedItems
SelectedItems.Push(Item)
LetzteDatei := SelectedItems.RemoveAt(1) ; erste (bzw. letzte) Datei aus dem Array entfernen ...
;~ ErsterPfad := LetzteDatei.Path
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%
SplitPath, % SelectedItems[1].Path, , , , ErsterName
;~ MsgBox, Die Variable ErsterName lautet jetzt %ErsterName%
ErsteNummer := StrReplace(ErsterName, AktSign . "_")
;~ MsgBox, Die Variable ErsteNummer lautet jetzt %ErsteNummer%
ErsteSign := StrSplit(ErsteNummer, "-")
;~ MsgBox, Die Variable ErsteSign lautet jetzt %ErsteSign%
LetzteSign := Format("{:0" . StellenSign . "}", ErsteSign[1])
;~ MsgBox, Die Variable LetzteSign lautet jetzt %LetzteSign%
LetzterIndex := 1
; 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++
}
;~ MsgBox, Die Datei LetzterIndex lautet jetzt %LetzterIndex%
; -> docs.microsoft.com/en-us/windows/desktop/shell/shellfolderview-selectitem
ShellWin.Document.SelectItem(SelectedItems[Anzahl], 29)
For Index, Item In SelectedItems
Item := ""
ShellWin := ""
Return
Der erste Block
Zusammenführen ist praktisch eine Kopie aus dem anderen Script, der zweite
Sub_Zusammenführen stellt vor dem Umbenennen die Signatur fest der ersten Datei fest und verwendet dann diese. Ich habe das absichtlich in zwei Routinen geteilt, weil ich mir vorbehalten wollte, die Auswahl auch anders treffen zu können, als durch manuelles Markieren.
Und genau darum geht es mir jetzt: Wie kann ich es Einrichten, daß das Programm, alle Dateien, die die einmal herausgefundene Startsignatur enthalten, zum Umbenennen sucht?
Einen Anfang habe ich gemacht (die erste Datei muß man aber immernoch markieren), komme aber jetzt nicht mehr weiter:
Code: Select all
AutomZusammenführen:
^!z::
; 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
Clipboard := "" ; ClipBoard leeren, damit ClipWait funktioniert
Send, ^c ; mit Control+C Dateinamen inkl. Pfad ins ClipBoard kopieren
ClipWait, 1, 1 ; kurz warten, bis der Dateiname im ClipBoard angekommen ist
StartPfad := Clipboard
MsgBox, Die Variable StartPfad lautet jetzt %StartPfad%
SplitPath, % StartPfad, , , , StartName
MsgBox, Die Variable StartName lautet jetzt %StartName%
StartNummer := StrReplace(StartName, AktSign . "_")
MsgBox, Die Variable StartNummer lautet jetzt %StartNummer%
StartSign_arr := StrSplit(StartNummer, "-")
SuchSign := AktSign . "_" . StartSign_arr[1]
MsgBox, Die Variable SuchSign lautet jetzt %SuchSign%
Clipboard := ""
SendInput, ^a^c
ClipWait, 1
AlleDateien := Clipboard
Clipboard := ""
Man müßte jetzt nach allen Dateien im Ordner suchen, die die Variable
Suchsign als Zeichenkette am Anfang ihres Namens haben und sie ebenfalls in so ein Array wie das
SelectedItems bringen. Dann könnte man entweder ebenfalls auf
Sub_Zusammenführen springen oder - besser - das abgekürzt schreiben, da die Signatur ja nicht mehr ermittelt werden muß.
Hallo just me & gregster!
Danke für Eure Hinweise.
Ich habe jetzt das Umbenennungsscript etwas modifiziert und diese neuen Elemente mit eingebaut. Hintergrund hierfür ist die Zusammenführung von Bildern aus verschiedenen Scannern in jeweils einen Datensatz.
Und so weit bin ich gekommen:
[code]Zusammenführen:
+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
}
Gosub, Sub_Zusammenführen
return
Sub_Zusammenführen:
SelectedItems := []
For Item In ShellWin.Document.SelectedItems
SelectedItems.Push(Item)
LetzteDatei := SelectedItems.RemoveAt(1) ; erste (bzw. letzte) Datei aus dem Array entfernen ...
;~ ErsterPfad := LetzteDatei.Path
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%
SplitPath, % SelectedItems[1].Path, , , , ErsterName
;~ MsgBox, Die Variable ErsterName lautet jetzt %ErsterName%
ErsteNummer := StrReplace(ErsterName, AktSign . "_")
;~ MsgBox, Die Variable ErsteNummer lautet jetzt %ErsteNummer%
ErsteSign := StrSplit(ErsteNummer, "-")
;~ MsgBox, Die Variable ErsteSign lautet jetzt %ErsteSign%
LetzteSign := Format("{:0" . StellenSign . "}", ErsteSign[1])
;~ MsgBox, Die Variable LetzteSign lautet jetzt %LetzteSign%
LetzterIndex := 1
; 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++
}
;~ MsgBox, Die Datei LetzterIndex lautet jetzt %LetzterIndex%
; -> docs.microsoft.com/en-us/windows/desktop/shell/shellfolderview-selectitem
ShellWin.Document.SelectItem(SelectedItems[Anzahl], 29)
For Index, Item In SelectedItems
Item := ""
ShellWin := ""
Return[/code]
Der erste Block [c]Zusammenführen[/c] ist praktisch eine Kopie aus dem anderen Script, der zweite [c]Sub_Zusammenführen[/c] stellt vor dem Umbenennen die Signatur fest der ersten Datei fest und verwendet dann diese. Ich habe das absichtlich in zwei Routinen geteilt, weil ich mir vorbehalten wollte, die Auswahl auch anders treffen zu können, als durch manuelles Markieren.
Und genau darum geht es mir jetzt: Wie kann ich es Einrichten, daß das Programm, alle Dateien, die die einmal herausgefundene Startsignatur enthalten, zum Umbenennen sucht?
Einen Anfang habe ich gemacht (die erste Datei muß man aber immernoch markieren), komme aber jetzt nicht mehr weiter:
[code]AutomZusammenführen:
^!z::
; 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
Clipboard := "" ; ClipBoard leeren, damit ClipWait funktioniert
Send, ^c ; mit Control+C Dateinamen inkl. Pfad ins ClipBoard kopieren
ClipWait, 1, 1 ; kurz warten, bis der Dateiname im ClipBoard angekommen ist
StartPfad := Clipboard
MsgBox, Die Variable StartPfad lautet jetzt %StartPfad%
SplitPath, % StartPfad, , , , StartName
MsgBox, Die Variable StartName lautet jetzt %StartName%
StartNummer := StrReplace(StartName, AktSign . "_")
MsgBox, Die Variable StartNummer lautet jetzt %StartNummer%
StartSign_arr := StrSplit(StartNummer, "-")
SuchSign := AktSign . "_" . StartSign_arr[1]
MsgBox, Die Variable SuchSign lautet jetzt %SuchSign%
Clipboard := ""
SendInput, ^a^c
ClipWait, 1
AlleDateien := Clipboard
Clipboard := ""
[/code]
Man müßte jetzt nach allen Dateien im Ordner suchen, die die Variable [c]Suchsign[/c] als Zeichenkette am Anfang ihres Namens haben und sie ebenfalls in so ein Array wie das [c]SelectedItems[/c] bringen. Dann könnte man entweder ebenfalls auf [c]Sub_Zusammenführen[/c] springen oder - besser - das abgekürzt schreiben, da die Signatur ja nicht mehr ermittelt werden muß.