RoboGui - Eine GUI für Robocopy

Veröffentliche deine funktionierenden Skripte und Funktionen

Moderator: jNizM

Johnny R
Posts: 348
Joined: 03 Oct 2013, 02:07

RoboGui - Eine GUI für Robocopy

05 Jan 2020, 14:44

Ich war heute mit Robocopy am Werkeln und mußte feststellen, dass die Microsoft Robocopy GUI schon aus A.D. 2006 stammt und älter ist als moderne Versionen von Robocopy selbst. Insbesondere sieht die (alte) GUI den neuen und für mich wichtigen Schalter /DCOPY noch nicht vor, der bewirkt, dass kopierte Verzeichnisse den ursprünglichen Zeitstempel behalten (/DCOPY:T).

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
}
Last edited by Johnny R on 07 Jan 2020, 12:30, edited 1 time in total.
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: RoboGui - Eine GUI für Robocopy

07 Jan 2020, 07:14

Moin,

gute Idee. Das mit dem Gui ist wohl Ansichtssache. Wie würdest Du Dir ein 'professionelleres' Layout vorstellen?

Eine Anmerkung noch zum Skript:

Code: Select all

Op1: ; Verzeichnis kopieren und Original löschen
{ ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   Gui, Submit,NoHide
   If (Original) And (NewFolder)
   {
      MsgBox,1,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.txt"
         ;command1 = robocopy "%Original%" "%NewFolder%" /E /R:3 /W:15 /V /MT /MOVE /TEE /ETA /LOG:"%A_Temp%\Robocopy.txt" ; 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
   }
} ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Man sieht das immer mal wieder, aber die äußeren Blockklammern {...} bewirken bestenfalls nichts. D.h., sie werden vom Interpreter 'geduldet', bleiben aber ohne Funktion. D.h. weiterhin, wenn Du irgendwo in der Subroutine ein Return/Exit vergisst, findet die Routine ihr Ende nicht und läuft nach Unten durch. Ich empfehle deshalb, die Klammern zu entfernen und die Routine mit einem Return abzuschließen.
Johnny R
Posts: 348
Joined: 03 Oct 2013, 02:07

Re: RoboGui - Eine GUI für Robocopy

07 Jan 2020, 08:28

@just me, Danke für Deinen Hinweis, den ich demnächst umsetzen werde. Ich hatte die Programmstruktur einfach unbesehen und ungeprüft von Resease übernommen. Unter einem 'professionelleren' Layout hatte ich mir das Layout des (veralteten) Microsoft-Tools Microsoft Robocopy GUI vorgestellt.

Danke für Dein Interesse!
User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: RoboGui - Eine GUI für Robocopy

07 Jan 2020, 08:49

MT Parameter würde ich durch die GUI veränderbar machen
Wenn du den PC in der Zeit des Jobs nicht benötigst, würde ich den Flag hochsetzen und wenn der PC doch benutzt wird, den Parameter runter setzen.
/MT [: N] Erstellt multithreadkopien mit N Threads. N muss eine ganze Zahl zwischen 1 und 128 sein. Der Standardwert für N ist 8.
Der /MT -Parameter kann nicht mit den Parametern /IPG und /EFSRAW verwendet werden.
Leiten Sie die Ausgabe mit der Option /Log für eine bessere Leistung um.
Hinweis: der/MT-Parameter gilt für Windows Server 2008 R2 und Windows 7.
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: RoboGui - Eine GUI für Robocopy

07 Jan 2020, 09:20

In der C't 1 ist gerade unter Tipps & Tricks etwas da zu geschrieben worden. "Das einzige in Windows integrierte Tool, das .. mehrere CPU-Kerne nutzen kann." Ich habe mal ausprobiert ob ich damit auf meinem Rechner (I7 6700K) größere Dateien schneller kopieren kann. Nimmt man da die Zahl logischen CPUs oder die Cores? 8 vs 4? Ich hab beides ausprobiert /MT:8 und /MT:4. Ohne Schalter wars genauso schnell wie mit dem Explorer. Mit wars sogar langsamer (..aus der Erinnerung).
User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: RoboGui - Eine GUI für Robocopy

07 Jan 2020, 09:30

