Deutsches AutoHotkey Homepage AutoHotkey Community
Wir helfen uns gegenseitig aus der Patsche
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Spiegelung 2er Verzeichnisse(Backup)
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Skripte & Funktionen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
fredchf



Anmeldedatum: 18.09.2006
Beiträge: 717
Wohnort: Deutschland

BeitragVerfasst am: Fr Jun 15, 2007 10:11 am    Titel: Spiegelung 2er Verzeichnisse(Backup) Antworten mit Zitat

hallo,
ich möchte hier heute mal mein script zum spiegeln 2er verzeichnisse vorstellen,ich nutze es zum regelmäßigen sichern von daten auf externe festplatten:

im scriptverzeichnis wird eine ini-datei mit den einstellungen der pfade erstellt,ihr wird settings_ vorrangestellt.(settings_%ScriptName%.ini)so lassen sich beliebig viele aufträge anlegen,deren einstellungen anhand scriptnamens zugeordnet werden.
es werden nur dateien und ordner kopiert/überschrieben,die im ziel nicht vorhanden oder älter sind!
anschliessend werden datum (erstell-u. änderungsdatum) der originalen ordner u. dateien übernommen und im quellverzeichnis nicht vorhandene im ziel gelöscht um eine echte 1:1 kopie zu erreichen.
kopierte und gelöschte dateien und ordner werden auf wunsch in einer logdatei aufgelistet.


sehr gut geeignet für regelmäßige sicherung größerer verzeichnisse,da nur relevante dateien und ordner kopiert werden






Script letzte Änderung: 03.11.2008
Code:
/*
hallo,
ich möchte hier heute mal mein script zum spiegeln 2er verzeichnisse vorstellen,ich nutze es zum regelmäßigen sichern von daten auf externe festplatten:

im scriptverzeichnis wird eine ini-datei mit den einstellungen der pfade erstellt,ihr wird settings_ vorrangestellt.
es werden nur dateien und ordner kopiert/überschrieben,die im ziel nicht vorhanden oder älter sind!
anschliessend werden datum (erstell-u. änderungsdatum) der originalen ordner u. dateien übernommen und im quellverzeichnis nicht vorhandene im ziel gelöscht um eine echte 1:1 kopie zu erreichen.
kopierte und gelöschte dateien und ordner werden auf wunsch in einer logdatei aufgelistet.

änderungen:
06.10.2008 20:09:34 V2.0.6
* prozentberechnung anhand der größe statt über die anzahl der dateien
* prozent im titel und tray
* teile des pfads in status-gui

* fehler bei suche nach xcopy korrigiert 12.07.2008 13:22:13 V2.0.5

* tauschen-button hinzugefügt  04.07.2008 17:42:02 v2.0.4

* ToolTip für Dateien zählen entfernt,dadurch Zeit fürs lesen geviertelt 17.06.2008 13:38:50  V2.0.3
* Ordner werden nicht mehr gezählt
* Log in CSV-Datei
* xcopy nur noch bei Dateien > 10mB

11.06.2008 19:13:42
* log in cop()funktion ausgelagert
* fehlerkontrolle erweitert
* msgboxen an guis geheftet
* xcopy-indikator
* copy_it abfragen verkürzt

10.06.2008 01:42:35
* kopiervorgang in xcopy ausgelagert um script bei großen dateien ansprechbar zu halten,falls auf dem system vorhanden

09.06.2008
* calc_kb eingefügt

08.02.2008
* speicheranzeige verbessert
* goto's entfernt

06.02.2008
*  eigene gui für status
*  eigene gui für "Die Quelldatei ist älter als das Ziel!"-meldung
*  dynamische speicheranzeige(kB,mB,GB)
*  datum wird,falls gewählt, für bessere performance direkt nach dem kopieren gesetzt(außer ordner)
*  in der ini-datei wird der log-status gespeichert
*  quelle aus pfaden entfernt,traytip ergänzt
*  logdaten werden um speicher zu sparen sofort in log gespeichert,statt in einer var
*/
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
SetBatchLines, -1
version = V2.0.6 vom 20:10 Montag, 6. Oktober 2008
EnvGet, P1, Path

