AutoHotkey Community
Let's help each other out
Skip to content
Post by just me » 08 Dec 2021, 04:17
Meister Lampe wrote:Was soll das (ShowExt ? Erweiterung : "") eigentlich bewirken?
Meister Lampe wrote: ↑19 Nov 2021, 18:36 Hallo just me! ...
Post by Meister Lampe » 07 Dec 2021, 14:16
Code: Select all
... Progress, 2: m2 H45 W350 fs16 zh0 ZY11 WS600 ct0000ff CWffffff B, Bin gleich fertig ..., , Vorschau, Verdana ; größeres Fenster und Schrift ... For Item In ShellWin.Document.Folder.Items { If Item.IsFolder() ; das Element ist ein Ordner -> überspringen Continue ScanPfad := Item.path SplitPath, ScanPfad, ScanName If !RegExMatch(ScanName, "^([^_]+)(_)([^-]+)(-)(\d+)(\.[^\.]+)$", M) ; der Name ist fehlerhaft aufgebaut -> überspringen Continue ; AktSign = M1, Signatur = M3, Index = M5, Signatur := M3 Erweiterung := M6 ;~ MsgBox, Die Variablen Signatur und Erweiterung lautet jetzt %Signatur% und %Erweiterung% ; hier könntest Du Prüfungen auf die Gültigkeit von AktSign, Signatur und Index einfügen If Akt_Sig_Idx[AktSign, Signatur] ; Index für die Kombination M1/Signature bestimmen Akt_Sig_Idx[AktSign, Signatur] += 1 Else Akt_Sig_Idx[AktSign, Signatur] := 1 ;~ Signatur := Format("{:0" . StellenSign . "}", Akt_Sig_Idx[AktSign, Signatur]) ; Korrigiert Signaturformat ;~ MsgBox, Die Variable Signatur lautet jetzt %Signatur% NeuerIndex := Format("{:0" . StrLen(M5) . "}", Akt_Sig_Idx[AktSign, Signatur]) ;~ Index := Format("{:0" . StellenIndex . "}", Akt_Sig_Idx[AktSign, Signatur]) ;~ MsgBox, Die Variable NeuerIndex lautet jetzt %NeuerIndex% NeuerName := AktSign . "_" . Signatur . "_" . NeuerIndex . Erweiterung ;(ShowExt ? Erweiterung : "") ;~ MsgBox, Die Variable NeuerName lautet jetzt %NeuerName% ;~ Item.Name := AktSign . "_" . Signatur . "-" . NeuerIndex . "." (ShowExt ? Erweiterung : "") Item.Name := NeuerName } Progress, 2: Off Return
; wie im letzten Post: Item.Name := AktSign . "_" . Signatur . "-" . NeuerIndex . (ShowExt ? Erweiterung : "") ; einen Punkt eingefügt: Item.Name := AktSign . "_" . Signatur . "-" . NeuerIndex . "." (ShowExt ? Erweiterung : "") ; mit dem Punkt in der Klammer, so steht es in den anderen Scripts: Item.Name := AktSign . "_" . Signatur . "-" . NeuerIndex . (ShowExt ? "." . Erweiterung : "")
NeuerName := AktSign . "_" . Signatur . "_" . NeuerIndex . Erweiterung Item.Name := NeuerName
Post by just me » 01 Dec 2021, 11:11
... For Item In ShellWin.Document.Folder.Items { If Item.IsFolder() ; das Element ist ein Ordner -> überspringen Continue ScanPfad := Item.path SplitPath, ScanPfad, ScanName If !RegExMatch(ScanName, "^([^_]+)(_)([^-]+)(-)(\d+)(\.[^\.]+)$", M) ; der Name ist fehlerhaft aufgebaut -> überspringen Continue ; AktSign = M1, Signatur = M3, Index = M5, Erweiterung = M6 ; hier könntest Du Prüfungen auf die Gültigkeit von AktSign, Signatur und Index einfügen If Akt_Sig_Idx[M1, M3] ; Index für die Kombination M1/Signature bestimmen Akt_Sig_Idx[M1, M3] += 1 Else Akt_Sig_Idx[M1, M3] := 1 NeuerIndex := Format("{:0" . StrLen(M5) . "}", Akt_Sig_Idx[M1, M3]) Item.Name := M1 . "_" . M3 . "-" . NeuerIndex . (ShowExt ? M6 : "") } ...
Post by Meister Lampe » 30 Nov 2021, 14:28
+^g:: If !(ModulAuswahl = 7 or ModulAuswahl = 0) { MsgBox, 17, Keine Bestandsvorlage!, Sie müssen zuerst eine Bestandsvorlage auswählen! IfMsgBox Ok { Gosub Auswahlfenster ModulAuswahl := 7 return } else return } else ModulAuswahl := 7 ExplorerID := WinExist("A") ; <<<<<<<<<< Fenstertitel wird gebraucht ShellWin := 0 For Win In ShellApp.Windows { If (Win.HWND = ExplorerID) { ShellWin := Win Break } } If !(ShellWin) ; das aktive Explorerfenster wurde nicht gefunden, Abbruch! Return Akt_Sig_Idx := [] ; Array für die Verwaltung der Indizes je AktSign und Signatur For Item In ShellWin.Document.Folder.Items { If Item.IsFolder() ; das Element ist ein Ordner -> überspringen Continue ScanPfad := Item.path SplitPath, ScanPfad, ScanName ScanName := StrReplace(ScanName, AktSign . "_") MsgBox, Die Variable ScanName lautet jetzt %ScanName% Split := StrSplit(ScanName, ["-", ".", "_"]) If (Split.Length() <> 3) ; der Name ist fehlerhaft aufgebaut -> überspringen MsgBox, der Name ist fehlerhaft aufgebaut - überspringen? Continue ;~ AktSign := Split[1] ; auf diese 4 Zuordnungen könnte man auch verzichten Signatur := Split[1] Index := Split[2] Erweiterung := Split[3] ; hier könntest Du Prüfungen auf die Gültigkeit von AktSign (1), Signatur (2), and Index (3) einfügen If Akt_Sig_Idx[AktSign, Signatur] ; Index für die Kombination AktSign/Signature bestimmen Akt_Sig_Idx[AktSign, Signatur] += 1 Else Akt_Sig_Idx[AktSign, Signatur] := 1 Index := Format("{:0" . StellenIndex . "}", Akt_Sig_Idx[AktSign, Signatur]) Item.Name := AktSign . "_" . Signatur . "-" . Index . (ShowExt ? "." . Erweiterung : "") } Return
Post by just me » 29 Nov 2021, 07:50
+^f:: ExplorerID := WinExist("A") ; <<<<<<<<<< Fenstertitel wird gebraucht ShellWin := 0 For Win In ShellApp.Windows { If (Win.HWND = ExplorerID) { ShellWin := Win Break } } If !(ShellWin) ; das aktive Explorerfenster wurde nicht gefunden, Abbruch! Return Akt_Sig_Idx := [] ; Array für die Verwaltung der Indizes je AktSign und Signatur For Item In ShellWin.Document.Folder.Items { If Item.IsFolder() ; das Element ist ein Ordner -> überspringen Continue ScanPfad := Item.path SplitPath, ScanPfad, ScanName Split := StrSplit(ScanName, ["-", ".", "_"]) If (Split.Length() <> 4) ; der Name ist fehlerhaft aufgebaut -> überspringen Continue AktSign := Split[1] ; auf diese 4 Zuordnungen könnte man auch verzichten Signatur := Split[2] Index := Split[3] Erweiterung := Split[4] ; hier könntest Du Prüfungen auf die Gültigkeit von AktSign (1), Signatur (2), and Index (3) einfügen If Akt_Sig_Idx[AktSign, Signatur] ; Index für die Kombination AktSign/Signature bestimmen Akt_Sig_Idx[AktSign, Signatur] += 1 Else Akt_Sig_Idx[AktSign, Signatur] := 1 Index := Format("{:0" . StellenIndex . "}", Akt_Sig_Idx[AktSign, Signatur]) Item.Name := AktSign . "_" . Signatur . "-" . Index . (ShowExt ? "." . Erweiterung : "") } Return
Post by Meister Lampe » 28 Nov 2021, 17:12
Post by just me » 28 Nov 2021, 05:49
Post by Meister Lampe » 27 Nov 2021, 18:32
+^f:: 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 InputBox, SuchSign, , Hier bitte eine Startsignatur eingeben, , 225, 125 Loop, 5 { LetzteSign := Format("{:0" . StellenSign . "}", SuchSign) Suchstring := AktSign . "_" . LetzteSign MsgBox, Die Variable Suchstring lautet jetzt %Suchstring% I := 1 ; zum Testen Zusammenfuehren := [] For Item In ShellWin.Document.Folder.Items { ; If Item.IsFolder() ; das Element ist ein Ordner -> überspringen ; Continue Scanpfad := Item.path SplitPath, Scanpfad, ScanName If InStr(ScanName, SuchString) { MsgBox, 0, % "Datei " . I++, % ScanName ; zum Testen Zusammenfuehren.Push(Item) } } LetzterIndex := 1 For Index, Item In Zusammenfuehren { ItemPath := Item.Path SplitPath, ItemPath, DateiName, , Erweiterung LetzterIndex := Format("{:0" . StellenIndex . "}", LetzterIndex) ; korrigiert die Ziffernzahl des Index LetzteSign := Format("{:0" . StellenSign . "}", LetzteSign) ; Setzt Index auf 1 in 2 Ziffern Item.Name := AktSign . "_" . LetzteSign . "-" . LetzterIndex . (ShowExt ? "." . Erweiterung : "") LetzterIndex++ } SuchSign++ } Return
Post by just me » 26 Nov 2021, 05:32
Meister Lampe wrote: Jetzt habe ich ja "nur" die Pfade. Kann ich dann gleich Code: Select allLoop, Parse, ShellWin.Document.Folder.Items, `n, `r schreiben?
Loop, Parse, ShellWin.Document.Folder.Items, `n, `r
Post by just me » 26 Nov 2021, 03:38
For Win In Shell.Windows {
I := 1 ; zum Testen Zusammenfuehren := [] For Item In ShellWin.Document.Folder.Items { ; If Item.IsFolder() ; das Element ist ein Ordner -> überspringen ; Continue Scanpfad := Item.path SplitPath, Scanpfad, ScanName If InStr(ScanName, SuchString) { MsgBox, 0, % "Datei " . I++, % ScanName ; zum Testen Zusammenfuehren.Push(Item) } }
Post by Meister Lampe » 25 Nov 2021, 17:27
Was ist denn dieser erste Teil? Und warum hast Du Code: Select allIf !(ShellWin) Return entfernt. Das sichert ja nur ab, dass das aktive Fenster tatsächlich ein Explorerfenster ist.
If !(ShellWin) Return
DateienAuslese := Clipboard ;... Loop, Parse, Dateienauslese, `n, `r { AnzahlDateien++ SplitPath, A_LoopField, , Verzeichnis, Erweiterung, AlterName ;...
Post by just me » 20 Nov 2021, 04:23
Meister Lampe wrote:Ja, jetzt klappt der erste Teil.
I := 1 For Item In ShellWin.Document.Folder.Items { MsgBox, 0, Element %A_Index%, % Item.Path ...
Zusammenfuehren.Push(A_LoopField)
Post by Meister Lampe » 19 Nov 2021, 18:36
+^f:: ActiveWindow := WinExist("A") ShellWin := 0 For Win In Shell.Windows { If (Win.HWND = ActiveWindow) { ShellWin := Win Break } } InputBox, SuchString, , Hier bitte Suchstring eingeben, , 225, 125 Zusammenfuehren := [] I := 1 For Item In ShellWin.Document.Folder.Items { ;~ If Item.IsFolder() ; das Element ist ein Ordner -> überspringen ;~ Continue ;~ else Scanpfad := Item.path SplitPath, Scanpfad, ScanName If InStr(ScanName, SuchString) { MsgBox, 0, % "Datei " . I++, % ScanName Zusammenfuehren.Push(A_LoopField) Continue } ;~ else ;~ MsgBox, %SuchString% nicht gefunden! ;~ If (I > 10) ; nach spätestens 10 Dateien ist Schluss ;~ Break } ShellWin.Document.SelectItem(SelectedItems[1], 4) For Index, Item In Zusammenfuehren[] { ItemPath := Item.Path SplitPath, ItemPath, DateiName, , Erweiterung LetzterIndex := Format("{:0" . StellenIndex . "}", LetzterIndex) ; korrigiert die Ziffernzahl des Index Item.Name := AktSign . "_" . LetzteSign . "-" . LetzterIndex . (ShowExt ? "." . Erweiterung : "") LetzterIndex++ } return
Post by just me » 14 Nov 2021, 05:59
Meister Lampe wrote:So wie das jetzt ist, findet es die Dateien mit dem String darin (5 Stück sind das), die anderen aber nicht. Stattdessen werden diese Dateien ein zweites Mal aufgeführt, bis die 10 Schleifendurchläufe voll sind.
I := 1 For Item In ShellWin.Document.Folder.Items {
Meister Lampe wrote:Außerdem mußte ich die Prüfung If Item.IsFolder() auskommentieren, weil das continue alle weiteren Befehle ignoriert und nicht nur den nächsten überspringt. Wie löst man dieses Problem?
If !(ShellWin.Document.SelectedItems.Count = 1) { MsgBox, 16, Fehler!, Bitte genau eine Datei auswählen! Return } FilePath := ShellWin.Document.SelectedItems.Item[0].Path MsgBox, %FilePath%
Post by Meister Lampe » 13 Nov 2021, 19:03
+^f:: ActiveWindow := WinExist("A") ShellWin := 0 For Win In Shell.Windows { If (Win.HWND = ActiveWindow) { ShellWin := Win Break } } InputBox, SuchString, , Hier bitte Suchstring eingeben, , 225, 125 If !(ShellWin) Return If !(ShellWin.Document.SelectedItems.Count = 1) { MsgBox, 16, Fehler!, Bitte genau eine Datei auswählen! Return } FilePath := ShellWin.Document.SelectedItems.Item[0].Path MsgBox, %FilePath% I := 1 For Item In ShellWin.Document.Folder.Items { ;~ If Item.IsFolder() ; das Element ist ein Ordner -> überspringen ;~ Continue ;~ else If InStr(Item.path, SuchString) MsgBox, 0, % "Datei " . I++, % Item.path else MsgBox, %SuchString% nicht gefunden! If (I > 10) ; nach spätestens 10 Dateien ist Schluss Break } Return
Post by just me » 15 Aug 2021, 04:07
#NoEnv SetBatchLines, -1 Shell := ComObjCreate("Shell.Application") Return ; Ein Explorerfenster öffnen, eine Datei auswählen und den Hotkey eingeben +^f:: ActiveWindow := WinExist("A") ShellWin := 0 For Win In Shell.Windows { If (Win.HWND = ActiveWindow) { ShellWin := Win Break } } If !(ShellWin) Return If !(ShellWin.Document.SelectedItems.Count = 1) { MsgBox, 16, Fehler!, Bitte genau eine Datei auswählen! Return } FilePath := ShellWin.Document.SelectedItems.Item[0].Path MsgBox, %FilePath% I := 1 For Item In ShellWin.Document.Folder.Items { If Item.IsFolder() ; das Element ist ein Ordner -> überspringen Continue MsgBox, 0, % "Datei " . I++, % Item.Path If (I > 10) ; nach spätestens 10 Dateien ist Schluss Break } Return Esc:: ExitApp
Post by Meister Lampe » 08 Aug 2021, 16:44
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
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 := ""
Post by gregster » 18 Jul 2021, 06:30
https://ahkde.github.io/docs/commands/SplitPath.htm#Parameters wrote:[v1.1.21+]: Dieser Parameter kann ein % Ausdruck sein, allerdings muss das Prozent-Leerzeichen-Präfix verwendet werden.
Post by BoBo » 18 Jul 2021, 04:00
Post by Meister Lampe » 17 Jul 2021, 16:47
ErsterPfad := SelectedItems[1].Path SplitPath, ErsterPfad, , , , ErsterName MsgBox, Die Variable ErsterName lautet jetzt %ErsterName%
SplitPath, SelectedItems[1].Path, , , , ErsterName MsgBox, Die Variable ErsterName lautet jetzt %ErsterName%
Top