Ich habe eine AHK-Gui von Resease gefunden und an meine Bedürfnisse etwas abgeändert. Die von mir "RoboGui.ahk" genannte AHK-Gui kann 3 Dinge:
- sie kopiert ein Verzeichnis in ein anderes Verzeichnis
- sie spiegelt ein Verzeichnis in ein anderes Verzeichnis und
- sie kopiert ein Verzeichnis in ein anderes Verzeichnis und ersetzt das ursprüngliche Verzeichnis durch einen Symlink auf das Zielverzeichnis
Die Gui sieht, glaube ich, leider ein wenig unprofessionell aus, aber besser kann ich das eben leider nicht. Vorschläge und direkte Verbesserungen sind willkommen. Hier ist sie:
Code: Select all
; Zuletzt geändert am 7.1.2020
; In Anlehnung an Resease.
; vgl.: https://www.autohotkey.com/boards/viewtopic.php?t=39955
; vgl.: https://www.autohotkey.com/boards/viewtopic.php?f=10&t=71336
Original=%1%
NewFolder=%2%
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#SingleInstance Force
gui, font, s13, Arial
Gui, Color, C0C0C0
Gui, Add, Button, xm y+20 w100 gBr1,Source:
Gui, Add, Edit, x+20 w1000 vOriginal, %Original%
Gui, Add, Button, xm y+20 w100 gBr2,Target:
Gui, Add, Edit, x+20 w1000 vNewFolder, %NewFolder%
Gui, Add, Button, x400 y+30 w320 gOp1, Verzeichnis kopieren und Original behalten
Gui, Add, Button, y+10 w320 gOp2, Verzeichnis spiegeln und Original behalten
Gui, Add, Button, y+10 w320 gOp3, Link auf ein Verzeichnis erstellen
Gui, Show, , RoboGui
Return
GuiClose:
Gui, destroy
ExitApp
Br1:
Gui, Submit, NoHide
FileSelectFolder,Original, , , Source-Verzeichnis:`n(Das Verzeichnis mit den zu kopierenden Dateien; wird behalten oder verlinkt.)
GuiControl, ,Original, %Original%
Return
Br2:
Gui, Submit, NoHide
FileSelectFolder,NewFolder, , , Ziel-Verzeichnis:`n(Das Verzeichnis mit den kopierten Dateien des Startverzeichnisses.)
GuiControl, ,NewFolder, %NewFolder%
Return
Op1: ; Verzeichnis kopieren und Original behalten
Gui, Submit,NoHide
If (Original) And (NewFolder)
{
MsgBox,65,RoboGui, Kopiert ein Verzeichnis und behält das Original.`n`nVon: %Original%`nNach: %NewFolder%
IfMsgBox, OK
{
command1 = ROBOCOPY "%Original%" "%NewFolder%" /DCOPY:T /E /R:3 /W:15 /V /MT /TEE /ETA /LOG:"%A_Temp%\Robocopy.log"
;command1 = robocopy "%Original%" "%NewFolder%" /E /R:3 /W:15 /V /MT /MOVE /TEE /ETA /LOG:"%A_Temp%\Robocopy.log" ; Dieser Befehl löscht das Original
RunWait, *RunAs %comspec% /c %command1%, , Min
MsgBox,1, RoboGui, Vorgang abgeschlossen!`nLog öffnen?
IfMsgBox, Ok
{
RunLog()
ExitApp
}
Else
ExitApp
}
Else
Return
}
Else {
MsgBox, 16, RoboGui, Bitte füllen Sie beide Eingabefelder mit den Verzeichnissen aus!
Return
}
Return
Op2: ; Verzeichnis spiegeln und Original behalten
Gui, Submit, NoHide
If (Original) And (NewFolder)
{
MsgBox,65,RoboGui, Spiegelt ein Verzeichnis und behält das Original. `n`nVon: %Original% `nNach: %NewFolder%
IfMsgBox, Ok
{
command1 = ROBOCOPY "%Original%" "%NewFolder%" *.* /V /S /E /COPY:DATO /PURGE /MIR /NP /R:10 /W:30 /MT /DCOPY:T /LOG:"%A_Temp%\Robocopy.log"
;command1 = robocopy "%Original%" "%NewFolder%" /E /R:3 /W:15 /V /MT /TEE /ETA /LOG:"%NewFolder%\Log_Copied_files.txt"
RunWait, *RunAs %comspec% /c %command1%, , Min
MsgBox,1, RoboGui, Vorgang abgeschlossen!`nLog öffnen?
IfMsgBox, Ok
{
RunLog()
ExitApp
}
Else
ExitApp
}
Else
Return
}
Else {
MsgBox, 16, RoboGui, Bitte füllen Sie beide Eingabefelder mit den Verzeichnissen aus!
Return
}
Return
; Kopiert in ein neues Verzeichnis und ersetzt das Verzeichnis durch einen Link auf das neue Verzeichnis
Op3: ; Verzeichnis verlinken
Gui, Submit, NoHide
If (Original) And (NewFolder)
{
MsgBox,65,RoboGui, Es wird ein Link auf das Verzeichnis erstellt. `n`nVon: %Original% `nNach: %NewFolder%
IfMsgBox, Ok
{
command1 = ROBOCOPY "%Original%" "%NewFolder%" /E /R:3 /W:15 /V /MT /MOVE /TEE /ETA /DCOPY:T /LOG:"%A_Temp%\Robocopy.log" ; Kopiert in das neue Verzeichnis
command2 = mklink /D "%Original%" "%NewFolder%" ; Ersetzt das alte Verzeichnis durch den Link auf das neue Verzeichnis
RunWait, *RunAs %comspec% /c %command1% & %command2%, , Min
MsgBox,1, RoboGui, Vorgang abgeschlossen!`nLog öffnen?
IfMsgBox, Ok
{
RunLog()
ExitApp
}
Else
ExitApp
}
Else
Return
}
Else {
MsgBox, 16, RoboGui, Bitte füllen Sie beide Eingabefelder mit den Verzeichnissen aus!
Return
}
Return
;Öffnet und fokussiert die Log-Datei:
RunLog() {
Run, notepad.exe "%A_Temp%\Robocopy.log"
WinWait, Robocopy.log - Editor,,30
WinActivate, Robocopy.log - Editor
}