; ######################## xcopy suchen
ToolTip, xcopy wird gesucht...
Loop, Parse, P1, `;,
  {
    Line := A_LoopField
    If daisse
        Break
    Loop, %Line%\*.exe, 0,
      {
        If A_LoopFileName = xcopy.exe
          {
            daisse = %A_LoopFileLongPath%
            Break
          }
      }
  }
; daisse =

ToolTip
; ############### Vorbereitungen
  StringTrimRight, ScriptName, A_ScriptName, 4 ;ErweiteRung entfernen
  logfile = %ScriptName%_Log.csv
  ini = settings_%ScriptName%.ini
  IfNotExist, %ini% ; einstellungen bereits vorhanden?
      Gosub, FirstRun
  Else
      Gosub, inir
  ; ############### Gui 1
;   Gui +Resize
  Gui, Color, F4F3FF
  Gui, Font, s8, Verdana
  Gui, Add, GroupBox, x6 y7 w470 h50 vQuellverzeichnis, Quellverzeichnis
  Gui, Add, GroupBox, x6 y+20 w470 h50 vZielverzeichnis, Zielverzeichnis
  Gui, Add, Edit, x16 y27 w420 h20 vqordner, %qordner%
  Gui, Add, Edit, x16  y97 w420 h20 vziel, %ziel%
  Gui, Add, Button, x215 y58 w80 h25 vrestore grestore, tauschen
  Gui, Add, Button, x436 y27 w30 h20 vbrowsequelle gbrowsequelle, ...
  Gui, Add, Button, x436 y97 w30 h20 vbrowseziel gbrowseziel, ...
  Gui, Add, Button, x6 y147 w65 h30 -Wrap gstart Default, Start
  Gui, Add, Button, x+5 y147 w65 h30 -Wrap gabbruch, Abbruch
  Gui, Add, Checkbox, x+5 y147 w90 h30 Checked%log% vlogdatei, Logdatei erstellen
  Gui, Add, Checkbox, x+5 y147 w90 h30 Checked vdatum, Datum mit übertragen
  Gui, Font, cRed, Arial italic
  Gui, Add, Checkbox, x+5 y147 w150 h30 Checked vloesch, Überflüssiges im Ziel löschen
  Gui, Font, cgray, Arial italic
  Gui, Add, text, x5 Right y+5 w470, % (daisse ? "xcopy gefunden           " : "") . version
  Gui, Show, , %ScriptName% - 2 Verzeichnisse abgleichen
  ;   ###################### Gui 2
  Gui 2:Color, F4F3FF
  Gui 2:Font, s8, Verdana
  Gui 2:add, text, R2 w470 bold vadatei, akt.Datei
  Gui 2:add, text, w120 vspeicher, Speicher in kb
  Gui 2:add, text, x+5 w80 vCounterd,
  Gui 2:add, text, x+5 w80 vCountero,
  Gui 2:add, text, x5 w270 vCounter, Zähler
  Gui 2:add, Progress, x5 w470 cBlue -Smooth vprog,
  Gui 2:add, Button, gabbruch, Abbruch
  Gui 2:add, text, x+5 CGray, % (daisse ? "kopiert wird mit xcopy" : "")
Return
; ################################# ENDE der Auto-execute Section

start:
  ; ######################Start########################


  Gui, Submit, NoHide
  if !ch
  {
  IniWrite, %logdatei%, %ini%, Settings, log ;in ini schreiben
  IfExist, %qordner%
      IniWrite, %qordner%, %ini%, Settings, qordner ;in ini schreiben
  IniWrite, %ziel%, %ini%, Settings, ziel ;in ini schreiben
  }
  gui, +OwnDialogs
  MsgBox, 65, Ordner Spiegeln - %ScriptName%, Kopiervorgang wird nun gesstartet`,nur im Ziel vorhandene Ordner und Dateien werden ohne Rückfrage gelöscht!`n`nvon hier wird kopiert : %qordner%`nhierher wird kopiert   : %ziel%, 15
  IfMsgBox, Cancel
    {
      Gui, Show, , %ScriptName% - 2 Verzeichnisse abgleichen
      Return
    }
  Gui, show, hide, ,
  IfNotExist, %qordner%
    {
      MsgBox, 16, Fehler!, Quellordner Existiert nicht!
      Gui, Show, , %ScriptName% - 2 Verzeichnisse abgleichen
      Return
    }
  IfExist, %A_ScriptDir%\%logfile% ;alte Logdatei löschen
      FileDelete, %A_ScriptDir%\%logfile%
  ; #################### Variablen erstellen
  wieviel = 0
  wievielo = 0
  wievielob = 0
  wievielk = 0
  wievielkb = 0
  wievielkbnull = 0
  wievieldel = 0
  err = 0
  alleb = 0
  fehler_Status =
  If loesch = 1
    {
      TrayTip, Löschen, Überflüssige Dateien im Ziel Suchen und Löschen, 20,
      ;   ####################### LÖSCHEN ##############################
      Loop, %ziel%\*.*, 1, 1 ;Ziel durchsuchen
        {
          StringLen, laenge, ziel ;Länge des Quellpfads
          StringTrimLeft, zielufile, A_LoopFileFullPath, %laenge% ;Quellpfad von aktuellen Datei entfernen
          IfNotExist, %qordner%%zielufile% ;ist die Zieldatei im Quellordner vorhanden?
            {
              IfInString A_LoopFileAttrib, D ;ist Ordner?
                FileRemoveDir, %A_LoopFileFullPath%, 1
              Else
                FileDelete, %A_LoopFileFullPath%
              If ErrorLevel
                {
                  FileAppend, % ";" append() . A_LoopFileFullPath . ";" ((InStr(A_LoopFileAttrib, "D")) ? "##Ordner##" : "") "##konnte nicht gelöscht werden##`n", %logfile%
                  err++
                  Continue
                }
              wievieldel ++
              FileAppend, % ";" append() . A_LoopFileFullPath . ";" . ((InStr(A_LoopFileAttrib, "D") = 0) ? calc_kb(A_LoopFileSize) : "#Ordner#") . ";wurde gelöscht!`n", %logfile%
              TrayTip, Löschen, Überflüssige Dateien im Ziel Suchen und Löschen`n%wievieldel%, 20,
            }

        }
    }
  TrayTip
; ################## Zählen###############
  ToolTip, Dateien zählen ...
  Loop, %qordner%\*.*, 0, 1
      {
      alle++ ;Dateien zählen
      alleb := alleb + A_LoopFileSize
      }
  ToolTip
  ; ###################### Kopieren ####################
  Gui 2:show ;2. Gui zeigen
  SetTimer, titelak ,1500
  Loop, %qordner%\*.*, 0, 0 ;nur Dateien im Root-Verzeichnis
    {
      wievielk++
      wievielkbnull := wievielkbnull + A_LoopFileSize
      Gosub, setgui ;Gui2 anpassen
      IfNotExist, %ziel% ;Ordner nicht vorhanden?
        {
          FileCreateDir, %ziel% ;Ordner erstellen
          if ErrorLevel
            {
              msgbox, 16, Fehler!, Der folgene Ordner konnte nicht im Ziel erstellt werden.`nAbbruch!`n%ziel%
              ExitApp
            }
          FileAppend, % ";" append() . ziel . ";#Ordner erstellt#`n", %logfile%
        }
      copy_it = n
      IfNotExist, %ziel%\%A_LoopFileName%  ; immer kopieren wenn im Ziel keine gleichnamige Datei ist
          copy_it = y
      Else
        {
          FileGetTime, time, %ziel%\%A_LoopFileName%
          EnvSub, time, %A_LoopFileTimeModified%, Seconds  ; Subtrahiert die ÄndeRungszeit der Quelle mit dem Ziel
          copy_it := (time < -1) ? "y" : (((allec = 1) and (time > 5)) ? "y" : "n")
          If (time > 5) and (allec != 1) and (nie != 1)
                {
                  ccc =
                  zdatei = %ziel%\%A_LoopFileName%
                  Gosub, createmsg ;Sicherheitsabfrage erstellen und zeigen
                }
        }
      If copy_it = y
        {
          cop(A_LoopFileFullPath, ziel . "\", ((FileExist(ziel . "\" . A_LoopFileName) ? "ü" : "n")))   ; Kopieren mit überschreiben
          If Datum = 1
              FileSetTime, %A_LoopFileTimeModified%, %ziel%\%A_LoopFileName%, C         
        }
    }
  ; ##################################
  Loop, %qordner%\*.*, 2, 1 ;nur Ordner und Unterordner
    {
      wievielo++
      StringLen, laenge, qordner
      StringTrimLeft, unterordner, A_LoopFileFullPath, %laenge%
      IfNotExist, %ziel%%unterordner%
        {
          FileCreateDir, %ziel%%unterordner%
          if ErrorLevel
            {
              msgbox, 16, Fehler!, Der folgene Ordner konnte nicht im Ziel erstellt werden.`nAbbruch!`n%ziel%%unterordner%`nDatenträger voll oder schreibgeschützt?
              ExitApp
            }
          wievielob ++
          FileAppend, % ";" append() . ziel . unterordner . ";#Ordner erstellt#`n", %logfile%
        }
      Loop, %qordner%%unterordner%\*.*, 0, 0 ;nur Dateien in Unterverzeichnissen
        {
          wievielk++
          wievielkbnull := wievielkbnull + A_LoopFileSize
          Gosub, setgui
          copy_it = n
          IfNotExist, %ziel%%unterordner%\%A_LoopFileName%  ; immer kopieren wenn im Ziel keine gleichnamige Datei ist
              copy_it = y
          Else
            {
              FileGetTime, time, %ziel%%unterordner%\%A_LoopFileName%
              EnvSub, time, %A_LoopFileTimeModified%, Seconds  ; Subtrahiert die ÄndeRungszeit der Quelle mit dem Ziel
              copy_it := (time < -1) ? "y" : (((allec = 1) and (time > 5)) ? "y" : "n")
              If (time > 5) and (allec != 1) and (nie != 1)
                {
                  ccc =
                  zdatei = %ziel%%unterordner%\%A_LoopFileName%
                  Gosub, createmsg ;Sicherheitsabfrage erstellen und zeigen
                }
            }
          If copy_it = y
            {
              cop(A_LoopFileFullPath, ziel . unterordner . "\", ((FileExist(ziel . unterordner . "\" . A_LoopFileName) ? "ü" : "n")))
              If Datum = 1
                 FileSetTime, %A_LoopFileTimeModified%, %ziel%%unterordner%\%A_LoopFileName%,
            }
        }
    }

  ; ##################### ENDE kopieren

  If datum = 1
    {
      TrayTip, Datum, Ordnerdatum anpassen..., 30,
      ;   ######################### DATUM
      Loop, %qordner%\*.*, 2, 1 ;Datum der Ordner anpassen
        {
          ww++
          StringLen, laenge, qordner ;Länge des Quellpfads
          StringTrimLeft, qordnerufile, A_LoopFileFullPath, %laenge% ;Quellpfad von aktuellen Datei entfernen
          FileSetTime, %A_LoopFileTimeCreated%, %ziel%%qordnerufile%, C, 1, 0
          TrayTip, Datum, Ordnerdatum anpassen...`n%ww%, 30,
        }
    }
  TrayTip,

  SetTimer, titelak ,Off
  Menu, tray, tip, %ScriptName%
  ; ##################### FERTIG - Auswertung
  If ((wieviel + wievielob + wievieldel + err) = 0) ;wenn 0,nichts bearbeitet
    {
      gui 2: +OwnDialogs
      MsgBox, 64, Fertig! - %ScriptName%, Keine Dateien Bearbeitet!, 5
      ExitApp
    }
  speich := calc_kb(wievielkb)
  gelöscht := (wievieldel != 0) ? wievieldel . " Dateien oder Ordner im Ziel gelöscht!" : ""
  gui 2: +OwnDialogs
  MsgBox, % "Fertig!`n`n" . wieviel . " Dateien und " . wievielob . " Ordner kopiert(" . speich . " kopiert)`n" . gelöscht . "`n" . ((err = 0) ? "" : err . " Dateien oder Ordner konnten nicht korrekt verarbeitet werden!")
  FileAppend, % "`n`n------------------" . append() . "-------------------`nFertig!--Verarbeitet: " . wieviel . " Dateien und " . wievielob . " Ordner kopiert(" . speich . " kopiert)`n-----------------------------------------------------------------------------------------`n" . gelöscht . "`n" . ((err = 0) ? "" : err . " Dateien oder Ordner konnten nicht korrekt verarbeitet werden!") . "`n`n`n", %logfile%
  If Logdatei = 0
      FileDelete, %logfile%
  Else
      Run, notepad.exe %logfile%, , Max
  ExitApp


browsequelle:
  ch =
  FileSelectFolder, qordner, *%qordner%, , Von wo sollen die Dateien und Ordner kopiert werden? ;Ordner wählen
  If qordner =
    {
      MsgBox, Nichts gewählt!
      Return
    }
  GuiControl, , qordner, %qordner%
Return

browseziel:
  ch =
  FileSelectFolder, ziel, *%ziel%, 1, Wohin soll kopiert werden? ;Ordner wählen
  If ziel =
    {
      MsgBox, Nichts gewählt!
      Return
    }
  GuiControl, , ziel, %ziel%
Return
abbruch:
GuiClose3:
GuiClose:
  ExitApp

  ; ######################## Action-Gui anpassen
  ; statusfenster anpassen/aktualisieren
setgui:
  speich := calc_kb(wievielkb)
  StringReplace, kurze, A_LoopFileFullPath, qordner
  GuiControl, 2:, adatei, % "..." SubStr(kurze, -65) . "`n" . calc_kb(A_LoopFileSize)
  GuiControl, 2:, speicher, %speich% kopiert
  GuiControl, 2:, Counter, % "Datei " wievielk " von " alle " in Arbeit(" (Round((100 / alleb * wievielkbnull), 1)) "%)"
  prozent := Round((100 / alleb * wievielkbnull), 1) "%"
  GuiControl, 2:, Countero, % (wievielob = 0) ? "" : wievielob " Ordner kopiert"
  GuiControl, 2:, Counterd, % (wieviel = 0) ? "" : wieviel " Dateien kopiert"
  GuiControl, 2:, prog, % (100 / alleb) * wievielkbnull
Return

; ######################## Ersetzen-Gui
; meldung:"Die Quelldatei ist älter als das Ziel!" erzeugen
createmsg:
  SetTimer, titelak ,Off
  ccc =
  FileGetTime, time2, %zdatei%, M
  FormatTime, time2, %time2%,
  FileGetSize, kbmsg, %zdatei%,
  sizez := calc_kb(kbmsg)
  sizeq := calc_kb(A_LoopFileSize)
  FormatTime, timemsg, %A_LoopFileTimeModified%
  StringReplace, pp, A_LoopFileLongPath, %qordner%, , All
  txt =
    (
Die Quelldatei

%pp%  %sizeq%
%timemsg%

ist älter als das Ziel!

%pp%  %sizez%
%time2%

immer Ersetzen?
    )
  Gui 3:+AlwaysOnTop
  Gui 3:Color, F4F3FF
  Gui 3:Font, s8, Verdana
  IfExist, C:\WINDOWS\system32\shell32.dll
      Gui 3:Add, Picture, icon132 , C:\WINDOWS\system32\shell32.dll
  Gui 3:add, text, , %txt%
  Gui 3:add, Button, y+5 gersetzen, Ja,jedesmal Erstzen!
  Gui 3:add, Button, x+5 gersetzen, Ersetzen!
  Gui 3:add, Button, x+5 gersetzen Default, Nicht Ersetzen
  Gui 3:add, Button, x+5 gersetzen, Nie Ersetzen
  Gui 3:Show, Die Quelldatei ist älter als das Ziel!

WinWait, %A_ScriptName%, Ja`,jedesmal Erstzen!
WinWaitClose, %A_ScriptName%, Ja`,jedesmal Erstzen!
  SetTimer, titelak ,On
IfWinNotActive, %ScriptName% - 2 Verzeichnisse abgleichen
    WinActivate, %ScriptName% - 2 Verzeichnisse abgleichen
If ccc = Ja`,jedesmal erstzen!
  {
    allec = 1
    copy_it = y
  }
If ccc = Ersetzen!
    copy_it = y
If ccc = Nie Ersetzen
    nie = 1

Return

; ################ Welcher Button wurde geklickt
; welche option gewählt?
ersetzen:
  ccc = %A_GuiControl%
  Gui, Destroy
Return

firstrun: ;keine ini vorhanden
  FileSelectFolder, qordner, , , Von wo sollen die Dateien und Ordner kopiert werden? ;Ordner wählen
  If qordner =
    {
      MsgBox, Nichts gewählt!
      ExitApp
    }
  FileSelectFolder, ziel, , 1, Wohin soll kopiert werden? ;Ordner wählen
  If ziel =
    {
      MsgBox, Nichts gewählt!
      ExitApp
    }
  IniWrite, %qordner%, %ini%, Settings, qordner ;in ini schreiben
  IniWrite, %ziel%, %ini%, Settings, ziel ;in ini schreiben
  log = 1
Return

inir: ; ini lesen
  IniRead, log, %ini%, Settings, log, 1
  IniRead, qordner, %ini%, Settings, qordner,
  If qordner = Error
    {
      MsgBox, %ini% fehlerhaft`nggf. löschen!
      ExitApp
    }
  IniRead, ziel, %ini%, Settings, ziel,
  If ziel = Error
    {
      MsgBox, %ini% fehlerhaft`nggf. löschen!
      ExitApp
    }

Return

; ################ Funktion ##################
calc_kb(wievielb, nachkomma = 3) ; Übergabe von Bytes, Nachkommas- Rückgabe dynamisch(bytes,kB,mB,GB)
  {
    Return (wievielb > 1073741824) ? Round((wievielb / 1073741824), nachkomma) " GB" : ((wievielb > 1048576) ? Round((wievielb / 1048576), nachkomma) " MB" : ((wievielb > 1024) ? Round((wievielb / 1024),nachkomma) " kB" : wievielb . " bytes"))
  }

; ----------------------------------------------------------------------------
cop(d1, d2, par = "n")
  {
    global logfile, wieviel, wievielkb, daisse
    stats := (par = "n") ? "(neu kopiert)" : "(überschrieben)"
    if (!daisse or (A_LoopFileSizeMB < 10)) ; wenn xcopy nicht gefunden und datei kleiner 10mB
      FileCopy, %d1%, %d2%\%A_LoopFileName%, 1
    Else
      RunWait, xcopy.exe "%d1%" "%d2%" /F /H /K /Y /R, , hide
    If ErrorLevel
      {
        If ErrorLevel = 1
            fehler_Status := (daisse != "") ? "1  Es wurden keine zu kopierenden Dateien gefunden." : "Fehler beim kopieren"
        If ErrorLevel = 2
            fehler_Status = 2  Der Benutzer hat XCOPY durch Drücken von STRG+C beendet.
        If ErrorLevel = 4
            fehler_Status = ##!!FEHLER!!## 4 `n Datei konnte nicht kopiert werden!
        If ErrorLevel = 5
            fehler_Status = 5  Es ist ein Schreibfehler aufgetreten.
        MsgBox, 16, Fehler beim kopieren!, % A_LoopFileFullPath . "`n" . fehler_Status
        err++
      }
    Else
      {
        fehler_Status = 0  Die Dateie wurde fehlerfei kopiert.
        wieviel++
        wievielkb += %A_LoopFileSize%
      }
    set := wieviel ";" append() . d2 . A_LoopFileName . ";" . calc_kb(A_LoopFileSize) . ";" . fehler_Status . stats . ((!daisse or (A_LoopFileSizeMB < 10)) ? "" : "x")"`n"
    FileAppend, %set% , %logfile%
    Return
  }
/*
Die Beendigungscodes von XCOPY

In der folgenden Liste sind die möglichen Beendigungscodes aufgeführt und kurz erläutert:

0  Die Datei wurde fehlerfei kopiert.
1  Es wurden keine zu kopierenden Dateien gefunden.
2  Der Benutzer hat XCOPY durch Drücken von STRG+C beendet.
4  Es trat ein Initialisierungsfehler auf. Mögliche Ursachen: Es ist nicht genügend Arbeitsspeicher
vorhanden; die Kapazität des Datenträgers reicht nicht aus;
Sie haben einen unzulässigen Dateinamen eingegeben;
Sie haben in der Befehlszeile eine unzulässige Syntax verwendet.
5  Es ist ein Schreibfehler aufgetreten.
*/

append()
  {
    Return A_DD "." A_MM "." A_YYYY " " A_Hour "." A_Min " Uhr " A_Sec "sec;"
  }


restore:
ch := (ch = 1) ? 0 : 1
GuiControl, , ziel, %qordner%
GuiControl, , qordner, %ziel%
Gui, Submit, NoHide
if ch
  {
  GuiControl, , restore, getauscht
  Gui, Font, Bold, Verdana ; So wird ein neuer Standardzeichensatz für das gesamte Fenster eingestellt.
  GuiControl, Font, restore ; So werden diese Einstellungen dem Control zugewiesen.
  }
Else
  {
  GuiControl, , restore, tauschen
  Gui, Font, norm, Verdana ; So wird ein neuer Standardzeichensatz für das gesamte Fenster eingestellt.
  GuiControl, Font, restore ; So werden diese Einstellungen dem Control zugewiesen.
  }
Return

titelak:
oldt := (oldt = "") ? ScriptName : oldt
WinSetTitle, %oldt%, , %prozent% %ScriptName%
oldt = %prozent% %ScriptName%
Menu, tray, tip, %oldt%
Return

_________________
Mit freundlichen Grüßen
fredchf


Zuletzt bearbeitet von fredchf am Mo Nov 03, 2008 5:45 pm, insgesamt 14-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
BoBo¨
Gast





BeitragVerfasst am: Fr Jun 15, 2007 10:30 am    Titel: Antworten mit Zitat

Danke für diesen Beitrag. Very Happy
Folgende Features/Optionen halte ich für überdenkenswert.
1) eine CheckBox über welche sich explizit die 'unwiederbringliche Löschung' bestätigen lässt.
2) Optional keine finale Löschung, sondern ein einfaches Umbenennen älterer Daten (*.OLD) am Ziel, um eine Fallback-Option anzubieten.
Nach oben
IsNull



