Skript zum verschieben ausgewählter dateien u. ordner Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

kwon
Posts: 21
Joined: 20 Jul 2016, 10:50

Skript zum verschieben ausgewählter dateien u. ordner

01 Nov 2018, 14:48

Hallo,
ich bin ein Autohotkey-Anfänger und benötige Hilfe bei einem Skript
das im Windows-Explorer die markierten Ordner und Dateien in ein bestimmtes Verzeichnis verschiebt.

Leider komme ich allein nicht mehr weiter...

Unten ist mein Versuch...

Über Unterstützung würde ich mich sehr freuen.

Grüße, kwon

Code: Select all

^j::
clipboard= ;leert die Zwischenablage
Send ^c
clipwait ;besser für Zuverlässikeit
a=%clipboard% ;wandelt Elemente in Zwischenablage in Pfade um
Loop, Files, FileMove a, X:\test
return
songoku
Posts: 73
Joined: 12 Apr 2018, 13:22

Re: Skript zum verschieben ausgewählter dateien u. ordner

01 Nov 2018, 17:26

Von Anfänger zu Anfänger, ich hoffe es hilft dir.

Code: Select all

^j::
clipboard=
Send ^c
clipwait 
a=%clipboard%

Loop, parse, a, `n, `r
{
FileMove,% A_LoopField, X:\test\
}
User avatar
Gerdi
Posts: 185
Joined: 03 Aug 2015, 18:48
Location: Germany
Contact:

Re: Skript zum verschieben ausgewählter dateien u. ordner

02 Nov 2018, 07:09

Mit der Funktion
GetExplorerItems()
kommst Du an die Pfade der selektierten Explorer-Eintraege heran.
Siehe Mouse-Over-Beispiel:

Code: Select all

Loop
{
	MouseGetPos, OutputVarX, OutputVarY, OutputVarWin, OutputVarControl,2
	SelPathes := GetExplorerItems(0,OutputVarWin)
	ToolTip , % SelPathes
}

GetExplorerItems(Selected0_All1=1,OnlyHWND=""){

	For Window In ComObjCreate("Shell.Application").Windows {
		if(OnlyHWND="" OR Window.HWND=OnlyHWND)
		{
			if Selected0_All1
			{
				For Item In Window.Document.Folder.Items {
					ItemPaths.=Item.Path "`r`n"
				}		
			}
			else
			{
				For Item In Window.Document.SelectedItems {
					ItemPaths.=Item.Path "`r`n"
				}
			}
		}
	}
	return ItemPaths
}
SelPathes kannst Du dann in FileCopy bzw. FileCopyDir weiter-verwenden.

PS. GetExplorerItems() ist nicht von mir, ich weiss aber die Quelle nicht mehr.
Win 10 Home (x64) and Win 11 Pro N
https://github.com/Grrdi/ZackZackOrdner/archive/master.zip --> get folders on the quick
garry
Posts: 3740
Joined: 22 Dec 2013, 12:50

Re: Skript zum verschieben ausgewählter dateien u. ordner

02 Nov 2018, 08:27

danke Gerdi
dies gefunden , zeigt mit F1 die markierten Dateien im explorer an

Code: Select all

;-------- http://www.autohotkey.com/board/topic/60723-can-autohotkey-retrieve-file-path-of-the-selected-file/page-2#entry383065 ---
F1::MsgBox % Explorer_GetSelection()
return

Explorer_GetSelection(hwnd="") {
    WinGet, process, processName, % "ahk_id" hwnd := hwnd? hwnd:WinExist("A")
    WinGetClass class, ahk_id %hwnd%
    if (process = "explorer.exe")
        if (class ~= "Progman|WorkerW") {
            ControlGet, files, List, Selected Col1, SysListView321, ahk_class %class%
            Loop, Parse, files, `n, `r
                ToReturn .= A_Desktop "\" A_LoopField "`n"
        } else if (class ~= "(Cabinet|Explore)WClass") {
            for window in ComObjCreate("Shell.Application").Windows
                if (window.hwnd==hwnd)
                    sel := window.Document.SelectedItems
            for item in sel
                ToReturn .= item.path "`n"
        }
    return Trim(ToReturn,"`n")
}
return
kwon
Posts: 21
Joined: 20 Jul 2016, 10:50

Re: Skript zum verschieben ausgewählter dateien u. ordner

04 Nov 2018, 02:29

Hallo songoku, Gerdi und garry,
Vielen Dank für die sehr guten Antworten!!!
Wenn ich Zeit habe dann werde ich es ausprobieren - momentan bin ich mit leider anderen Dingen beschäftigt.
Ich bin sehr dankbar für die von euch dargestellten Lösungsmöglichkeiten - hatte diesbezüglich mit VBScript experimentiert.
Bei VBScript kann man nur die Elemente auf das Skript ziehen um die Pfade zu übertragen.
Allerdings kann man das Skript nicht an die Taskleiste anheften... Das ist sehr unpraktisch.
Mit den von euch dargestellten Möglichkeiten kann ich AHK für das Problem nutzen - und (was viel wichtiger ist) ich kann es per Tastenkombination triggern!!!
Vielen Dank nochmals für eure Hilfe!!!
Ich teste es demnächst wenn ich mehr Zeit habe...

