 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
fredchf
Anmeldedatum: 18.09.2006 Beiträge: 717 Wohnort: Deutschland
|
Verfasst am: Fr Jun 15, 2007 10:11 am Titel: Spiegelung 2er Verzeichnisse(Backup) |
|
|
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 |
|
 |
BoBo¨ Gast
|
Verfasst am: Fr Jun 15, 2007 10:30 am Titel: |
|
|
Danke für diesen Beitrag.
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
|
|
| Nach oben |
|
 |
Thalon
Anmeldedatum: 25.10.2005 Beiträge: 1896 Wohnort: Österreich
|
Verfasst am: Fr Jun 15, 2007 12:42 pm Titel: |
|
|
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 |
|
 |
fredchf
Anmeldedatum: 18.09.2006 Beiträge: 717 Wohnort: Deutschland
|
Verfasst am: Fr Jun 15, 2007 10:42 pm Titel: |
|
|
hallo,
erstmal vielen dank für eure resonanz ,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!  _________________ Mit freundlichen Grüßen
fredchf |
|
| Nach oben |
|
 |
Gast
|
Verfasst am: Sa Jun 16, 2007 1:23 pm Titel: |
|
|
| Zitat: | | möchte ich darauf verzichten eine löschabfrage einzubauen | Hatte von einer CheckBox (Einstellung als Default, Ja/Nein) gesprochen, nicht von einer MsgBox.
| 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.   |
|
| Nach oben |
|
 |
Lirave Gast
|
Verfasst am: Sa Jun 16, 2007 9:19 pm Titel: |
|
|
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
|
Verfasst am: So Jun 17, 2007 8:12 am Titel: |
|
|
| 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
|
Verfasst am: So Jun 17, 2007 12:38 pm Titel: |
|
|
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
|
Verfasst am: So Jun 17, 2007 2:19 pm Titel: |
|
|
| 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 |
|
 |
fredchf
Anmeldedatum: 18.09.2006 Beiträge: 717 Wohnort: Deutschland
|
Verfasst am: So Jun 17, 2007 4:07 pm Titel: |
|
|
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...
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
| 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 |
|
 |
fredchf
Anmeldedatum: 18.09.2006 Beiträge: 717 Wohnort: Deutschland
|
Verfasst am: Di Jun 19, 2007 4:32 am Titel: |
|
|
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 |
|
 |
Gast
|
Verfasst am: Di Jun 19, 2007 11:40 am Titel: |
|
|
| 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
|
Verfasst am: Di Jun 19, 2007 12:02 pm Titel: |
|
|
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 |
|
 |
Gast
|
Verfasst am: Di Jun 19, 2007 1:30 pm Titel: |
|
|
| Zitat: | | dateien und ordner die im quellverzeichnis nicht vorhanden sind werden im ziel unaufgefordert gelöscht! | O K A Y !  |
|
| Nach oben |
|
 |
|
|
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
|