Man benutzt den MT-Schalter eigentlich bei vielen kleinen Dateien. Da er sehr oft in lesen und schreiben wechselt.
Dadurch fängt er an mehrere Dateien vorzulesen und schreibt sie dann direkt hintereinander weg.
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: RoboGui - Eine GUI für Robocopy

07 Jan 2020, 09:48

Aaah OK. Danke. Da war mein Test natürlich unbrauchbar.
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: RoboGui - Eine GUI für Robocopy

07 Jan 2020, 11:41

Das 'unprofessionelle' Spar-Gui hat natürlich den Charme, dass die Buttons mit im Skript vordefinierten Kommandozeilenparametern verbunden sind, so dass man die Parameter nicht einmal kennen muss. Andererseits ist das so recht unflexibel. Ein Zwischending könnte eine an das Microsoft-GUI angelehnte Oberfläche mit in Dateien vordefinierten Parametersätzen sein, die man auswählen kann oder auch nicht. Mit dem Gui könnte ich Dir helfen. Es muss ja vielleicht nicht ganz so vielseitig wie das Original sein.
Johnny R
Posts: 348
Joined: 03 Oct 2013, 02:07

Re: RoboGui - Eine GUI für Robocopy

07 Jan 2020, 12:28

@just me, das wäre natürlich schön. Du hast schon Recht, dass man den "Charme" der einfachen Lösung beibehalten, aber doch ggf. mit einigen weiteren Optionen in speziellen Kommandozeilen (und einem Klassedesign) bereichern könnte. Ich bin gespannt...

Deinen obigen Hinweis habe ich übrigens umgesetzt und ganz oben im ersten Beitrag gespeichert.
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: RoboGui - Eine GUI für Robocopy

10 Jan 2020, 04:48

Moin @Johnny R,

ich muss mir z.Zt. einen neuen Rechner aufbauen und habe etwas Stress. Ich werde mich aber am Wochenende wieder melden. Du kannst Dir ja bis dahin mal überlegen, welche Tabs mit welchen Schaltern die Probeversion des neuen Gui enthalten sollte.

Bis dann!
Johnny R
Posts: 348
Joined: 03 Oct 2013, 02:07

Re: RoboGui - Eine GUI für Robocopy

10 Jan 2020, 06:37

@just me, man könnte an den Schalter /MT denken, der aber offenbar, wenn er nicht hilft, wohl aber auch nicht schadet. Insoweit sehe ich da keinen Vorteil einer Option. Optional sollte man aber ggf. wohl die Schalter /XC, /XN und /X0 machen, die geänderte/neuere/ältere Dateien ausschließen. Die (über die in den Programmzeilen des Scrpts enthaltenen hinaus) weiteren Schalter sind meiner Meinung für den regelmäßigen Normalbetrieb nach nicht so wesentlich, wobei ich mir da aber keine abschließende Meinung anmaßen will. Robocopy ist ja eine Wissenschaft für sich...
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: RoboGui - Eine GUI für Robocopy

13 Jan 2020, 10:57

Hallo @Johnny R,

Deine letzte Antwort habe ich so verstanden, dass Dir auch ein 'aufgehübschtes' schlichtes GUI genügt. Schau Dir doch mal diesen (noch recht funktionslosen) Entwurf an. Geht das in Deine Richtung?

Code: Select all

#NoEnv
LogFile := A_Temp . "\Robocopy.log"
Opts := [" /DCOPY:T /E /ETA /R:3 /TEE /V /W:15 "
       , " /COPY:DATO /DCOPY:T /E /MIR /NP /PURGE /R:10 /S /V /W:30 "
       , " /DCOPY:T /E /ETA /MOVE /R:3 /TEE /V /W:15 "]