Viele Grüße,
kwon
kwon
Posts: 21
Joined: 20 Jul 2016, 10:50

Re: Skript zum verschieben ausgewählter dateien u. ordner

04 Nov 2018, 12:14

Hallo songoku,
vielleicht stelle ich mich dämlich an, aber der von dir gepostete Code verschiebt nur die Dateien...
Ich habe probiert "FileMoveDir, ,% A_LoopField, X:\test\" hinzuzufügen, aber es klappt nicht.
Ich bitte nochmals um Hilfe.
Viele Grüße, kwon
songoku wrote:
01 Nov 2018, 17:26
Von Anfänger zu Anfänger, ich hoffe es hilft dir.

Code: Select all

^j::
clipboard=
Send ^c
clipwait 
a=%clipboard%

Loop, parse, a, `n, `r
{
FileMove,% A_LoopField, X:\test\
}
garry
Posts: 3740
Joined: 22 Dec 2013, 12:50

Re: Skript zum verschieben ausgewählter dateien u. ordner

04 Nov 2018, 14:18

EDIT : Beispiel geändert / falscher Ansatz mit Extension

Code: Select all

;- Oeffne einen Ordner (explorer) markiere Dateien und den >> alt+F1
;- Filemove zu C:\TEST
;- https://docs.microsoft.com/en-us/windows/desktop/Debug/system-error-codes
#warn
#noenv
setworkingdir,%a_scriptdir%
fd1=C:\TEST
ifnotexist,%fd1%
filecreatedir,%fd1%
;--------------------------
!F1::
aa:=Explorer_GetSelection()
msgbox, 262180,MOVE Folders and Files,DESTINATION=`n%FD1%`n-----------------------`nWant you really MOVE these Files/Folder's  ?`n--------------`n%aa%
 ifmsgbox,NO
   exitapp
loop,parse,aa,`n,`r
{
c:= a_loopfield
if c=
continue
SplitPath,c, name, dir, ext, name_no_ext, drive
aa:=FileExist(c)
if (AA="D")
  FileMoveDir,%c%,%fd1%\%name%
if (AA="A")  
  FileMove,%c%,%fd1%
}
aa=
run,%fd1%
return


;-----------------------------------------
Explorer_GetSelection(hwnd="") {
toreturn:=""
WinGet, process, processName, % "ahk_id" hwnd := hwnd? hwnd:WinExist("A")
WinGetClass class, ahk_id %hwnd%
if (process = "explorer.exe")
if (class ~= "Progman|WorkerW") {
ControlGet, files, List, Selected Col1, SysListView321, ahk_class %class%
Loop, Parse, files, `n, `r
ToReturn .= A_Desktop "\" A_LoopField "`n"
} else if (class ~= "(Cabinet|Explore)WClass") {
for window in ComObjCreate("Shell.Application").Windows
if (window.hwnd==hwnd)
sel := window.Document.SelectedItems
for item in sel
ToReturn .= item.path "`n"
}
return Trim(ToReturn,"`n")
}
return
Last edited by garry on 05 Nov 2018, 11:10, edited 2 times in total.
kwon
Posts: 21
Joined: 20 Jul 2016, 10:50

Re: Skript zum verschieben ausgewählter dateien u. ordner

04 Nov 2018, 15:22

Hallo garry,
dürfte ich (ohne nerven zu wollen) nochmals nachfragen?
Ich bekomme es leider nicht hin, stehe auf dem Schlauch...

Code: Select all

^j::
clipboard= 
Send ^c
clipwait 
a=%clipboard% 
Loop, parse, a, `n, `r
{
SplitPath, A_LoopField,,,Ext,,
If Ext=
	FileMoveDir, %A_LoopField%, X:\test\
   Else
	FileMove, %A_LoopField%, X:\test\
}
return
Was muss ich tun, damit es klappt?
Schon mal ein Dankeschön für die Hilfe im Voraus!!
Grüße,
kwon
garry
Posts: 3740
Joined: 22 Dec 2013, 12:50

Re: Skript zum verschieben ausgewählter dateien u. ordner

04 Nov 2018, 15:44

Probiere Beispiel-1 , definiere Dein Zielfolder
TestFolder:="X:\Test"

oder beachte splitpath :
SplitPath, A_LoopField,Name,,Ext,,
If Ext=
FileMoveDir, %A_LoopField%, X:\test\%name%
songoku
Posts: 73
Joined: 12 Apr 2018, 13:22

Re: Skript zum verschieben ausgewählter dateien u. ordner

05 Nov 2018, 10:02

Für Ordner und Dateien

Code: Select all


^j::
clipboard=
Send ^c
clipwait 
a=%clipboard%



Loop, parse, a, `n, `r
{
FileMoveDir, % A_LoopField, X:\test\ ,1
FileMove,% A_LoopField, X:\test\
}


garry
Posts: 3740
Joined: 22 Dec 2013, 12:50

