Skripte Sichern

  • Hi,

    Das hier wurde aus diesem hier :D

    Da trotz mehreren Festplatten durch Fehler von Windows (meist ausgelöst durch mich :whistling: ) meine ganzen Skripte bereits mehrmals gelöscht wurden, hatte ich die Idee für dieses Skript.

    Die Funktionen bestehen:
    - Im sichern meiner Skripte (wer hätte das gedacht) :D
    - Dabei sichert es nur die für mich relevanten Daten.
    - Die Skripte werden als Zip oder sequenzielle Tar komprimiert auf einen FTP Server hochgeladen werden.
    - Dateien die älter als x Tage sind werden automatisch gelöscht.
    - Die Zeit bis zum ersten Backup und den darauf folgenden kann eingestellt werden


    Da ich dieses Skript eigentlich nur für mich gecoded habe, stelle es hauptsächlich hier rein, um Feedback und vielleicht Verbesserungsvorschläge zu bekommen (Kürzungen,Optimierungen, etc.)

    Sollte es dennoch jemand brauchen, kann er es gerne benutzen. Mann muss dann ggf. noch die Pfade anpassen.

    Hier nun das Skript:

    Spoiler anzeigen
    [autoit]

    ; Copyright by Orion (autoit.de)

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

    ; THX [user='66']BugFix[/user] (_GetFilesFolder_Rekursiv.au3) & UEZ (_Bese64String)

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

    #include <_GetFilesFolder_Rekursiv.au3>
    #include <FTPEx.au3>
    #include <misc.au3>
    #include <Date.au3>
    #include <Crypt.au3>
    #include <7zip.au3>

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

    _Singleton(@ScriptName) ;Nur eine Instanz des Skripts erlauben
    OnAutoItExitRegister("_Exit") ;Wenn Skript beendet, dann führe die Function _Exit() aus

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

    #region - Konstanten
    Global Const $sOrdner = "Skripte" ;Ordnername
    Global Const $pPath = @DesktopDir & "\" & $sOrdner ;Pfad zum Ordner
    Global Const $sServername = "***" ;Addresse des FTP Server
    Global Const $sBenutzername = "***" ;Benutzername für den FTP Server
    Global Const $sPasswort = "***" ;Passwort für den FTP Server
    Global Const $iZeit = 30 ;Backupinterval in Minuten
    Global Const $iStartzeit = 30 ;Zeit bis zum ersten Backup in Minuten
    Global Const $iTage = 30 ;Tage bis alte Skripte gelöscht werden
    Global Const $bTar = False ;Tar anstatt Zip komprimierung verwenden (default Zip)
    #endregion - Konstanten

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

    Global $sDateiendung = ".zip"
    If $bTar Then $sDateiendung = ".tar"

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

    Opt("TrayIconHide", 1) ;Icon verstecken
    Sleep(($iStartzeit * 60 * 1000)) ;Zeit bis zum ersten Backup in Minuten
    _base64string() ;7-Zip aus dem Binärstrang nach @TempDir speichern

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

    While 1
    Opt("TrayIconHide", 0)
    _Save()
    Opt("TrayIconHide", 1)
    Sleep(($iZeit * 60 * 1000)) ;Backupinterval in Minuten
    WEnd

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

    Func _Save()
    TrayTip("Saver", $sOrdner & " werden komprimiert & hochgeladen...", 10, 1)
    Sleep(2000)
    TrayTip("", "", 0)
    _TmpCreate()
    If _SaveToInet() = 0 Then
    TrayTip("Error", "Abgleich mit dem Server Fehlgeschlagen!", 30, 3)
    Sleep(2500)
    Return
    EndIf
    TrayTip("", "", 0)
    Sleep(300)
    TrayTip("Saver", "Erfolgreich hochgeladen", 30, 1)
    Sleep(2250)
    TrayTip("", "", 0)
    EndFunc ;==>_Save

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

    Func _TmpCreate()
    DirRemove(@TempDir & "\" & $sOrdner, 1)
    DirCreate(@TempDir & "\" & $sOrdner)
    DirCopy($pPath & "\Meine Skripte", @TempDir & "\" & $sOrdner & "\Meine Skripte", 1)
    DirCreate(@TempDir & "\" & $sOrdner & "\Fremde Skripte")
    DirCopy($pPath & "\Fremde Skripte\UDFs", @TempDir & "\" & $sOrdner & "\Fremde Skripte\UDFs", 1)
    Local $aHidefiles = _GetFilesFolder_Rekursiv(@TempDir & "\" & $sOrdner & "\", "*", 0)
    For $i = 1 To $aHidefiles[0]
    If StringRight($aHidefiles[$i], 2) = "db" Then FileDelete($aHidefiles[$i])
    Next
    EndFunc ;==>_TmpCreate

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

    Func _SaveToInet()
    Local $hFtpopen = _FTP_Open(Random(1, 1000, 1), $INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY)
    Local $hFtpconnect = _FTP_Connect($hFtpopen, $sServername, $sBenutzername, $sPasswort, 0)
    If $bTar Then RunWait(@ComSpec & " /c " & @TempDir & "\7za.exe " & "a -ttar """ & $sOrdner & " vom " & @MDAY & "." & @MON & "." & @YEAR & ".tar"" -r0 " & @TempDir & "\" & $sOrdner & "\*", @TempDir, @SW_HIDE)
    If Not $bTar Then RunWait(@ComSpec & " /c " & @TempDir & "\7za.exe " & "a -tzip -mx9 """ & $sOrdner & " vom " & @MDAY & "." & @MON & "." & @YEAR & ".zip"" -r0 " & @TempDir & "\" & $sOrdner & "\*", @TempDir, @SW_HIDE)
    If _FTP_FilePut($hFtpconnect, @TempDir & "\" & $sOrdner & " vom " & @MDAY & "." & @MON & "." & @YEAR & $sDateiendung, "/Autoit (AutoBackUp)/" & $sOrdner & " vom " & @MDAY & "." & @MON & "." & @YEAR & $sDateiendung) = 0 Then Return 0
    If _FTP_DirSetCurrent($hFtpconnect, "/Autoit (AutoBackUp)/") = 0 Then Return 0
    Local $aDateien = _FTP_ListToArray($hFtpconnect, 2)
    $iCounter = 0
    For $i = 1 To $aDateien[0]
    $aStartdatearray = StringRegExp($aDateien[$i],"(\d{2})\.(\d{2})\.(\d{4})",3)
    $sStartdate = $aStartdatearray[2] & "/" & $aStartdatearray[1] & "/" & $aStartdatearray[0]
    If Abs(_DateDiff("D", $sStartdate, _NowCalcDate())) >= $iTage Then
    _FTP_FileDelete($hFtpconnect, $aDateien[$i])
    $iCounter += 1
    EndIf
    Next
    If $iCounter = 1 Then
    TrayTip("Saver", "Es wurde " & $iCounter & " Datei, die älter war als " & $iTage & " Tage gelöscht", 30, 2)
    Sleep(5500)
    ElseIf $iCounter > 1 Then
    TrayTip("Saver", "Es wurden " & $iCounter & " Dateien, die älter waren als " & $iTage & " Tage gelöscht", 30, 2)
    Sleep(5500)
    EndIf
    If _FTP_Close($hFtpopen) = 0 Then Return 0
    If Not $bTar Then FileDelete(@TempDir & $sOrdner & " vom " & @MDAY & "." & @MON & "." & @YEAR & ".zip")
    If $bTar Then FileDelete(@TempDir & $sOrdner & " vom " & @MDAY & "." & @MON & "." & @YEAR & ".tar")
    Return 1
    EndFunc ;==>_SaveToInet

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

    Func _Exit()
    FileDelete(@TempDir & "\7za.exe")
    EndFunc ;==>_Exit

    [/autoit]

    Im Anhang findet ihr die UDF und 7-Zip


    lg Orion

    Dateien

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

    11 Mal editiert, zuletzt von Orion (11. April 2013 um 17:28) aus folgendem Grund: Update

  • [autoit]


    _base64string()

    [/autoit]


    Was soll diese Funktion machen? Sie ist garnicht vorhanden.^^

    [autoit]


    FileDelete(@TempDir & "\7za.exe")

    [/autoit]


    Wieso löscht du 7za.exe im Temp-Verzeichnis? Das liegt doch im Skritpdir?
    Und wieso überhaupt löschen?^^

    [autoit]


    $iCounter = + + 1

    [/autoit]


    Naja... Das ist kein C++ (Auch da wäre das btw falsch).^^
    Führ mal das Skript hier aus:

    [autoit]


    $i = 0
    $i = + + 1
    $i = + + 1
    $i = + + 1
    ConsoleWrite($i & @CRLF)

    [/autoit]


    Es kommt 1 raus.^^

    Was passiert?
    Jedesmal bei $i = + + 1 wird $i auf "+ + 1" (= +1 = 1) gesetzt.^^

    Du meinst wohl eher $iCounter += 1. ;)

    Sonst: Schönes Skript, da ist echt viel raus geworden, seit dem letzten Thread diesbezüglich. :thumbup:

    lg

  • Also...
    Erstmal danke für das Feedback.

    1.:
    Es ist im include 7zip.au3 enthalten ;) und beinhaltet den Binärstrang zur 7-Zip.exe.

    2.:
    Hat was mit dem ersten zu tun :D

    3.:
    Nun ja stimmt das habe ich von C++ :whistling:

    4.:
    Also bei mir geht es.
    Doch nicht stimmt, ich habs nur mit einer Datei getestet.
    Ja ich meinte $iCounter += 1 :D

    Und sonst:
    Danke :thumbup: Dein Lob beutet mir viel :D

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

  • :D
    Ich lagere Binärstrangs immer in include Dateien aus, zwecks Übersicht.

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

  • Aber dann trotzdem... Wieso machst du das vor jedem Komprimieren neu? Also Erstellen und dann wieder Löschen?
    Es würde doch reichen, die exe einmal zu erstellen, und sie dann am Ende wieder zu löschen (OnAutoItExitRegister), oder einfach die 7za.exe im Scriptverzeichnis zu behalten und von dort zu benutzen, oder sehe ich das falsch?^^

    lg

  • Weil das Programm ja Autostart läuft, und der User den PC ja jederzeit herunterfahren kann.
    Und dann müssen alle Files wieder gelöscht sein.
    Deshalb muss während der Sleep Zeit alles weg sein :D

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

  • Ok ich werde das mal ergänzen :D

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

  • So das hätte ich, nur sieht die Funktion _Exit() jetzt etwas leer aus. :D
    Ich habe auch noch ein paar Kommentare ergänzt, für Chesstiger ^^ wegen

    [autoit]

    _base64String()

    [/autoit]

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

  • Zitat von minx

    Funktioniert soweit, nicht schlecht.


    Danke? :D

    Zitat von minx

    Bin aber viel zu faul es zu benutzen...


    Hö,warum zu faul?


    //Update:
    Hab jetzt die Stringfunktion zum extrahieren des Datums durch

    [autoit]

    StringRegExp

    [/autoit]

    ersetzt.


    //Edit:
    Na ja es ist ja auch nix besonderes.... Hab ich aber auch nie behauptet :D

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

    Einmal editiert, zuletzt von Orion (8. April 2013 um 11:52)