Array mit Schlüsselvariable wird nicht aufgelöst,... Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Array mit Schlüsselvariable wird nicht aufgelöst,...

Post by BoBo » 16 May 2022, 04:50

...nun, eigentlich nach Fahrzeugblinker-Prinzip. Geht mal, geht mal nicht.

Ziel, Dateien sollen abhängig von deren Dateiendungen mit einem zugewiesenen Programm gestartet werden. Quasi ein registry-unabhängiges file-extension-assignment.
Verwaltet werden die Extension-Application-Paarungen in einem assoziativen Array.
Anwendung: im Windows Explorer werden beliebige Dateien ausgewählt (eine *.txt,*.ahk-Datei sollte schon dabei sein!).
Hotkey betätigen: F12.
Im Ergebnis wird interessanterweise für *.txt wie erwartet Run notepad.exe <dateipfad> angezeigt, für *.ahk, *.csv jedoch ausschließlich der Dateipfad Run <dateipfad>!?

Was übersehe ich hier? :think:

Code: Select all

#SingleInstance, Force

fIndex:= {"xls":"excel.exe"
         ,"txt":"notepad.exe"
         ,"bmp":"paint.exe"
         ,"ahk":"autohotkey.exe"
         ,"csv":"notepad.exe"}

F12::
   clipboard:=""
   Send +{F10}p                                             ; ruft explorer kontextmenü auf und kopiert die pfade von ausgewählten dateien 
   ClipWait                                                 ; ...in die Zwischenablage
   files := StrReplace(clipboard,"""","")                   ; entfernt alle Anführungszeichen aus den (multiplen) pfadangaben
   file := StrSplit(files,"`n")                             ; (multiple) pfade in array transferieren
   Loop % file.Count()                                      ; einzelne Pfade prozessieren
         {  SplitPath,% file[A_Index],,, ext                ; liefert die ext (z.B. 'ahk') aus dem dateipfad
            MsgBox % ext "`nRun " . fIndex[ext] . " " . file[A_Index]
         }
Return

KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: Array mit Schlüsselvariable wird nicht aufgelöst,...  Topic is solved

Post by KHA » 16 May 2022, 12:36

file := StrSplit(files,"`n", "`r") ; Beachten Zeilenumbrüche in Windows bestehen aus `r`n

Code: Select all

#SingleInstance, Force

fIndex:= {"xlsx":"excel.exe"
         ,"txt":"notepad.exe"
         ,"jpg":"paint.exe"
         ,"ahk":"autohotkey.exe"
         ,"csv":"notepad.exe"}

F12::
   clipboard:=""
   Send +{F10}p                                             ; ruft explorer kontextmenü auf und kopiert die pfade von ausgewählten dateien 
   ClipWait                                                 ; ...in die Zwischenablage
   files := StrReplace(clipboard,"""","")                   ; entfernt alle Anführungszeichen aus den (multiplen) pfadangaben
   file := StrSplit(files,"`n", "`r")                             ; Beachten Zeilenumbrüche in Windows bestehen aus `r`n
   Loop % file.Count()                                      ; einzelne Pfade prozessieren
         {  SplitPath,% file[A_Index],,, ext                ; liefert die ext (z.B. 'ahk') aus dem dateipfad
            MsgBox % ext "`nRun " . fIndex[ext] . " " . file[A_Index]
         }
Return

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Array mit Schlüsselvariable wird nicht aufgelöst,...

Post by BoBo » 16 May 2022, 16:24

Merci. Hab’s noch nicht ausprobiert (da tablet mit iOS), …doch stellt sich mir ad-hoc die Frage: "warum war das fehlende `r für die *.txt Dateiendung kein Problem, doch für *.csv schon, wo doch beide mit "notepad.exe" retourniert werden sollten?! :think:
Wie in der subject line/dem Titel bereits angesagt, das Problem besteht nicht wenn das array statisch abgefragt wird:

Code: Select all

MsgBox % file.ahk ; gibt korrekt autohotkey.exe aus
MsgBox % file[ext] ; wobei ext = ahk, scheitert
Erklärt sich mir aus dem Hinzufügen des "`r" (bisher) nicht :shifty: :wtf:

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

Re: Array mit Schlüsselvariable wird nicht aufgelöst,...

Post by just me » 17 May 2022, 03:34

Moin @BoBo,

starte mal das folgende Skript, markiere ein paar Dateien im einem Explorerfenster und drücke F12.

Code: Select all

#NoEnv
#SingleInstance, Force

F12::
   clipboard:=""
   Send +{F10}p                                             ; ruft explorer kontextmenü auf und kopiert die pfade von ausgewählten dateien
   ClipWait                                                 ; ...in die Zwischenablage
   files := StrReplace(clipboard,"""","")                   ; entfernt alle Anführungszeichen aus den (multiplen) pfadangaben
   files := StrReplace(files,"`r","#")
   MsgBox, %files%
return
An der letzten Datei im Clipboard hängt kein Zeilenwechsel (`r`n). Deshalb kann nach Deinem StrSplit(files,"`n") auch kein `r übrig bleiben. Soll heißen, für die letzte Datei klappt es.

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Array mit Schlüsselvariable wird nicht aufgelöst,...

Post by BoBo » 17 May 2022, 04:41

@just me & @KHA - Danke Euch. 8-) Das "Enttarnen" der CR's macht's dann tatsächlich greifbar(er) :thumbup: Und es funzt jetzt :clap:

Post Reply

Return to “Ich brauche Hilfe”