Re: Skript zum verschieben ausgewählter dateien u. ordner  Topic is solved

05 Nov 2018, 10:54

@songoku, danke es funktioniert
die Abfrage mit extension wäre falsch gewesen ( es kann ein Ordner sein mit dem Namen "TEST.mpg" )
ich dachte man müsste unterscheiden ob man filemovedir oder filemove sendet
Hier ein komplizierter script ( mit Abfrage vor dem senden ) , wäre dies auch OK ?

Code: Select all

;- ahk-help = "C:\Program Files\AutoHotkey\AutoHotkey.chm"
;============ ctrl+j to move file & folders ========
#warn
#noenv
setworkingdir,%a_scriptdir%
;- Ordner sollte vorhanden sein 
DEST=C:\test
ifnotexist,%dest%
filecreatedir,%dest%
return
;-----------------------------
^j::                           ;- ctrl+j
clipboard=                     ;- clipboard leeren
Send, ^c                       ;- copy marked text
clipwait                       ;- warten bis copy ok
e=%clipboard%                  ;- Variable 'e' ist gleich wie clipboard ( nicht nötig )
msgbox, 262180,MOVE Folders and Files,DESTINATION=`n%dest%`n-----------------------`nWant you really MOVE these Files/Folder's ?`n--------------`n%e%
ifmsgbox,NO
    return
Loop, parse,e , `n, `r        ;- loop jede Linie ( Ende von Linie ist `n (ascii=10) )
{
c:=a_loopfield                ;- jede Linie ist ein Pfad , Variable 'c' 
if c=                         ;- falls Linie leer continue loop
  continue
SplitPath,c, name, dir, ext, name_no_ext, drive 
msgbox, 262208,PATH-TEST ,Name=%name%`nDIR=%dir%`nEXT=%ext%`nName ohne Extension=%name_no_ext%`nDRIVE=%drive%   ;- for TEST   
aa:=FileExist(c)              ;- D wenn folder / A wenn file          
if (AA="D")
 {
 msgbox, 262208,PATH-TEST ,Dies ist ein Ordner (folder)`n---------`n%c%   ;- for TEST
 FileMoveDir,%c%,%dest%\%name%
 }
if (AA="A")
FileMove,%c%,%dest%          ;- wenn nach if nur 1-Linie braucht es kein Klammer {--}
}
clipboard=
e=
run,%dest%                   ;- Oeffne Zielfolder
return                       ;- Ende Teil mit ctrl+j
;-------------
esc::exitapp                 ;- mit ESC jederzeit script verlassen
;======================================
Last edited by garry on 05 Nov 2018, 14:22, edited 1 time in total.
kwon
Posts: 21
Joined: 20 Jul 2016, 10:50

Re: Skript zum verschieben ausgewählter dateien u. ordner

05 Nov 2018, 13:11

Hallo songoku, vielen Dank für dein Beispiel!!
Es funktioniert teilweise - ich habe festgestellt, dass wenn ich einen Ordner mit Unterordnern habe dass dann nur der Inhalt des ausgewählten Ordners verschoben wird, nicht aber die ausgewählte Ebene selbst (was für mich aber sehr wichtig ist). Ich habe dies mit Hilfe der Dokumentation auch nicht ändern können (bin eben noch ein Anfänger). Deshalb gefällt mir das Skript von garry etwas besser. Hab' vielen Dank für deine Mühe!!
kwon
Posts: 21
Joined: 20 Jul 2016, 10:50

Re: Skript zum verschieben ausgewählter dateien u. ordner

05 Nov 2018, 13:14

Hallo Garry,
Vielen Dank für dein sehr gutes Skript!! Es funktioniert super!!
Ich werde allerdings noch etwas Übung brauchen bis ich alle Details verstehe... Wie gesagt, ich bin ein Anfänger...
Hab vielen Dank für deine Mühe!!
Ich wünsche dir (und songoku) einen schönen Abend!!
Viele Grüße,
kwon
garry
Posts: 3740
Joined: 22 Dec 2013, 12:50

Re: Skript zum verschieben ausgewählter dateien u. ordner

05 Nov 2018, 14:32

habe script oben mit Kommentar versehen, überflüssigen loop entfernt
mach ein Versuch mit wenig Ordner / Dateien
msgbox ( for TEST ) kann entfernt oder desaktiviert werden > ;-msgbox... ( und evtl. script verlassen mit ESC )
mehrere Linien desaktivieren :
/*
Linie-1
Linie-2
*/
würde für Testzwecken auch immer einbauen > esc::exitapp , so kann der script schnell beendet werden z.B. endlos loop etc ...
kwon
Posts: 21
Joined: 20 Jul 2016, 10:50

Re: Skript zum verschieben ausgewählter dateien u. ordner

06 Nov 2018, 12:25

Hallo Garry,
habe das Skript getestet und es läuft super!
Danke für die Kommentare!
Nun kann ich markierte Elemente im Windows-Explorer verschieben - vielen Dank...
Ich wünsche einen schönen Abend!
kwon

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 25 guests