MkLink := "mklink /D """ . Original . """" . NewFolder . """"
; --------------------------------------------------------------------------------------------------------------------------------
Gui, Main:New
Gui, Margin, 10, 10
Gui, Font, s10, MS Shell Dlg
Gui, Add, Tab3, vTab3, Pfade|Optionen
Gui, Tab, 1
Gui, Add, GroupBox, w800 r1 vGBS Section, Quellverzeichnis
Gui, Add, Edit, xp+10 yp+20 w740 vSEDT
GuiControlGet, E, Pos, SEDT
Gui, Add, Button, x+10 yp w30 hp vSBTN gSelectS, ...
Gui, Add, GroupBox, xs w800 r1 vGBT, Zielverzeichnis
Gui, Add, Edit, xp+10 yp+20 w740 vTEDT
Gui, Add, Button, x+10 yp w30 hp vTBTN gSelectT, ...
Gui, Tab, 2
Gui, Add, GroupBox, w800 r1 Section, Protokolldatei
Gui, Add, Checkbox, xp+10 yp+20 w80 h%EH% Checked vLOGCB, /LOG
Gui, Add, Edit, x+10 yp w650 hp vLOGEDT, %LogFile%
Gui, Add, Button, x+10 yp w30 hp vLOGBTN gSelectL, ...
Gui, Add, GroupBox, xs w800 r1, Multi-Threading
Gui, Add, Checkbox, xp+10 yp+20 h%EH% Checked vMTCB, /MT
Gui, Tab
Gui, Add, Radio, vRB gRB, Quellverzeichnis kopieren
Gui, Add, Radio, gRB, Quellverzeichnis spiegeln
Gui, Add, Radio, gRB, Quellverzeichnis verschieben und Link anlegen
Gui, Add, GroupBox, w830 r1 vGBC, Kommando
Gui, Add, Edit, xp+10 yp+20 w810 vCEDT ReadOnly
Gui, Show, , Simple RoboCopy GUI
Return
MainGuiClose:
ExitApp

SelectL:
SelectS:
SelectT:
Return

RB:
Gui, Submit, NoHide
Options := Opts[RB]
If (MTCB)
   Options .= "/MT "
