Dank Eurer Hilfe im Thread Mehrere Objekte mit der Maus markieren habe ich ein schönes Werkzeug ur Umbenennung von Bildern im Windows Explorer nach meinen Bedürfnissen erstellen können (Anforderungen und Funktionsweise des Scrips sind im erwähnten Thread im Post vom 20.10.2018/20:05 beschrieben).
Es kommt mir jetzt durch eine Mischung aus Freude am Programmieren, Neugierde, was man noch alles mit dem AHK machen kann, aus Ehrgeiz und Perfektionsfimmel, der Reiz, daran weiterzubasteln. Dazu kommt - natürlich - auch die Möglichkeit, das Tool in seiner Leistungsfähigkeit zu erweitern und effektiver nutzen zu können.
Ich sehe also durchaus noch "Luft nach Oben", wie man so schön sagt, und werde in diesem Thread einige konkrete Fragen dazu haben.
Zuerst nochmals das vollständige und funktionstüchtige Script zur Einsicht:
Code: Select all
;
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#SingleInstance force
SetTitleMatchMode, RegEx
;------------------------------------------------------------------------
; Gruppe Windows Explorer Fenster definieren
;------------------------------------------------------------------------
GroupAdd, Explorer, ahk_class ExploreWClass
GroupAdd, Explorer, ahk_class CabinetWClass
;------------------------------------------------------------------------
SetBatchLines, -1
ShellApp := ComObjCreate("Shell.Application")
AktSign := "A 96--1"
Auswahl := []
LetzteDatei := ""
LetzteSign := 0
Return
; --------------------------------------------------------------------------------------------------
#IfWinActive ahk_group Explorer
!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()
; Benutzereingaben zum Umbenennen holen
LetzteSign := Format("{:04}", ++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
}
If !InStr(BoxSign, ",") { ; Prüft, ob ein anderer Startindex durch Komma getrennt eingegeben wurde
LetzteSign := Format("{:04}", BoxSign) ; Setzt neue Signatur auf 4 Ziffern
LetzterIndex := 0 ; Setzt Index auf 0
}
Else {
StringSplit, BoxArray, BoxSign, `,
If (BoxArray1 = "")
LetzteSign := Format("{:04}", ++LetzteSign) ; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
Else
LetzteSign := Format("{:04}", 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("{:03}", LetzterIndex) ; Setzt Index auf 1 in 2 Ziffern
Item.Name := AktSign . "_" . LetzteSign . "-" . LetzterIndex
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 := ""
Return
#IfWinActive
Das Programm funktioniert nur einwandfrei, wenn diese ausgeblendet sind. Ansonsten werden sie ein zweites Mal hinten angehängt. Nun werden sie bei unseren PCs im Büro aber standardmäßig eingeblendet, und zwar über eine Funktion des internen Netzwerkes. Das bedeutet, daß wir die Dateinamenerweiterungen nur temporär ausblenden können, sie aber nach einiger Zeit (ca. 2h) unvorhergesehen wieder da sind. Das kann sogar passieren, während die Umbenennung läuft. Dabei wird zwar um Glück nichts zerstört, sondern der Vorgang nur abgebrochen und kann nach erneutem Ausblenden der Erweiterungen wiederholt werden, aber es ist lästig. Und das vor allem, weil geplant ist, daß auch andere Kollegen damit mal arbeiten sollen. Dann muß das natürlich ohne solche Umstände funktionieren.
Viele Grüße von Meister Lampe