Anmeldedatum: 20.12.2006
Beiträge: 1326
Wohnort: CH

BeitragVerfasst am: Fr Jun 15, 2007 12:11 pm    Titel: Antworten mit Zitat

Danke fürs posten, wollte mir bald auch ein "Backup Tool" machen. Das erspart mir Arbeit Very Happy
_________________

http://securityvision.ch
www.forum.securityvision.ch
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Thalon



Anmeldedatum: 25.10.2005
Beiträge: 1896
Wohnort: Österreich

BeitragVerfasst am: Fr Jun 15, 2007 12:42 pm    Titel: Antworten mit Zitat

So wie das hier? ^^

Obiges hat aber eindeutig eine professionellere Aufmachung (Code nicht begutachtet)!

Kleine Anmerkung:
Nach obiger Beschreibung wird keine echte Spiegelung (zumindest nicht so wie ich den Begriff auffasse) erzielt (inkludiert für mich auch das Angleichen im Quellordner bei neueren Dateien im Ziel).
Sollte so eine Vollsynchronisation hier nicht im Rahmen des Scripts umgesetzt werden werde ich mich wohl daran machen, da ich auf meiner externen Platte nicht nur Sicherungen erzeugen möchte, sondern auch neuere Sachen einsortieren ums daheim abzugleichen.
Gratis Tools scheints dazu nicht wirklich zu geben (lasst bloß die Finger von Microsofts "Synctoy", das hat mir mal die halbe Platte weggeworfen!)