If (LOGCB && LOGEDT)
   Options .= "/LOG:""" . LOGEDT """ "
GuiControl, , CEDT, %Options%
Return
Johnny R
Posts: 348
Joined: 03 Oct 2013, 02:07

Re: RoboGui - Eine GUI für Robocopy

15 Jan 2020, 23:04

@just me, genau so hätte ich mir eine hübsche Gui vorgestellt. Wenn Sie jetzt auch nicht mehr funktionslos ist, ist sie optimal. Was hältst Du von den Schaltern /XC, /XN und /X0?
Viele Grüße!
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: RoboGui - Eine GUI für Robocopy

16 Jan 2020, 03:46

Moin Johnny R,

die \X. Schalter kann ich noch einbauen. Sind Sie für alle drei Optionen relevant?
Johnny R
Posts: 348
Joined: 03 Oct 2013, 02:07

Re: RoboGui - Eine GUI für Robocopy

16 Jan 2020, 05:58

@just me, so, wie ich das sehe, sind die drei /X*-Schalter für alle drei Optionen relevant. Aber Robocopy ist ja bekanntlich eine Wissenschaft für sich...
Viele Grüße!
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: RoboGui - Eine GUI für Robocopy

19 Jan 2020, 11:53

Hallo Johnny,

hier kommt ein Zwischenschritt. Ich bin mit den FileSelectFile/Folder Anweisungen noch nicht zufrieden. Deshalb funktioniert die Auswahl der Logdatei noch nicht. Beim Testen habe ich das Skript immer direkt vor dem Aufruf von Robocopy abgebrochen. Du solltest das deshalb schon mal zuende testen.

Code: Select all

#NoEnv
; Standard LogDatei
LogFile := A_Temp . "\Robocopy.log"
; Meldungen
Msgs := ["Kopiert ein Verzeichnis und behält das Original.`n`n"
       , "Spiegelt ein Verzeichnis und behält das Original.`n`n"
       , "Es wird ein Link auf das Verzeichnis erstellt.`n`n"]
; Optionen
Opts := [" /DCOPY:T /E /ETA /R:3 /TEE /V /W:15 "
       , " /COPY:DATO /DCOPY:T /E /MIR /NP /PURGE /R:10 /S /V /W:30 "
       , " /DCOPY:T /E /ETA /MOVE /R:3 /TEE /V /W:15 "]
; Variablen initialisieren
Options := ""
SourceFolder := ""
TargetFolder := ""
; --------------------------------------------------------------------------------------------------------------------------------
Gui, Main:New
Gui, Margin, 10, 10
Gui, Font, s10, MS Shell Dlg
Gui, Add, Tab3, vTab3, Pfade|Optionen
Gui, Tab, 1    ; -----------------------------------------------------------------------------------------------------------------
Gui, Add, GroupBox, w800 r1 vGBS Section, Quellverzeichnis
Gui, Add, Edit, xp+10 yp+20 w740 vSEDT gOptChanged
GuiControlGet, E, Pos, SEDT
Gui, Add, Button, x+10 yp w30 hp vSBTN gSelectS, ...
Gui, Add, GroupBox, xs w800 r1 vGBT, Zielverzeichnis
Gui, Add, Edit, xp+10 yp+20 w740 vTEDT gOptChanged
Gui, Add, Button, x+10 yp w30 hp vTBTN gSelectT, ...
Gui, Tab, 2    ; -----------------------------------------------------------------------------------------------------------------
Gui, Add, GroupBox, w800 r1 Section, Protokolldatei
Gui, Add, Checkbox, xp+10 yp+20 w80 h%EH% Checked vLOGCB gOptChanged, /LOG
Gui, Add, Edit, x+10 yp w650 hp vLOGEDT gOptChanged, %LogFile%
Gui, Add, Button, x+10 yp w30 hp vLOGBTN gSelectL, ...
Gui, Add, GroupBox, xs w800 r1, Multi-Threading
Gui, Add, Checkbox, xp+10 yp+20 h%EH% Checked vMTCB gOptChanged, /MT
Gui, Add, GroupBox, xs w800 r1, Dateien ausschließen
Gui, Add, Checkbox, xp+10 yp+20 h%EH% vXCCB gOptChanged, /XC (geänderte Dateien)
Gui, Add, Checkbox, x+10 yp hp vXNCB gOptChanged, /XN (neuere Dateien)
Gui, Add, Checkbox, x+10 yp hp vXOCB gOptChanged, /XO (ältere Dateien)
Gui, Tab       ; -----------------------------------------------------------------------------------------------------------------
Gui, Add, Radio, vRB gOptChanged, Quellverzeichnis kopieren
Gui, Add, Radio, gOptChanged, Quellverzeichnis spiegeln
Gui, Add, Radio, gOptChanged, Quellverzeichnis verschieben und Link anlegen
Gui, Add, GroupBox, w830 r1 vGBC Section, Kommando
Gui, Add, Text, xp+10 yp+20 h%EH% w810 vCTXT +Border +0x2200 ; SS_EDITCONTROL (0x2000) | SS_CENTERIMAGE (0x0200)
Gui, Add, Button, xs w200 +Disabled gExecute vExecuteBTN, Ausführen
Gui, Add, Button, x+115 yp wp gApply vApplyBTN, Übernehmen
Gui, Add, Button, x+115 yp wp gMainGuiClose, Beenden
Gui, Show, , Simple RoboCopy GUI
Return
; --------------------------------------------------------------------------------------------------------------------------------
MainGuiClose:
   Gui, Destroy
ExitApp
; --------------------------------------------------------------------------------------------------------------------------------
OptChanged:
   Gui, Submit, NoHide
   Options := ""
   SourceFolder := ""
   TargetFolder := ""
   GuiControl, , CTXT
   GuiControl, Disable, ExecuteBTN
   GuiControl, Enable, ApplyBTN
Return
; --------------------------------------------------------------------------------------------------------------------------------
SelectL:
   Gui, +OwnDialogs
   FileSelectFile, LogFile, 2, , Log-Datei auswählen!, Textdateien (*.log; *.txt)
Return
; --------------------------------------------------------------------------------------------------------------------------------
SelectS:
   Gui, +OwnDialogs
   Source := ""
   FileSelectFolder, Source, , 2
                   , Quellverzeichnis:`n(Das Verzeichnis mit den zu kopierenden Dateien wird behalten oder verlinkt.)
   If FileExist(Source) {
      GuiControl, , SEDT, %Source%
      GoSub, OptChanged
   }
Return
; --------------------------------------------------------------------------------------------------------------------------------
SelectT:
   Gui, +OwnDialogs
   Target := ""
   FileSelectFolder, Target, , 1
                   , Zielverzeichnis:`n(Das Verzeichnis mit den kopierten Dateien des Quellverzeichnisses.)
   If FileExist(Target) {
      GuiControl, , TEDT, %Target%
      GoSub, OptChanged
   }
Return
; --------------------------------------------------------------------------------------------------------------------------------
Apply:
   Gui, +OwnDialogs
   Gui, Submit, NoHide
   SourceFolder := Trim(SEDT)
   If (SourceFolder = "") || !InStr(FileExist(SourceFolder), "D") {
      MsgBox, 16, Fehler!, Das Quellverzeichnis ist ungültig!
      GuiControl, Focus, SEDT
      Return
   }
   TargetFolder := Trim(TEDT)
   If (TargetFolder = "") || !InStr(FileExist(TargetFolder), "D") {
      MsgBox, 16, Fehler!, Das Zielverzeichnis ist ungültig!
      GuiControl, Focus, TEDT
      Return
   }
   If !(RB) {
      MsgBox, 16, Fehler!, Bitte zuerst eine Verarbeitungsart auswählen!
      GuiControl, Focus, RB
      Return
   }
   Options := Opts[RB]
   If (MTCB)
      Options .= "/MT "
   If (XCCB)
      Options .= "/XC "
   If (XNCB)
      Options .= "/XN "
   If (XOCB)
      Options .= "/XO "
   If (LOGCB && LOGEDT)
      Options .= "/LOG:""" . LOGEDT """ "
   GuiControl, , CTXT, %Options%
   GuiControl, Disable, ApplyBTN
   GuiControl, Enable, ExecuteBTN
Return
; --------------------------------------------------------------------------------------------------------------------------------
Execute:
   Gui, +OwnDialogs
   Msg := Msgs[RB]
   Msg .= "Quelle:`t" . SourceFolder . "`nZiel:`t" . TargetFolder
   MsgBox, 65, RoboGUI, %Msg%
   IfMsgBox, Cancel
      Return
   Command := "ROBOCOPY """ . SourceFolder . " """ . TargetFolder . """" . Options
   If (RB = 3)
      Command .= " & mklink /D """ . SourceFolder . """ """ . TargetFolder . """"
   RunWait, *RunAs %A_ComSpec% /c %Command%, , Min
   MsgBox, 1, RoboGUI, Vorgang mit Exitcode %ErrorLevel% abgeschlossen!`nLog öffnen?
   IfMsgBox, OK
   {
      Run, Notepad.exe "%LogEDT%", , , NPPID
      WinWait, ahk_pid %NPPID%, , 30
      If !(ErrorLevel)
         WinActivate ; last found window
   }
   GoSub, MainGuiClose
Return
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

Re: RoboGui - Eine GUI für Robocopy

05 Jun 2020, 03:54

@just me

Hallo,

erst einmal vielen Dank für Deine tolle Arbeit.
Ich finde die GUI funktional und ausreichend.
Allerdings gibt es leider ein Umlautproblem, ist das noch behebbar?
----------------------------------------------------------------------------------
umlaut-problem-robocopy-gui.jpg
umlaut-problem-robocopy-gui.jpg (72.84 KiB) Viewed 5216 times
Greetings Best-Code-in-Use
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: RoboGui - Eine GUI für Robocopy

05 Jun 2020, 04:11

Moin,

ja, man muss das Skript im Format UTF-8 mit BOM speichern. ;)
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

Re: RoboGui - Eine GUI für Robocopy

05 Jun 2020, 04:19

Okay, ja funktioniert... Vielen Dank für den Tipp!
Greetings Best-Code-in-Use
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: RoboGui - Eine GUI für Robocopy

05 Jun 2020, 04:43

Kompliment für das aufgeräumte GUI! Für den gezeigten Tab möchte ich vorschlagen die Radios in eine (gedachte) Vertikale mit den CheckBoxen zu setzen ... :)

PS. wie/womit wurde der Screenshot mit den Pfeilen gemacht?

Return to “Skripte und Funktionen”

Who is online

Users browsing this forum: No registered users and 27 guests