Fragen zur Datensicherung

  • Hi,
    ich bin dabei ein Script zu Datensicherung zu erstellen.
    Es klappt so weit ganz gut.

    Nun will ich noch überprüfen, ob die Quellordner auch existieren

    Hier mein Script

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>

    ;Datumsoptionen
    $iWeekday = _DateToDayOfWeek(@YEAR, @MON, @MDAY)
    $sNewDate = _DateAdd('d', 0, _NowCalcDate())
    $sNewDate = StringReplace($sNewDate, "/", ".")

    ;Quellpfad <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    $Quell_LW = "E:\"
    $Quell_Pf_01 = $Quell_LW & "\Adressbuch"
    $Quell_Pf_02 = $Quell_LW & "\Favoriten"
    $Quell_Pf_03 = $Quell_LW & "\E-Mails"

    ;Zielpfad <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    $Ziel_LW = "V:\"
    $Ziel_Pf = $Ziel_LW & "Sicherung Internet\" & $sNewDate
    $Ziel_Pf_01 = $Ziel_Pf & "\Adressbuch"
    $Ziel_Pf_02 = $Ziel_Pf & "\Favoriten"
    $Ziel_Pf_03 = $Ziel_Pf & "\E-Mails"

    _check()

    Func _check()
    ;Ziellaufwerk vorhanden?
    If FileExists($Ziel_LW) Then

    ;Quellverzeichnisse vorhanden?
    If NOT FileExists($Quell_Pf_01) Then
    $Q1 = Msgbox(0, "TEST", "Quellpfad " & $Quell_Pf_01 & " existiert nicht. Bitte überprüfen")
    Else
    EndIf

    If $Q1 = 1 Then

    If NOT FileExists($Quell_Pf_02) Then
    $Q2 = Msgbox(0, "TEST", "Quellpfad " & $Quell_Pf_02 & " existiert nicht. Bitte überprüfen")
    Else
    Endif
    Else
    EndIf

    If $Q2 = 1 Then

    If NOT FileExists($Quell_Pf_03) Then
    $Q3 = Msgbox(0, "TEST", "Quellpfad " & $Quell_Pf_03 & " existiert nicht. Bitte überprüfen")
    Else
    Endif

    Else
    EndIf

    If $Q3 = 1 Then
    EXIT
    Else
    Endif

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

    ;Script geht noch weiter, ist aber nicht von Bedeutung

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


    Ich will alle drei Quellordner (ab Zeile 27) überprüfen.
    Wenn sie nicht da sind soll eine msgbox kommen.
    Dann den nächsten Ordner überprüfen
    Wie mach ich das?

  • Hm,

    habs mal probiert, kommt aber ne Fehlermeldung

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    #include <Array.au3>


    ;Datumsoptionen
    $iWeekday = _DateToDayOfWeek(@YEAR, @MON, @MDAY)
    $sNewDate = _DateAdd('d', 0, _NowCalcDate())
    $sNewDate = StringReplace($sNewDate, "/", ".")

    ;Quellpfad <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    $Quell_LW = "E:\"
    $Quell_Pf_01 = $Quell_LW & "\Adressbuch"
    $Quell_Pf_02 = $Quell_LW & "\Favoriten1"
    $Quell_Pf_03 = $Quell_LW & "\E-Mails"

    ;Zielpfad <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    $Ziel_LW = "V:\"
    $Ziel_Pf = $Ziel_LW & "Sicherung Internet\" & $sNewDate
    $Ziel_Pf_01 = $Ziel_Pf & "\Adressbuch"
    $Ziel_Pf_02 = $Ziel_Pf & "\Favoriten"
    $Ziel_Pf_03 = $Ziel_Pf & "\E-Mails"

    _check()

    Func _check()
    ;Ziellaufwerk vorhanden?
    If FileExists($Ziel_LW) Then

    ;Quellverzeichnisse vorhanden?


    For $i = 1 to 3
    If Not FileExists($Quell_Pf_0[$i]) Then MsgBox(0, "", $Quell_Pf_0[$i] & " existiert nicht")
    Next

    [/autoit]

    Brauche ich das

    [autoit]

    #include <Array.au3>

    [/autoit]

    ?

    Was mache ich da falsch

    • Offizieller Beitrag

    Da waren einige Schnitzer drin ;)
    Du hattest das Array nicht deklariert und weder If... noch Func... beendet.


    EDIT
    Hab dir das Beenden nach Prüfung aller Pfade eingefügt.


    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    #include <Array.au3>
    Dim $arQuell_Pf[3] , $goOut = 0

    ;Datumsoptionen
    $iWeekday = _DateToDayOfWeek(@YEAR, @MON, @MDAY)
    $sNewDate = _DateAdd('d', 0, _NowCalcDate())
    $sNewDate = StringReplace($sNewDate, "/", ".")

    ;Quellpfad <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    $Quell_LW = "E:\"
    $arQuell_Pf[0] = $Quell_LW & "\Adressbuch"
    $arQuell_Pf[1] = $Quell_LW & "\Favoriten1"
    $arQuell_Pf[2] = $Quell_LW & "\E-Mails"

    ;Zielpfad <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    $Ziel_LW = "V:\"
    $Ziel_Pf = $Ziel_LW & "Sicherung Internet\" & $sNewDate
    $Ziel_Pf_01 = $Ziel_Pf & "\Adressbuch"
    $Ziel_Pf_02 = $Ziel_Pf & "\Favoriten"
    $Ziel_Pf_03 = $Ziel_Pf & "\E-Mails"

    _check()

    Func _check()
    ;Ziellaufwerk vorhanden?
    If FileExists($Ziel_LW) Then
    ;Quellverzeichnisse vorhanden?
    $goOut = 0
    For $i = 0 to 2 ; Array beginnt mit Index 0 für ersten Wert
    If Not FileExists($arQuell_Pf[$i]) Then
    MsgBox(0, "", $arQuell_Pf[$i] & " existiert nicht")
    $goOut = 1
    EndIf
    Next
    EndIf
    If $goOut = 1 Then Exit
    EndFunc

    [/autoit]
  • Danke, es funktioniert jetzt.

    Was genau sagt diese Zeile

    [autoit]

    Dim $Quell_Pf_0[3]

    [/autoit]

    Was bedeutet die 3?
    3 Pfade zum überprüfen?


    Brauche ich diese Zeile?

    [autoit]

    #include <Array.au3>

    [/autoit]

    Danke :party4:

  • deklariert/dimensioniert ein Array mit 3 Feldern also ein Variable in der man 3 Werte Speichern kann

    in der array.au3 stehen die Funktionen, die im Skript verwendet werden

    Einmal editiert, zuletzt von leviathan (16. April 2007 um 20:25)

  • Dim declariert die Varialble danach .
    Die 3 ist die Zeilenzahl des Arrays...was du dir wie eine Tabelle vorstellen kannst


    Edit

    -.- zu spät...


    das include brauchst du weil du ja ein array benutzt

    Waluev

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

    Einmal editiert, zuletzt von Waluev (16. April 2007 um 20:25)

  • Zitat

    Original von Waluev
    Die 3 ist die Zeilenzahl des Arrays...was du dir wie eine Tabelle vorstellen kannst
    Waluev

    Also wenn ich 5 Ordner überprüfen will muß die Zahl 5 heißen?
    Oder würde auch 8 z. B. gehen?


    EDIT:
    Hab noch was vergessen, wie kann ich es machen, dass er das Script beenden soll, wenn ein Quellpfad fehlt?

  • einfach dann nach der Bedingung bzw MsgBox "AND EXIT"

    [autoit]

    If Not FileExists($arQuell_Pf[$i]) Then MsgBox(0, "", $arQuell_Pf[$i] & " existiert nicht") AND Exit

    [/autoit]

    Einmal editiert, zuletzt von leviathan (16. April 2007 um 20:32)

  • hm, es wäre aber gut, wenn zuerst alle MsgBox durchlaufen werden und dann das Script beendet wird :rolleyes:

    noch was:

    Ich habe folgendes dnoch drin

    [autoit]

    ;Größe Speicherplatz Vergleich <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    If ($Quell_Pf_Gr_Ru_[1]+$Quell_Pf_Gr_Ru_[2]+$Quell_Pf_Gr_Ru_[3]) > $Ziel_LW_Gr Then
    Msgbox(0,"Zu wenig Speicherplatz vorhanden","Geben Sie mindestens " & $Quell_Pf_Gr_Ru_[1] + $Quell_Pf_Gr_Ru_[2] + $Quell_Pf_Gr_Ru_[3] - $Ziel_LW_Gr_Ru & " MB Speicherplatz auf " & $Ziel_LW & " frei")
    Exit

    Else

    [/autoit]

    Kann ich es bei "$Quell_Pf_Gr_Ru_[1]" auch mit [$i] statt [1] + [2] + [3]?

  • naja für das erst am Ende würde ich einfach noch eine Variable nehmen

    nach der MsgBox $error=1

    und dann nach der Schleife noch

    If $error = 1 Then Exit

    edit:

    mh Bugfix klaut meine überaus tollen Ideen

    Einmal editiert, zuletzt von leviathan (16. April 2007 um 21:56)

  • poste jetzt mal mein ganzes Script

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    #include <Array.au3>
    Dim $Quell_Pf_[4], $goOut = 0
    Dim $Ziel_Pf_[4]
    Dim $Quell_Pf_Gr_[4]
    Dim $Quell_Pf_Gr_Ru_[4]

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

    HotKeySet("{ESC}", "Beenden")
    Func Beenden()
    EXIT
    EndFunc

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

    ;Datumsoptionen
    $iWeekday = _DateToDayOfWeek(@YEAR, @MON, @MDAY)
    $sNewDate = _DateAdd('d', 0, _NowCalcDate())
    $sNewDate = StringReplace($sNewDate, "/", ".")

    ;Quellpfad <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    $Quell_LW = "E:\"
    $Quell_Pf_[1] = $Quell_LW & "\Adressbuch"
    $Quell_Pf_[2] = $Quell_LW & "\Favoriten"
    $Quell_Pf_[3] = $Quell_LW & "\E-Mails"

    ;Zielpfad <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    $Ziel_LW = "V:\"
    $Ziel_Pf = $Ziel_LW & "Sicherung Internet\" & $sNewDate
    $Ziel_Pf_[1] = $Ziel_Pf & "\Adressbuch"
    $Ziel_Pf_[2] = $Ziel_Pf & "\Favoriten"
    $Ziel_Pf_[3] = $Ziel_Pf & "\E-Mails"

    _check()

    Func _check()
    ;Ziellaufwerk vorhanden?
    If FileExists($Ziel_LW) Then

    ;Quellverzeichnisse vorhanden?
    For $i = 1 to 3
    If Not FileExists($Quell_Pf_[$i]) Then
    MsgBox(0, "", $Quell_Pf_[$i] & " existiert nicht")
    $goOut = 1
    EndIf
    Next
    If $goOut = 1 Then Exit

    ;Größe Speicherplatz? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    For $i = 1 to 3
    $Quell_Pf_Gr_[$i] = DirGetSize($Quell_Pf_[$i],1)
    Next

    $Ziel_LW_Gr = DriveSpaceFree($Ziel_LW)

    ;Größe Speicherplatz gerundet? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    For $i = 1 to 3
    $Quell_Pf_Gr_Ru_[$i] = Round($Quell_Pf_Gr_[$i], 0 / 1024 / 1024)
    Next

    $Ziel_LW_Gr_Ru = Round($Ziel_LW_Gr, 0)

    ;Größe Speicherplatz Vergleich <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    $tmp = 0
    For $i = 1 To 3
    $tmp += $Quell_Pf_Gr_Ru_[$i]
    Next
    If $tmp > $Ziel_LW_Gr Then
    Msgbox(0,"Zu wenig Speicherplatz vorhanden","Geben Sie mindestens " & $tmp - $Ziel_LW_Gr_Ru & " MB Speicherplatz auf " & $Ziel_LW & " frei")
    Exit

    Else
    ;Info-Fenster einblenden
    SplashTextOn("Datensicherung Internet", "Sicherung läuft - Bitte warten", 250, 30, -1, -1, 0)
    ;zu kopierende Ordner <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    For $i = 1 to 3
    DirCopy($Quell_Pf_[$i], $Ziel_Pf_[$i], 1)
    Next
    EndIf

    Else
    $ret = MsgBox(5 + 64, "Datensicherung Internet", "Ziellaufwerk " & $Ziel_LW & " nicht vorhanden")
    If $ret = 4 Then
    _check()
    Else
    EndIf
    EndIf

    EndFunc ;==>_check

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

    ;Info-Fenster ausblenden
    SplashOff()

    [/autoit]

    EDIT: Beitrag geändert
    Leider klappt es nicht, er ignoriert die Größe der Quellordner

    Stimmt der Aufruf des HotKeySet?

  • Danke, habs gesehen.
    Jetzt bleibt nur noch zu klären, ob ich das ganze einfacher schreiben kann :teufel:

    Würde gerne noch das Script manuell beenden können

    [autoit]

    HotKeySet("{ESC}", "Beenden")
    Func Beenden()
    EXIT
    EndFunc

    [/autoit]

    Wenn das script jedoch schon am kopieren ist geht es nicht.
    Wenn ich vorher (vor dem Kopieren) ein Sleep einbaue, klappt es dagegen.

    • Offizieller Beitrag

    Einfacher nicht unbedingt, aber vielleicht ist es übersichtlicher. Schau es dir an:

    [autoit]

    $tmp = 0
    For $i = 1 To 3
    $tmp += $Quell_Pf_Gr_Ru_[$i]
    Next
    If $tmp > $Ziel_LW_Gr Then
    Msgbox(0,"Zu wenig Speicherplatz vorhanden","Geben Sie mindestens " & $tmp - $Ziel_LW_Gr_Ru & _
    " MB Speicherplatz auf " & $Ziel_LW & " frei")
    Exit

    [/autoit]
    • Offizieller Beitrag
    Zitat

    EDIT: Beitrag geändert
    Leider klappt es nicht, er ignoriert die Größe der Quellordner

    [autoit]

    ;Größe Speicherplatz? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    For $i = 1 to 3
    $Quell_Pf_Gr_[$i] = DirGetSize($Quell_Pf_[$i],1)
    Next

    [/autoit]

    Du rufst auf: DirGetSize($Quell_Pf_[$i],1)
    somit bekommst du ein Array mit erweiterten Angaben (Größe, Anz. Dateien, Anz. Ordner) zurück. Die Verwendung dieser Daten müsste so aussehen:

    [autoit]

    For $i = 1 to 3
    $var = DirGetSize($Quell_Pf_[$i],1)
    $Quell_Pf_Gr_[$i] = $var[0] ; [0]-Größe, [1]-Anz. Files, [2]-Anz. Dir
    Next

    [/autoit]


    Da du nur die Größe verwendest, Aufruf ohne Flag:

    [autoit]

    For $i = 1 to 3
    $Quell_Pf_Gr_[$i] = DirGetSize($Quell_Pf_[$i])
    Next

    [/autoit]
    Zitat

    Stimmt der Aufruf des HotKeySet?

    Ja, ist korrekt.


    EDIT

    Ich hab deine Version mal etwas optimiert. :) Aber nicht zu sehr, sollst dich ja noch zurechtfinden.

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    Dim $Quell_Pf_[4][2] ; [n][0] = Pfad; [n][1] = gerundete Größe
    Dim $goOut = 0
    Dim $Ziel_Pf_[4]

    HotKeySet("{ESC}", "Beenden")
    Func Beenden()
    EXIT
    EndFunc

    ;Datumsoptionen
    $iWeekday = _DateToDayOfWeek(@YEAR, @MON, @MDAY)
    $sNewDate = _DateAdd('d', 0, _NowCalcDate())
    $sNewDate = StringReplace($sNewDate, "/", ".")

    ;Quellpfad <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    $Quell_LW = "E:\"
    $Quell_Pf_[1][0] = $Quell_LW & "\Adressbuch"
    $Quell_Pf_[2][0] = $Quell_LW & "\Favoriten"
    $Quell_Pf_[3][0] = $Quell_LW & "\E-Mails"

    ;Zielpfad <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    $Ziel_LW = "V:\"
    $Ziel_Pf = $Ziel_LW & "Sicherung Internet\" & $sNewDate
    $Ziel_Pf_[1] = $Ziel_Pf & "\Adressbuch"
    $Ziel_Pf_[2] = $Ziel_Pf & "\Favoriten"
    $Ziel_Pf_[3] = $Ziel_Pf & "\E-Mails"

    _check()

    Func _check()
    ;Ziellaufwerk vorhanden?
    If FileExists($Ziel_LW) Then
    $tmp = 0
    For $i = 1 to 3 ;Quellverzeichnisse vorhanden?
    If Not FileExists($Quell_Pf_[$i][0]) Then
    MsgBox(0, "", $Quell_Pf_[$i][0] & " existiert nicht")
    $goOut = 1
    Else ; Speicherplatz ermitteln und runden
    $Quell_Pf_[$i][1] = Round(DirGetSize($Quell_Pf_[$i][0]), 0 /1024 /1024)
    $tmp += $Quell_Pf_[$i][1] ; Größe zusammenrechnen
    EndIf
    Next
    If $goOut = 1 Then Exit
    $Ziel_LW_Gr_Ru = Round(DriveSpaceFree($Ziel_LW), 0)
    ;Größe Speicherplatz Vergleich <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    If $tmp > $Ziel_LW_Gr_Ru Then
    Msgbox(0,"Zu wenig Speicherplatz vorhanden","Geben Sie mindestens " & $tmp - $Ziel_LW_Gr_Ru & " MB Speicherplatz auf " & $Ziel_LW & " frei")
    Exit
    Else
    ;Info-Fenster einblenden
    SplashTextOn("Datensicherung Internet", "Sicherung läuft - Bitte warten", 250, 30, -1, -1, 0)
    ;zu kopierende Ordner <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< evtl. ändern >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    For $i = 1 to 3
    DirCopy($Quell_Pf_[$i][0], $Ziel_Pf_[$i], 1)
    Next
    EndIf
    Else
    $ret = MsgBox(5 + 64, "Datensicherung Internet", "Ziellaufwerk " & $Ziel_LW & " nicht vorhanden")
    If $ret = 4 Then
    _check()
    Else
    EndIf
    EndIf
    EndFunc ;==>_check

    ;Info-Fenster ausblenden
    SplashOff()

    [/autoit]
  • Danke, hat soweit nun funktioniert :klatschen:

    Leider geht es nicht, dass ich das Script während dem sichern beenden kann

    [autoit]

    HotKeySet("{ESC}", "Beenden")
    Func Beenden()
    EXIT
    EndFunc

    [/autoit]
  • Hi,

    das könntest du mit AdlibEnable und _IsPressed lösen.
    Du erstellst eine Funktion die überprüft ob Escape gedrückt wird und die rufst du alle 100 ms mit AdlibEnable auf/lässt sie von AdlibEnable aufrufen.

    Mfg

  • hm,
    es will einfach nicht

    so siehts aus

    [autoit]

    AdlibEnable("beenden", 100)

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

    Func beenden()
    If _IsPressed("2B") Then
    EXIT
    EndFunc

    [/autoit]

    Es soll die Taste "ESC" gedrückt werden und dann das Script beendet werden.
    Oder geht dies nicht?

  • Das ganze klappt NICHT!
    Solange der kopiert läuft die Funktion "dircopy()" und solange kannst du das script nicht beenden!
    hab i-wo nen Beitrag vor kurzem gemacht, indem ich einen Ordner kopiere indem ich alle Dateien daraus raussuche und dann einzeln kopiere...dadurch kann man wenigstens nach jeder Datei abbrechen...

    PS: include <array.au3> brauchste nicht...du verwendest ja keine Arrayfunktionen

    PS2: Alle arrays sind nullbasiert...Also machs so:

    [autoit]


    Dim $array[3]
    For $i=0 to 2
    $array[$i]=1
    next

    [/autoit]


    Das macht jetzt erst mal nichts tolles aber eben als Beispiel...sollteste dir aneignen das von ANfang an so zu machen.
    ist bei größeren scripten dann wichtig