Thalon
_________________
Mein Motto: Hilfe zur Selbsthilfe!
Teildeutsche Hilfe (CHM)!! und Deutsche Online-Hilfe
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fredchf



Anmeldedatum: 18.09.2006
Beiträge: 717
Wohnort: Deutschland

BeitragVerfasst am: Fr Jun 15, 2007 10:42 pm    Titel: Antworten mit Zitat

hallo,
erstmal vielen dank für eure resonanz Very Happy ,offensichtlich ein thema das nicht nur mich beschäftigt.
wichtig war mir das das originaldatum übertragen wird,ansonsten gäbe es sicher einfachere wege.
BoBo hat Folgendes geschrieben:
Folgende Features/Optionen halte ich für überdenkenswert.
1) eine CheckBox über welche sich explizit die 'unwiederbringliche Löschung' bestätigen lässt.
2) Optional keine finale Löschung, sondern ein einfaches Umbenennen älterer Daten (*.OLD) am Ziel, um eine Fallback-Option anzubieten.

da es sich bei mir meist um große datenmengen handelt,möchte ich darauf verzichten eine löschabfrage einzubauen,(klickorgie,das nervte mich schon bei meinem vorherigen sharewaretool),ist dennoch sicher kein problem
das handeln der mehrfach existierenden(*.old)dateien/ordner stelle ich mir sehr schwierig vor,ausserdem würde das datenaufkommen stark anschwellen.

@Thalon
als synchronisationstool ist mein script nicht zu gebrauchen,da es ähnlich deinem script nur ein abbild des quellordners erstellt!
auf deine lösung bin ich sehr gespannt! Very Happy
_________________
Mit freundlichen Grüßen
fredchf
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Gast






