Copying Tool

  • Hallo Leute,
    ich kenne mich eigentlich mit AutoIt aus,
    aber da ich an einem größeren Projekt arbeite und nicht so der Crack mit Arrays bin, glaube ich dass es besser wäre jemandem die Aufgabe zu übertragen, da dieser wahrscheinlich den Code viel besser und effizenter hinbekommt.Und zwar will ich ein System, welches einen Ordner mit Unterordnern in einen anderen kopiert, dabei die Pfade beibehält, und wenn eine Datei überschrieben werden soll, soll er die MD5 Checksums überprüft. Wenn diese nicht identisch sind, soll das Script ein Backup von der zu Überschreibenden Datei erstellen und die Datei überschreiben. Es wäre gut, wenn du vieleicht diese UDF für die Rekursive Ordner Ordner nehmen könntest: Rekursive Datei/Ordner Auflistung und für die MD5 Checksum diese(Achtung, dll im Anhang, sonst geht es nicht) :https://autoit.de/index.php?page=Thread&threadID=7690.
    Ich hab zum einfacheren Verständnis nochmal ein Schaubild gemacht:

    Spoiler anzeigen


    Es wäre total nett, wenn mir jemand vieleicht die Arbeit abnehmen könnte,
    Ich kann auch eine kleine Gegenleistung leisten, zum Beispiel ein Programm zu installieren oder mich irgendwo registrieren oder einen oder mehrere Youtube Kanäle zu abonnieren.
    Fliwatt

  • Ich muss zugeben ich hab mir deine Anfrage nicht wirklich gründlich durchgelesen (habe gerade leider keine Zeit) aber das was ich verstanden habe hört sich doch verdammt nach so etwas an:

    Spoiler anzeigen
    [autoit]

    #include <Crypt.au3>
    _xCopy(@ScriptDir, @ScriptDir & "\backup\")

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

    #cs
    $sSourceDir = Quellverzeichnis das gesichert werden soll
    $sDestinationDir = Zielverzeichnis in das gesichert wird (Backup-Ordner)
    #ce
    Func _xCopy($sSourceDir, $sDestinationDir, $sMotherDir = -1) ; Bitte den letzten Parameter nicht setzen, er ist für die Rekursion notwendig!
    If StringRight($sSourceDir, 1) <> "\" Then $sSourceDir &= "\" ; Fehlende Backslashes an die übergebenen Pfade anhängen
    If StringRight($sDestinationDir, 1) <> "\" Then $sDestinationDir &= "\" ; ...
    If Not FileExists($sSourceDir) Then Return -1 ; Falls das Quellverzeichnis nicht exestiert wird abgebrochen
    If Not FileExists($sDestinationDir) Then DirCreate($sDestinationDir) ; Falls das Zielverzeichnis nich exestiert wird es erstellt
    If $sSourceDir = $sDestinationDir Then Return -2 ; Falls das Quellverzeichnis das Zielverzeichnis ist wird auch abgebrochen
    If $sMotherDir = -1 Then $sMotherDir = StringLen($sSourceDir)
    Local $hSearch = FileFindFirstFile($sSourceDir & "*"), $sNewPath, $sMD5 ; Variablen deklarieren und Starten der Suche im übergebenen Ordner
    While 1 ; by Christoph54 (http://www.autoit.de)
    $sFile = FileFindNextFile($hSearch) ; Eine Datei aus dem Ordner auslesen
    If @error Then ; Wenn dies fehlschlägt (keine Dateien mehr übrig)
    ExitLoop ; Schleife verlassen
    ElseIf @extended Then ; Wenn die gefundene 'Datei' ein Unterordner ist
    $sNewPath = $sDestinationDir & StringTrimLeft($sSourceDir & $sFile & "\", $sMotherDir) ; Pfad zum (neuen) Unterordner im Zielverzeichnis zusammenbasteln
    If Not FileExists($sNewPath) Then DirCreate($sNewPath) ; Falls Unterordner im Zielverzeichnis nicht exestiert wird er erstellt
    _xCopy($sSourceDir & $sFile & "\", $sDestinationDir, $sMotherDir) ; Rekursiver selbst Aufruf der Funktion (--> Der Unterordner wird genau so durchsucht wie der aktuelle)
    Else ; Wenn eine Datei gefunden wurde
    $sNewPath = $sDestinationDir & StringTrimLeft($sSourceDir, $sMotherDir) ; Pfad zur Backup-Datei im Zielverzeichnis zusammenbasteln
    If Not FileExists($sNewPath & $sFile) Then ; Wenn die Datei noch nicht im Zielverzeichnis existiert
    FileCopy($sSourceDir & $sFile, $sNewPath & $sFile) ; Datei ins Zielverzeichnis kopieren
    ;ConsoleWrite("Kopiert" & @TAB & $sSourceDir & $sFile & @LF) ; Debug-Ausgabe
    Else ; Wenn die Datei schon im Zielverzeichnis liegt
    If _Crypt_HashFile($sSourceDir & $sFile, $CALG_MD5) <> _Crypt_HashFile($sNewPath & $sFile, $CALG_MD5) Then ; Wenn "MD5-Hash-Quelldatei" nicht gleic "MD5-Hash-Zieldatei"
    FileCopy($sSourceDir & $sFile, $sNewPath & $sFile, 1) ; Kopieren mit Ersetzen
    ;ConsoleWrite("Ersetzt" & @TAB & $sSourceDir & $sFile & @LF & @TAB & $sNewPath & $sFile & @LF) ; Debug-Ausgabe
    EndIf
    EndIf
    EndIf
    WEnd
    EndFunc ;==>_xCopy

    [/autoit]

    Diese Funktion habe ich irgendwann mal geschrieben... Du kannst ihr ein Quellverzeichnis (von dem das Backup erstellt werden soll) und ein Backup-Verzeichnis (In dem das Backup landet) übergeben. Alle Unterordner des Quellordners werden mit durchsucht und alle Dateien/Ordner die noch nicht im Backup-Orner sind werden kopiert. Falls eine Datei schon im Backup-Ordner existiert, werden beide Versionen mittels eines MD5-Hashs verglichen und gegebenen Falls ersetzt.
    Vielleicht hilft sie dir ja... ;)

    LG
    Christoph :)

    Einmal editiert, zuletzt von BinDannMalWeg (1. Januar 2013 um 12:05)

  • Guck dir mal bitte mein Schaubild an :D
    Ich will den MD5 Checksum Test schon vor dem Zielverzeichnis, dass spart Speicherplatz und genau das soll mein Programm auch.
    Also wäre es sinnlos, unnötig Speicherplatz im BackupOrdner zu verhauen, aber dein Script sieht schon mal gut aus.
    Ich verstehe es zwar nicht, aber vieleicht kannst du mir es ein bischen weiter umschreiben
    Lg Fliwatt

  • Ich will den MD5 Checksum Test schon vor dem Zielverzeichnis

    Bitte was? :D Ich hab mir mal dein Schaubild nochmal angesehen und hab festgestellt das meine Funktion exakt das tut was dein Bild darstellt... Nur der letzte Zweig (Ziel->Backupordner) wirkt auf mich unnötig?! ;)
    Edit: Habe dir den Quellcode oben mal komplett kommentiert... ;)

    LG
    Christoph :)

    Einmal editiert, zuletzt von BinDannMalWeg (1. Januar 2013 um 12:06)

  • Du verstehst mich falsch, es gibt drei Punkte, einmal Backup Ordner einmal Ziel, einmal Quelle wobei jedes verschieden ist.
    Ich schreibe es dir mal in einer Pseudoprogrammiersprache auf:


    Vieleicht verstehst du es so besser, ich will kein Backup Ordner, der immer aktualisiert werden kann!
    Lg Fliwatt

  • Es wäre total nett, wenn mir jemand vieleicht die Arbeit abnehmen könnte,


    Wenn schon jemand anders deine Arbeit machen soll muss schon etwas mehr herausspringen als:

    zum Beispiel ein Programm zu installieren oder mich irgendwo registrieren oder einen oder mehrere Youtube Kanäle zu abonnieren.

    und warum du für die MD-Prüfung eine bestimmte DLL vorschreibst verstehe ich gar nicht hat doch AutoIt

    [autoit]

    _Crypt_HashFile

    [/autoit]

    das ohne zusätzliche DLL auskommt.

    mfg autoBert

  • hmm, ich finde die Art und Weise schon relativ frech:

    Zitat


    Es wäre total nett, wenn mir jemand vieleicht die Arbeit abnehmen könnte,

    Zitat

    Hallo Leute,

    ich kenne mich eigentlich mit AutoIt aus,

    Alleine mit ein wenig Mühe und Suche hättest dir das ganze Teil innerhalb dieser 2 Tage schon alleine "zusammensuchen" können, ohne dass du dich auskennst.
    Bist ja selber schon länger angemeldet, da müsste schon ein wenig Eigeninitiative sein.
    Für Tipps und Hilfe kein Thema, aber schon ein ganzes Programm verlangen - dreist finde ICH.
    Das Teil selbst ist sogar für mich "Laien" nicht das Schwerste, das geht fast wirklich mit C&P ausm Forum.

    Stichwort Funktionen wie _FileSearch, Xcopy usw.. da ist so viel hier da passt vieles..dazu ein wenig Logik und schon haste dein WEg..

    (wehe einer erwähnt RegEX *G*)

  • So, jetzt reicht es mir hier.
    Ich werde das Projekt jetzt alleine übernehmen, ich wollte nur HIlfe von jemandem , der vieleicht ein bischen Freizeit hat, damit ich an einem anderen Teil des Programmes weiterarbeiten kann und dafür ist dieses Forum ja auch da. Ich habe auch geschrieben, dass es wahrscheinlich jemand besser kann, aber wenn sich da so ein pingeliger Shitstorm sich zusammenbraut, dann mache ich es lieber selber als mir von euch helfen zu lassen.
    Bitte keine Scripts und keine Antworten auf den Thread mehr
    #Please Close
    Mfg Fliwatt