Backupprogramm mit Robocopy und AutoIT

  • Servus, ich habe momentan ein kleines Projekt am laufen. Undzwar soll es möglich sein eine automatische sicherung ca. 2 mal am Tag durchlaufen, die fragen soll was gesichert werden soll. Soweit kein Problem nur jetz bin ich dabei mögliche Fehler zu Konstruieren, beispielsweise jmd. hat keinen Zugang zum Netzlaufwerk (auf das die Dateien geschrieben werden), was für einen wert würde Robocopy da zurück geben, oder die Datei ist zu groß die gesichert werden soll.
    Bitte um Hilfe!

    Mein Script sieht bis lang so aus :)

    [autoit]


    #include <GUIConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    ; GUI Erstellen
    GuiCreate("Automatische Datensicherung", 410, 250, -1, -1, "", $WS_EX_TOOLWINDOW )
    GUISetIcon("mini_icon.exe", 0)

    [/autoit][autoit][/autoit][autoit]

    ; Logo Erstellen
    GuiCtrlCreatePic("Virus_laptop.jpg",10,20, 181,147)
    GuiCtrlCreateLabel("Sample pic", 75, 1, 53, 15)
    GuiCtrlSetColor(-1,0xffffff)

    [/autoit][autoit][/autoit][autoit]

    ;Computernamen Ausgeben
    GUICtrlCreateLabel("Ihr Computername lautet:", 195, 20)
    $font="Times New Roman"
    GuiCtrlCreateLabel("" & @ComputerName & "" , 195, 35)
    GUICtrlSetFont (-1,8, -1, -1, $font)

    [/autoit][autoit][/autoit][autoit]

    ;Buttons erstellen
    Opt("GUICoordMode",1)
    $Button_D= GUICtrlCreateButton("Durchsuchen",195, 50, 100, 20)
    $Button_R=GUICtrlCreateButton("Starten", 195, 140, 100, 30)
    $Button_C=GuiCtrlCreateButton("Schließen", 295, 140, 100, 30)

    [/autoit][autoit][/autoit][autoit]

    GUISetState ()
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Button_D
    $select=FileSelectFolder("Ordner Suchen", "", 2, 100, 100)
    Run($select)
    Dircreate("P:\Backups\"& @ComputerName&"")
    $Quelle =($select)
    $Ziel =("P:\Backups\"& @ComputerName&"")
    $Logfile =("P:\Backups\"& @ComputerName&"")
    $font="Times New Roman"
    GUICtrlCreateLabel("Ordner:", 195, 75)
    GUICtrlCreateLabel("" & $Quelle & "", 195, 90)
    GUICtrlSetFont (-1,8, -1, -1, $font)
    Case $msg = $Button_C
    Exit
    Case $msg = $Button_R
    $font="Times New Roman Kursiv"
    GUICtrlCreateLabel("Ihre Sicherung wurde Gestartet." & @CRLF & "Bitte warten sie auf die Rückmeldung des Programmes bevor Sie beenden.", 10, 170)
    GUICtrlSetFont (-1,9, -1, -1, $font)
    $rob = RunWait(@ComSpec & " /c "& "robocopy " & $Quelle & " " & $Ziel & " /COPY:DT /MIR /XO /XF *.avi *.mp3 *.jpg *.wav *.wma /R:10 /W:10 /V", "" ,@SW_HIDE)

    If $rob = 1 Then
    MsgBox(64, "Erfolgreich!", "Ihre Sicherung wurde Erfolgreich durchgeführt, klicken Sie auf 'OK' um dieses Fenster zu Schliessen.")
    EndIf
    If $rob = 0 Then
    MsgBox(16, "Fehlgeschlagen", "Ihre Sicherung ist Fehlgeschlagen, bitte überprüfen Sie ob Sie mit dem Netzwerk verbunden sind!.")
    EndIf
    EndSelect
    Wend

    [/autoit]
  • Normalerweise gibt ein Programm welches ohne Fehler durchgelaufen ist immer 0 zurück.
    Bei AutoIt ist Runwait etwas blöd implementiert da dort ein Fehlerhafter Durchlauf 0 zurückgibt, glücklicherweise gibt es da noch @error
    Folgender Code ist ungetestet:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; GUI Erstellen
    GuiCreate("Automatische Datensicherung", 410, 250, -1, -1, "", $WS_EX_TOOLWINDOW )
    GUISetIcon("mini_icon.exe", 0)

    [/autoit] [autoit][/autoit] [autoit]

    ; Logo Erstellen
    GuiCtrlCreatePic("Virus_laptop.jpg",10,20, 181,147)
    GuiCtrlCreateLabel("Sample pic", 75, 1, 53, 15)
    GuiCtrlSetColor(-1,0xffffff)

    [/autoit] [autoit][/autoit] [autoit]

    ;Computernamen Ausgeben
    GUICtrlCreateLabel("Ihr Computername lautet:", 195, 20)
    $font="Times New Roman"
    GuiCtrlCreateLabel("" & @ComputerName & "" , 195, 35)
    GUICtrlSetFont (-1,8, -1, -1, $font)

    [/autoit] [autoit][/autoit] [autoit]

    ;Buttons erstellen
    Opt("GUICoordMode",1)
    $Button_D= GUICtrlCreateButton("Durchsuchen",195, 50, 100, 20)
    $Button_R=GUICtrlCreateButton("Starten", 195, 140, 100, 30)
    $Button_C=GuiCtrlCreateButton("Schließen", 295, 140, 100, 30)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState ()
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Button_D
    $select=FileSelectFolder("Ordner Suchen", "", 2, 100, 100)
    Run($select)
    Dircreate("P:\Backups\"& @ComputerName&"")
    $Quelle =($select)
    $Ziel =("P:\Backups\"& @ComputerName&"")
    $Logfile =("P:\Backups\"& @ComputerName&"")
    $font="Times New Roman"
    GUICtrlCreateLabel("Ordner:", 195, 75)
    GUICtrlCreateLabel("" & $Quelle & "", 195, 90)
    GUICtrlSetFont (-1,8, -1, -1, $font)
    Case $msg = $Button_C
    Exit
    Case $msg = $Button_R
    $font="Times New Roman Kursiv"
    GUICtrlCreateLabel("Ihre Sicherung wurde Gestartet." & @CRLF & "Bitte warten sie auf die Rückmeldung des Programmes bevor Sie beenden.", 10, 170)
    GUICtrlSetFont (-1,9, -1, -1, $font)
    $rob = RunWait(@ComSpec & " /c "& "robocopy " & $Quelle & " " & $Ziel & " /COPY:DT /MIR /XO /XF *.avi *.mp3 *.jpg *.wav *.wma /R:10 /W:10 /V", "" ,@SW_HIDE)

    If @error Then
    MsgBox(16, "Fehlgeschlagen", "Ihre Sicherung ist Fehlgeschlagen, bitte überprüfen Sie ob Sie mit dem Netzwerk verbunden sind!.")
    Else
    If $rob == 0 Then
    MsgBox(64, "Erfolgreich!", "Ihre Sicherung wurde Erfolgreich durchgeführt, klicken Sie auf 'OK' um dieses Fenster zu Schliessen.")
    Else
    MsgBox(16, "Fehlgeschlagen", "Ihre Sicherung ist Fehlgeschlagen, bitte überprüfen Sie ob Sie mit dem Netzwerk verbunden sind!.")
    EndIf
    EndIf

    EndSelect
    Wend

    [/autoit]
  • Klappt soweit, nur wenn ich nun sage führe die Sicherung durch und die Dateien die kopiert werden sind in Quell und Zielverzeichniss gleich und unverändert gibt er mir ne 0 zurück.
    Zudem habe ich absolut keine Ahnung wie ich ne Automatisierung rein bekomme, die dich einmal beim Systemstart nach dem Ordner fragt den du sichern möchtest und das dann irgenwie in ner ini speichert und sich das merkt und danach nurnoch alle 2 std oder jede 1 std überprüft ob sich da was geändert hat....

    danke schonmal :>

  • Du erstellst einfach einen Autostarteintrag für dein Programm.
    Am Programmanfang fragst du dann mit "FileSelectFolder( )" nach dem Ordner,
    den Pfad speicherst du dann per "IniWrite()" und wenn du das dann aulesen möchtest benutzt du "IniRead()"

    Die Überprüfung nach einer bestimmten Zeit kannst du mit Date.au3 machen