BeitragVerfasst am: Sa Jun 16, 2007 1:23 pm    Titel: Antworten mit Zitat

Zitat:
möchte ich darauf verzichten eine löschabfrage einzubauen
Hatte von einer CheckBox (Einstellung als Default, Ja/Nein) gesprochen, nicht von einer MsgBox. Wink

Zitat:
das handeln der mehrfach existierenden(*.old)dateien/ordner stelle ich mir sehr schwierig vor,ausserdem würde das datenaufkommen stark anschwellen.
Sicher ein Hauptargument gegen eine Backuplösung - und zwar bis der Erste Crash oder die Syncronistaion von Daten durch schöne neue leere Datendummies erfolgt ist. ShockedWink
Nach oben
Lirave
Gast





BeitragVerfasst am: Sa Jun 16, 2007 9:19 pm    Titel: Antworten mit Zitat

erstmal respekt,habe es mir mal heruntergeladen und ausprobiert, finde es ist sehr gut gemacht.

wollte mal fragen, wie ich das automatisch machen kann,

heißt, wie starte ich das Script zu einer festgelegten Zeit und immer von dem gleichen Startordner und dem selben Zielortner?, ohne, dass ich etwas öffnen muss?

Mit freundlichen Grüßen Lirave
Nach oben
BoBo¨
Gast





BeitragVerfasst am: So Jun 17, 2007 8:12 am    Titel: Antworten mit Zitat

Zitat:
wollte mal fragen, wie ich das automatisch machen kann,
'Vollautomatich' würde bedeuten, das du die GUI-Bestandteile des Scripts auskommentierst/entfernst (da diese ja eine Intervention des User erfordert), und das 'Rumpfscript' über eine Scheduler zeitgesteuert (oder über Startup) ausführst.
Es bietet sich an ein solches Script beim Herunterfahren (OnExit) des Rechners laufen zu lassen.
Frage:
Zitat:
und immer von dem gleichen Startordner und dem selben Zielortner?

Antwort:
Zitat:
im scriptverzeichnis wird eine ini-datei mit den einstellungen der pfade erstellt,
Nach oben
Lirave
Gast





BeitragVerfasst am: So Jun 17, 2007 12:38 pm    Titel: Antworten mit Zitat

danke erstmal für deine Antwort,

ist zwar ne "dämliche" Frage, aber was ist GUI(was bedeutet das?),und wie sieht die Codzeile aus, wenn das Script staten soll, wenn ich den Rechner runterfahre?
Nach oben
IsNull



Anmeldedatum: 20.12.2006
Beiträge: 1326
Wohnort: CH

BeitragVerfasst am: So Jun 17, 2007 2:19 pm    Titel: Antworten mit Zitat

Lirave hat Folgendes geschrieben:
danke erstmal für deine Antwort,

ist zwar ne "dämliche" Frage, aber was ist GUI(was bedeutet das?),und wie sieht die Codzeile aus, wenn das Script staten soll, wenn ich den Rechner runterfahre?


GUI bedeutet "Graphical User Interface", damit sind die Fenster & msgbox'en usw. gemeint.

Das mit dem Rechner runterfaren geht nicht so einfach, besser ist, dein Script fährt den Rechner runter, führt aber erst noch die Sicherung durch.

Lies doch als erstes mal die Hilfe, da gibts gute Anfänger Tuts. Hier im Wiki findest du auch diverse Beiträge auf deutsch, einfach mal reinschauen.

Gruss
IsNull
_________________

http://securityvision.ch
www.forum.securityvision.ch
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fredchf



Anmeldedatum: 18.09.2006
Beiträge: 717
Wohnort: Deutschland

BeitragVerfasst am: So Jun 17, 2007 4:07 pm    Titel: Antworten mit Zitat

hallo erstmal,
bin gerade erst aus dem wochenende zurück,tut mir also leid das ich nicht früher antworten konnte.
Lirave hat Folgendes geschrieben:
finde es ist sehr gut gemacht.

