o0Julia0o im Skript von Moombas steht:
; Setze den Hotkey Strg + G, da Strg+Alt+G bei mir nicht funktionierte
HotKeySet('^g', "CopyFilesHotkey")
----------------------------
Ansonsten: Wenn ich intensiver darüber nachdenken würde, würde ich es sehr wahrscheinlich anders machen 😅 . Doch du hast eine spezifischen Anforderung beschrieben, die nicht generisch sein muss (im Moment), daher folgt ein kleines Beispiel welches funktioniert.
Doch zunächst zu deinen Ansatz Moombas :
Ich habe ihn nur kurz getestet ohne zu analysieren und es klappt leider nicht. Es stimmt was mit FileCopy() nicht. Des Weiteren berücksichtigst du (glaube ich) nicht, dass die vorhandenen Dateien im Zielordner nicht überschrieben werden sollen. Wenn du allerdings die Flags dazu weg lässt, wird gar nichts kopiert. Teste gern mal ausführlich - gern auch mit dem Testdaten Skript von mir oben, wenn du magst.
💡 Das folgende sollte dem entsprechen o0Julia0o wie du es beschrieben hast:
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
HotKeySet('^!g', '_Copy')
HotKeySet('{ESC}', '_Exit')
While True
Sleep(100)
WEnd
Func _Exit()
Exit
EndFunc
Func _Copy()
; Assumption: You clicked ones the target folder
; by mouse (on Windows Explorer).
Send('^{c}')
Local Const $sSourceFolder = 'C:\tmp\source-folder\Info\#Im'
Local Const $aFolderMatch = StringRegExp($sSourceFolder, "([^\\]+)$", 1)
If @error Or Not IsArray($aFolderMatch) Then
ConsoleWrite('Oops! Handle this unexpected behavior.' & @CRLF)
Return
EndIf
Local Const $sFolder = $aFolderMatch[0]
Local $sTargetFolder = ClipGet()
If $sTargetFolder == '' Or StringRegExp($sTargetFolder, '[a-z|A-Z]:\\') == 0 Then
ConsoleWrite('Oops! Handle this unexpected behavior.' & @CRLF)
Return
EndIf
$sTargetFolder = $sTargetFolder & '\' & $sFolder
ConsoleWrite('Source: ' & $sSourceFolder & @CRLF)
ConsoleWrite('Target: ' & $sTargetFolder & @CRLF)
Run(StringFormat('robocopy "%s" "%s" /E /XO', $sSourceFolder, $sTargetFolder), '', @SW_HIDE)
ConsoleWrite('Done!' & @CRLF)
EndFunc
Alles anzeigen
Testing (reproduction steps):
- Führe das Testdaten-Skript (Ordner- und Dateistruktur erstellen) oben aus.
- Navigiere im Windows Explorer nach C:\tmp\target-folder\#Im\subfolder1.
- Bearbeite dort fileA.txt in dem du den "dummy content" einfach durch einen anderen Text ersetzt. Datei speichern.
- Navigiere im Windows Explorer nach C:\tmp\target-folder.
- Selektiere den Ordner mit einen Klick.
- Drücke Tastenkombi. STRG+ALT+G.
- Schaue dir den Ordner C:\tmp\target-folder\#Im genau an. Es sollten statt "3 Dateien, 2 Ordner" nun "9 Dateien, 2 Ordner" in den Ordnereigenschaften zu sehen sein.
- Schaue dir die bearbeitete Datei an, diese hat deinen neuen Text und wurde nicht überschrieben.
Ich habe bewusst nicht mit FileCopy() gearbeitet, da es in keiner meiner Konstellationen für genau das beschriebene Szenario funktioniert hat. Auch DirCopy() half nicht. Somit bin ich auf's gute alte "robocopy" was seit Windows Vista (glaube ich) Standard ist, ausgewichen.
Viele Grüße
Sven
----------------------------
Update1:
Es wird bewusst kein intensives error handling gemacht und auch keine UNC-Pfade berücksichtigt (kleiner lieber "wink" an AspirinJunkie 😚 😂), da ich davon ausgehe, dass einmalig im Windows Explorer auf den Zielordner geklickt wird und dann der HotKey getriggert wird. Daher meine Einschätzung das es nicht generisch bzw. robuster sein muss.
Update 2:
Das man das Ergebnis von robocopy auswerten und ggf. berücksichtigen sollte (Fehler beim kopieren), wäre ein sinnvolles TODO 🤝 .