vielen dank für die blumen... Very Happy
witzig ist das ich bereits selber so ein von der gui befreites script(siehe BoBo's post) nutze um unbeaufsichtigt mehrere solcher scripte(abweichende namen und pfade) durchführen zu lassen.
hier mal der code(ohne gui,mit automatischem start):
Code:
StringTrimRight, ScriptName, A_ScriptName, 4 ;ErweiteRung entfernen
IfExist, settings_%ScriptName%.ini
Goto, inida
IfNotExist, settings_%ScriptName%.ini
  {
    FileSelectFolder, qordner, , , Von wo sollen die Dateien und Ordner kopiert werden? ;Ordner wählen
    If qordner =
      {
        MsgBox, Nichts gewählt!
        ExitApp
      }
    FileSelectFolder, ziel, , 1, Wohin soll kopiert werden? ;Ordner wählen
    If ziel =
      {
        MsgBox, Nichts gewählt!
        ExitApp
      }
  msgbox, 36, Ordner Spiegeln, Sollen die Ordner für weitere Kopiervorgänge in einer ini-Datei(settings_%ScriptName%.ini) gespeichert werden!
  IfMsgBox, Yes
    {
    IniWrite, %qordner%, settings_%ScriptName%.ini, Settings, qordner ;in ini schreiben
    IniWrite, %ziel%, settings_%ScriptName%.ini, Settings, ziel ;in ini schreiben
    }
  }
Goto, fertig
inida:
IniRead, qordner, settings_%ScriptName%.ini, Settings, qordner,
If qordner =
  {
    MsgBox, settings_%ScriptName%.ini fehlerhaft`nggf. löschen!
    ExitApp
  }
IniRead, ziel, settings_%ScriptName%.ini, Settings, ziel,
If ziel =
  {
    MsgBox, settings_%ScriptName%.ini fehlerhaft`nggf. löschen!
    ExitApp
  }

fertig:
msgbox, 65, Ordner Spiegeln, Kopiervorgang wird nun gesstartet`,fehlende Ordner und Dateien werden im Ziel ohne Rückfrage gelöscht!`n`nvon hier wird kopiert : %qordner%`nhierher wird kopiert   : %ziel%, 15
IfMsgBox, Cancel
ExitApp
logd =
wieviel =
wievielkb =
IfExist, %ScriptName%_Log.txt
  FileDelete, %ScriptName%_Log.txt
Loop, %qordner%\*.*, 0, 0 ;nur Dateien im Root-Verzeichnis
{
    TrayTip, Kopieren, %A_LoopFileName%, 5,
    IfNotExist, %ziel%
    FileCreateDir, %ziel%
    copy_it = n
    IfNotExist, %ziel%\%A_LoopFileName%  ; immer kopieren wenn im Ziel keine gleichnamige Datei ist
        copy_it = y
    else
    {
        FileGetTime, time, %ziel%\%A_LoopFileName%
        EnvSub, time, %A_LoopFileTimeModified%, seconds  ; Subtrahiert die Änderungszeit der Quelle mit dem Ziel
        if time < 0  ; Quellzeit ist neuer
            copy_it = y
    }
        If copy_it = y
          {
            wievielkb += %A_LoopFileSizeKB%
            IfExist, %ziel%\%A_LoopFileName%
              {
              logd = %logd%`n%A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%\%A_LoopFileName% überschrieben
              wieviel ++
              FileCopy, %A_LoopFileFullPath%, %ziel%\%A_LoopFileName%, 1   ; Kopieren mit überschreiben
              If ErrorLevel
                  MsgBox, Datei "%A_LoopFileFullPath%" konnte nicht nach "%ziel%\%A_LoopFileName%" kopiert werden.
              Continue
              }
            wieviel ++
            FileCopy, %A_LoopFileFullPath%, %ziel%\%A_LoopFileName%, 1   ; Kopieren mit überschreiben
            If ErrorLevel
                MsgBox, Datei "%A_LoopFileFullPath%" konnte nicht nach "%ziel%\%A_LoopFileName%" kopiert werden.
            logd = %logd%`n%A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%\%A_LoopFileName% Neu Kopiert
          }
    Sleep, 5
}

Loop, %qordner%\*.*, 2, 1 ;nur Ordner und Unterordner
  {
    StringLen, laenge, qordner
    StringTrimLeft, OutputVar, A_LoopFileFullPath, %laenge%
   
    IfNotExist, %ziel%%OutputVar%
        {
        FileCreateDir, %ziel%%OutputVar%
        wieviel ++
        logd = %logd%`n%A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%%OutputVar% neu erstellt
        }
    Loop, %qordner%%OutputVar%\*.*, 0, 0 ;nur Dateien in Unterverzeichnissen
      {
        TrayTip, Kopieren, %A_LoopFileName%, 5,
        copy_it = n
        IfNotExist, %ziel%%OutputVar%\%A_LoopFileName%  ; immer kopieren wenn im Ziel keine gleichnamige Datei ist
            copy_it = y
        Else
          {
            FileGetTime, time, %ziel%%OutputVar%\%A_LoopFileName%
            EnvSub, time, %A_LoopFileTimeModified%, Seconds  ; Subtrahiert die ÄndeRungszeit der Quelle mit dem Ziel
            If time < 0  ; Quellzeit ist neuer
              {
                copy_it = y
              }
          }
        If copy_it = y
          {
            wievielkb += %A_LoopFileSizeKB%
            IfExist, %ziel%%OutputVar%\%A_LoopFileName%
              {
              logd = %logd%`n%A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%%OutputVar%\%A_LoopFileName% überschrieben
              wieviel ++
              FileCopy, %A_LoopFileFullPath%, %ziel%%OutputVar%\%A_LoopFileName%, 1   ; Kopieren mit überschreiben
              If ErrorLevel
                  MsgBox, Datei "%A_LoopFileFullPath%" konnte nicht nach "%ziel%%OutputVar%\%A_LoopFileName%" kopiert werden.
              Continue
              }
            wieviel ++
            FileCopy, %A_LoopFileFullPath%, %ziel%%OutputVar%\%A_LoopFileName%, 1   ; Kopieren mit überschreiben
            If ErrorLevel
                MsgBox, Datei "%A_LoopFileFullPath%" konnte nicht nach "%ziel%%OutputVar%\%A_LoopFileName%" kopiert werden.
            logd = %logd%`n%A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%%OutputVar%\%A_LoopFileName% Neu Kopiert
          }
        Sleep, 5
      }
  }
TrayTip, Löschen, Überflüssige Dateien im Ziel Suchen und Löschen, 20,
Loop, %ziel%\*.*, 1, 1 ;Ziel durchsuchen
{
   ordner =
  StringLen, laenge, ziel ;Länge des Quellpfads
  StringTrimLeft, zielufile, A_LoopFileFullPath, %laenge% ;Quellpfad von aktuellen Datei entfernen
  IfNotExist, %qordner%%zielufile% ;ist die Zieldatei im Quellordner vorhanden?
  {
;     MsgBox, %A_LoopFileFullPath% %A_LoopFileAttrib%
    IfInString A_LoopFileAttrib, D ;ist Ordner?
      {
;       MsgBox, Ordner %A_LoopFileFullPath% löschen
      ordner = ##Ordner##
      FileRemoveDir, %A_LoopFileFullPath%, 1
      }
  FileDelete, %A_LoopFileFullPath%
  wieviel ++
  logd = %logd%`n%A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ordner% %A_LoopFileFullPath% wurde gelöscht!
  }

}
TrayTip, Datum, Ordnerdatum anpassen..., 30,
Loop, %qordner%\*.*, 1, 1 ;Datum der Dateien und Ordner anpassen
{
   StringLen, laenge, qordner ;Länge des Quellpfads
  StringTrimLeft, qordnerufile, A_LoopFileFullPath, %laenge% ;Quellpfad von aktuellen Datei entfernen
  Filedate := A_LoopFileTimeCreated
  Filedate2 := A_LoopFileTimeModified
   FileSetTime, %Filedate%, %ziel%%qordnerufile%, C, 1, 0
   FileSetTime, %Filedate2%, %ziel%%qordnerufile%, M, 1, 0
   
}
Loop, %qordner%\*.*, 0, 0 ;Datum der Dateien und Ordner anpassen Rootordner
{
   StringLen, laenge, qordner ;Länge des Quellpfads
  StringTrimLeft, qordnerufile, A_LoopFileFullPath, %laenge% ;Quellpfad von aktuellen Datei entfernen
  Filedate := A_LoopFileTimeCreated
  Filedate2 := A_LoopFileTimeModified
   FileSetTime, %Filedate%, %ziel%%qordnerufile%, C, 1, 0
   FileSetTime, %Filedate2%, %ziel%%qordnerufile%, M, 1, 0
   
}
TrayTip,
If logd =
  {
  MsgBox, Keine Dateien Bearbeitet!
  ExitApp
  }
StringLen, kblaenge, wievielkb
if kblaenge > 4
{
SetFormat, float, 0.1
wievielkb := wievielkb / 1024
wievielkb = %wievielkb% MB
Goto, kbjump
}
wievielkb = %wievielkb% kB
kbjump:
MsgBox, Fertig!`n`n%wieviel% Dateien und Ordner verarbeitet(%wievielkb% kopiert)
FileAppend, `n`n------------------%A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec-------------------%logd%`nFertig!--Verarbeitet: %wieviel% Dateien und Ordner(%wievielkb% kopiert), %ScriptName%_Log.txt
run, %ScriptName%_Log.txt, , Max


BoBo hat Folgendes geschrieben:
Hatte von einer CheckBox (Einstellung als Default, Ja/Nein) gesprochen, nicht von einer MsgBox.

wird nachgereicht Wink
BoBo hat Folgendes geschrieben:
Sicher ein Hauptargument gegen eine Backuplösung - und zwar bis der Erste Crash oder die Syncronistaion von Daten durch schöne neue leere Datendummies erfolgt ist. ShockedWink

ich nutze immer mehr als eine sicherung,ungültige dareien sind mir glücklicherweise noch nicht unter gekommen
mehr sicherheit bieten sicherlich sharewarelösungen welche die geschriebenen daten anschließend vergleichen
_________________
Mit freundlichen Grüßen
fredchf
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fredchf



Anmeldedatum: 18.09.2006
Beiträge: 717
Wohnort: Deutschland

BeitragVerfasst am: Di Jun 19, 2007 4:32 am    Titel: Antworten mit Zitat

hallo,
hier der angekündigte nachtrag:


Code:
StringTrimRight, ScriptName, A_ScriptName, 4 ;ErweiteRung entfernen
IfExist, settings_%ScriptName%.ini
    Goto, inida
IfNotExist, settings_%ScriptName%.ini
  {
    FileSelectFolder, qordner, , , Von wo sollen die Dateien und Ordner kopiert werden? ;Ordner wählen
    If qordner =
      {
        MsgBox, Nichts gewählt!
        ExitApp
      }
    FileSelectFolder, ziel, , 1, Wohin soll kopiert werden? ;Ordner wählen
    If ziel =
      {
        MsgBox, Nichts gewählt!
        ExitApp
      }

    IniWrite, %qordner%, settings_%ScriptName%.ini, Settings, qordner ;in ini schreiben
    IniWrite, %ziel%, settings_%ScriptName%.ini, Settings, ziel ;in ini schreiben
  }
Goto, fertig
inida:
  IniRead, qordner, settings_%ScriptName%.ini, Settings, qordner,
  If qordner =
    {
      MsgBox, settings_%ScriptName%.ini fehlerhaft`nggf. löschen!
      ExitApp
    }
  IniRead, ziel, settings_%ScriptName%.ini, Settings, ziel,
  If ziel =
    {
      MsgBox, settings_%ScriptName%.ini fehlerhaft`nggf. löschen!
      ExitApp
    }
fertig:
  Gui +Resize
  Gui, Add, GroupBox, x6 y7 w470 h50 , Quellverzeichnis
  Gui, Add, GroupBox, x6 y+20 w470 h50 , Zielverzeichnis
  Gui, Add, Edit, x16 y27 w420 h20 vqordner, %qordner%
  Gui, Add, Edit, x16  y97 w420 h20 vziel, %ziel%
  Gui, Add, Button, x436 y27 w30 h20 gbrowsequelle, ...
  Gui, Add, Button, x436 y97 w30 h20 gbrowseziel, ...

  Gui, Add, Button, x6 y147 w65 h30 -Wrap gstart Default, Start
  Gui, Add, Button, x+5 y147 w65 h30 -Wrap gabbruch, Abbruch
  Gui, Add, Checkbox, x+5 y147 w90 h30 Checked vlogdatei, Logdatei erstellen
  Gui, Add, Checkbox, x+5 y147 w90 h30 Checked vdatum, Datum mit übertragen
  Gui, Font, cRed, Arial Italic
  Gui, Add, Checkbox, x+5 y147 w150 h30 Checked vloesch, Überflüssiges im Ziel löschen

  Gui, Show, h200 w488, %ScriptName% - 2 Verzeichnisse abgleichen
Return
start:
  ; ######################Start########################
  Gui, show, hide, ,
  GuiControlGet, loesch, , loesch,
  GuiControlGet, logdatei, , Logdatei,
  GuiControlGet, datum, , datum,
  GuiControlGet, qordner, , qordner,
  GuiControlGet, ziel, , ziel,
  IniWrite, %qordner%, settings_%ScriptName%.ini, Settings, qordner ;in ini schreiben
  IniWrite, %ziel%, settings_%ScriptName%.ini, Settings, ziel ;in ini schreiben
  MsgBox, 65, Ordner Spiegeln - %ScriptName%, Kopiervorgang wird nun gesstartet`,fehlende Ordner und Dateien werden im Ziel ohne Rückfrage gelöscht!`n`nvon hier wird kopiert : %qordner%`nhierher wird kopiert   : %ziel%, 15
  IfMsgBox, Cancel
    {
      Gui, Show, h200 w488, %ScriptName% - 2 Verzeichnisse abgleichen
      Return
    }
  wieviel =
  wievielkb =
  IfExist, %ScriptName%_Log.txt
      FileDelete, %ScriptName%_Log.txt
  Loop, %qordner%\*.*, 0, 0 ;nur Dateien im Root-Verzeichnis
    {
      TrayTip, Kopieren, %A_LoopFileName%, 5,
      IfNotExist, %ziel%
          {
          FileCreateDir, %ziel%
          FileAppend, %A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t#Ordner erstellt# %ziel%`n, %ScriptName%_Log.txt
          }
      copy_it = n
      IfNotExist, %ziel%\%A_LoopFileName%  ; immer kopieren wenn im Ziel keine gleichnamige Datei ist
          copy_it = y
      Else
        {
          FileGetTime, time, %ziel%\%A_LoopFileName%
          EnvSub, time, %A_LoopFileTimeModified%, Seconds  ; Subtrahiert die ÄndeRungszeit der Quelle mit dem Ziel
          If time < 0  ; Quellzeit ist neuer
              copy_it = y
        }
      If copy_it = y
        {
          wievielkb += %A_LoopFileSizeKB%
          IfExist, %ziel%\%A_LoopFileName%
            {
              FileAppend, %A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%\%A_LoopFileName%`t%A_LoopFileSizeKB%kB überschrieben`n, %ScriptName%_Log.txt
              wieviel ++
              FileCopy, %A_LoopFileFullPath%, %ziel%\%A_LoopFileName%, 1   ; Kopieren mit überschreiben
              If ErrorLevel
                {
                  MsgBox, 16, Fehler! - %ScriptName%, Datei "%A_LoopFileFullPath%" konnte nicht nach "%ziel%\%A_LoopFileName%" kopiert werden.
                  FileAppend, %A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%\%A_LoopFileName%`t%A_LoopFileSizeKB%kB ###konnte nicht kopiert werden###`n, %ScriptName%_Log.txt
                }
              Continue
            }
          wieviel ++
          FileCopy, %A_LoopFileFullPath%, %ziel%\%A_LoopFileName%, 1   ; Kopieren mit überschreiben
          If ErrorLevel
            {
              MsgBox, 16, Fehler! - %ScriptName%, Datei "%A_LoopFileFullPath%" konnte nicht nach "%ziel%\%A_LoopFileName%" kopiert werden.
              FileAppend, %A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%\%A_LoopFileName%`t%A_LoopFileSizeKB%kB ###konnte nicht kopiert werden###`n, %ScriptName%_Log.txt
              Continue
            }
          FileAppend, %A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%\%A_LoopFileName%`t%A_LoopFileSizeKB%kB Neu Kopiert`n, %ScriptName%_Log.txt
        }
      Sleep, 5
    }

  Loop, %qordner%\*.*, 2, 1 ;nur Ordner und Unterordner
    {
      StringLen, laenge, qordner
      StringTrimLeft, OutputVar, A_LoopFileFullPath, %laenge%

      IfNotExist, %ziel%%OutputVar%
        {
          FileCreateDir, %ziel%%OutputVar%
          wieviel ++
          FileAppend, %A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t#Ordner erstellt# %ziel%%OutputVar%`n, %ScriptName%_Log.txt
        }
      Loop, %qordner%%OutputVar%\*.*, 0, 0 ;nur Dateien in Unterverzeichnissen
        {
          TrayTip, Kopieren, %A_LoopFileName%, 5,
          copy_it = n
          IfNotExist, %ziel%%OutputVar%\%A_LoopFileName%  ; immer kopieren wenn im Ziel keine gleichnamige Datei ist
              copy_it = y
          Else
            {
              FileGetTime, time, %ziel%%OutputVar%\%A_LoopFileName%
              EnvSub, time, %A_LoopFileTimeModified%, Seconds  ; Subtrahiert die ÄndeRungszeit der Quelle mit dem Ziel
              If time < 0  ; Quellzeit ist neuer
                {
                  copy_it = y
                }
            }
          If copy_it = y
            {
              wievielkb += %A_LoopFileSizeKB%
              IfExist, %ziel%%OutputVar%\%A_LoopFileName%
                {
                  FileAppend, %A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%%OutputVar%\%A_LoopFileName%`t%A_LoopFileSizeKB%kB überschrieben`n, %ScriptName%_Log.txt
                  wieviel ++
                  FileCopy, %A_LoopFileFullPath%, %ziel%%OutputVar%\%A_LoopFileName%, 1   ; Kopieren mit überschreiben
                  If ErrorLevel
                    {
                      MsgBox, 16, Fehler! - %ScriptName%, Datei "%A_LoopFileFullPath%" konnte nicht nach "%ziel%%OutputVar%\%A_LoopFileName%" kopiert werden.
                      FileAppend, %A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%%OutputVar%\%A_LoopFileName%`t%A_LoopFileSizeKB%kB ###konnte nicht kopiert werden###`n, %ScriptName%_Log.txt
                    }
                  Continue
                }
              wieviel ++
              FileCopy, %A_LoopFileFullPath%, %ziel%%OutputVar%\%A_LoopFileName%, 1   ; Kopieren mit überschreiben
              If ErrorLevel
                {
                  MsgBox, 16, Fehler! - %ScriptName%, Datei "%A_LoopFileFullPath%" konnte nicht nach "%ziel%%OutputVar%\%A_LoopFileName%" kopiert werden.
                  FileAppend, %A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%%OutputVar%\%A_LoopFileName%`t%A_LoopFileSizeKB%kB ###konnte nicht kopiert werden###`n, %ScriptName%_Log.txt
                }
              FileAppend, %A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ziel%%OutputVar%\%A_LoopFileName%`t%A_LoopFileSizeKB%kB Neu Kopiert`n, %ScriptName%_Log.txt
            }
          Sleep, 5
        }
    }
  if loesch = 0
    goto, oloeschen
  TrayTip, Löschen, Überflüssige Dateien im Ziel Suchen und Löschen, 20,
  Loop, %ziel%\*.*, 1, 1 ;Ziel durchsuchen
    {
      ordner =
      StringLen, laenge, ziel ;Länge des Quellpfads
      StringTrimLeft, zielufile, A_LoopFileFullPath, %laenge% ;Quellpfad von aktuellen Datei entfernen
      IfNotExist, %qordner%%zielufile% ;ist die Zieldatei im Quellordner vorhanden?
        {
          ;     MsgBox, %A_LoopFileFullPath% %A_LoopFileAttrib%
          IfInString A_LoopFileAttrib, D ;ist Ordner?
            {
              ;       MsgBox, Ordner %A_LoopFileFullPath% löschen
              ordner = ##Ordner##
              FileRemoveDir, %A_LoopFileFullPath%, 1
            }
          FileDelete, %A_LoopFileFullPath%
          wieviel ++
          FileAppend, %A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec`t%ordner% %A_LoopFileFullPath%`t%A_LoopFileSizeKB%kB wurde gelöscht!`n, %ScriptName%_Log.txt
        }

    }
  oloeschen:
  If datum = 0
      Goto, ohnedatum
  TrayTip, Datum, Datei-und Ordnerdatum anpassen..., 30,
  Loop, %qordner%\*.*, 1, 1 ;Datum der Dateien und Ordner anpassen
    {
      StringLen, laenge, qordner ;Länge des Quellpfads
      StringTrimLeft, qordnerufile, A_LoopFileFullPath, %laenge% ;Quellpfad von aktuellen Datei entfernen
      Filedate := A_LoopFileTimeCreated
      Filedate2 := A_LoopFileTimeModified
      FileSetTime, %Filedate%, %ziel%%qordnerufile%, C, 1, 0
      FileSetTime, %Filedate2%, %ziel%%qordnerufile%, M, 1, 0

    }
  Loop, %qordner%\*.*, 0, 0 ;Datum der Dateien und Ordner anpassen Rootordner
    {
      StringLen, laenge, qordner ;Länge des Quellpfads
      StringTrimLeft, qordnerufile, A_LoopFileFullPath, %laenge% ;Quellpfad von aktuellen Datei entfernen
      Filedate := A_LoopFileTimeCreated
      Filedate2 := A_LoopFileTimeModified
      FileSetTime, %Filedate%, %ziel%%qordnerufile%, C, 1, 0
      FileSetTime, %Filedate2%, %ziel%%qordnerufile%, M, 1, 0

    }
ohnedatum:
  TrayTip,
if wieviel =
  {
  MsgBox, Keine Dateien und Ordner verarbeitet!
  ExitApp
  }
  StringLen, kblaenge, wievielkb
  If kblaenge > 3
    {
      SetFormat, Float, 0.1
      wievielkb := wievielkb / 1024
      wievielkb = %wievielkb% MB
      Goto, kbjump
    }
  wievielkb = %wievielkb% kB
kbjump:
  MsgBox, Fertig!`n`n%wieviel% Dateien und Ordner verarbeitet(%wievielkb% kopiert)
  If Logdatei = 0
      Goto, olog
  FileAppend, `n`n------------------%A_DD%.%A_MM%.%A_YYYY% %A_Hour%.%A_Min%Uhr %A_Sec% sec-------------------`nFertig!--Verarbeitet: %wieviel% Dateien und Ordner(%wievielkb% kopiert), %ScriptName%_Log.txt
 
  Run, %ScriptName%_Log.txt, , Max
olog:
  ExitApp
  Gui, Show, h200 w488, %ScriptName%
Return

browsequelle:
  FileSelectFolder, qordner, *%qordner%, , Von wo sollen die Dateien und Ordner kopiert werden? ;Ordner wählen
  If qordner =
    {
      MsgBox, Nichts gewählt!
      Return
    }
  GuiControl, , qordner, %qordner%
Return

browseziel:
  FileSelectFolder, ziel, *%ziel%, 1, Wohin soll kopiert werden? ;Ordner wählen
  If ziel =
    {
      MsgBox, Nichts gewählt!
      Return
    }
  GuiControl, , ziel, %ziel%
Return
abbruch:
  ExitApp
GuiClose:
  ExitApp

_________________
Mit freundlichen Grüßen
fredchf


Zuletzt bearbeitet von fredchf am Mi Jul 11, 2007 1:04 pm, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Gast






BeitragVerfasst am: Di Jun 19, 2007 11:40 am    Titel: Antworten mit Zitat

Zitat:
Datum mit übertragen
Wohin? In die Logdatei?
Eindeutiger wäre "Dateidatum übernehmen"

Zitat:
Überflüssiges im Ziel löschen.
Was ist hier genau mit überflüssig gemeint?
Eindeutiger wäre "Datei überschreiben"

Geschmackssache, klar.
Danke für deinen Einsatz.
Nach oben
fredchf



Anmeldedatum: 18.09.2006
Beiträge: 717
Wohnort: Deutschland

BeitragVerfasst am: Di Jun 19, 2007 12:02 pm    Titel: Antworten mit Zitat

halllo

Gast hat Folgendes geschrieben:
Was ist hier genau mit überflüssig gemeint?
Eindeutiger wäre "Datei überschreiben"


nein,überschrieben wird so oder so wenn das nötig sein sollte(änderungsdatum)
gemeint ist :
dateien und ordner die im quellverzeichnis nicht vorhanden sind werden im ziel unaufgefordert gelöscht!
_________________
Mit freundlichen Grüßen
fredchf
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Gast






BeitragVerfasst am: Di Jun 19, 2007 1:30 pm    Titel: Antworten mit Zitat

Zitat:
dateien und ordner die im quellverzeichnis nicht vorhanden sind werden im ziel unaufgefordert gelöscht!
O K A Y ! Shocked
Nach oben
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Skripte & Funktionen Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de