dontknow
Goto Top

Backup mit Sicherung der alten Daten

Hallo zusammen!

Ich habe schon lange gesucht, und bis jetzt nicht das ganz passende gefunden...
Ich mache per Batch-Datei ein Inkrementelles Backup (wahlweise Robocopy oder xcopy).
Funktiniert auch alles recht gut.
Ich hätte gerne noch die Option, dass alten die Dateien und Ordner (im Robocopy-logfile als "Older" gekennzeichnet) und die in der Quelle gelöschten Dateien und Ordner (im Robocopy-logfile als "*EXTRA File / Extra Dir" gekennzeichnet). in einen separaten Ordner geschoben werden (den ich mit Zeitstempel versehen würde).
Das Ziel ist, immer ein genaues Abbild des Quellordners zu haben aber die alten Daten nicht einfach zu überschreiben und die "Extra Files" nicht einfach zu löschen, da man die u.U. nochmal brauchen könnte, wenn man sich was zeschossen hat, und es zu spät merkt.
Das wäre meines Erachtens nach eine sehr übersichtliche und sichere Lösung, aber ich bekomme es so nicht hin!

Wie vorne schon geschrieben, suche ich schon recht lange (auch in diesem Forum), habe aber bis jetzt noch nicht das richtige gefunden. Ich hoffe nicht, dass ich zu blöd zum suchen bin, weil ich doch meine, dass so etwas doch für viele User Sinn machen würde.

Danke schonmal im Voraus für die Mühen!

PS: Das Forum ist einsame Spitze für alles um Windos und speziell für alle Batch Tricks und Kniffe

Gruß

Michael

Content-Key: 73509

Url: https://administrator.de/contentid/73509

Printed on: April 19, 2024 at 10:04 o'clock

Member: Biber
Biber Nov 14, 2007 at 21:35:28 (UTC)
Goto Top
Na ja, dontknow,

dann mal "Butter bei die Fische", wie man/frau bei uns sagt.
Dann poste doch mal die relevanten Ausschnitte Deines Batches und vor allem einen "typischen" Beispielausschnitt des Robocopy-Logfiles.

Sonst bleibt es zu abstrakt und auch zu dröge für die MitleserInnen...

Grüße
Biber
Member: dontknow
dontknow Nov 14, 2007 at 22:29:04 (UTC)
Goto Top
Hallo zusammen,

hier die wichtige Zeile meiner Batch:

robocopy D:\ \\192.168.5.252\Michael\DS-NB-Akt\D\ /B /E /R:3 /W:2 /LOG:D:\LogDSH-F.txt

In der LogDSH-F.txt steht dann z.B. so etwas drin:

Older 43 desktop.ini 0% 100%
1 D:\Entwicklungen\
*EXTRA Dir -1 \\192.168.5.252\Michael\DS-NB-Akt\D\Entwicklungen\_bv-hw\
*EXTRA Dir -1 \\192.168.5.252\Michael\DS-NB-Akt\D\Entwicklungen\PC-Geh
New File 373760 #Aufkleber-BV-PC.doc 0% 17% 35% 52% 70% 87% 100%

(Die Tabelle nur, damit es lesbar ist, ist eine normale ASCII mit Tabs)

Ich hätte gerne in diesem Fall die Desktop.ini und die beiden "*Extra Dir" auf der Netzwerkplatte in einen definierten Ordner verschoben (oder vor der eigentlichen Sicherung kopiert), dann könnte ich Robocopy so einstellen, dass es die "Older" Files überschreibt und die "*Extra..." löscht.
Die Löschung und Überschreibung möchte ich aber nicht ohne die vorherige Sicherung machen, da es ja mal sein kann, dass man sich Daten löscht oder "kaputtbearbeitet".
Wenn man dass erst nach der nächsten Datensicherung merkt, ist es zu spät.
Ich wollte dann immer neue Ordner mit den "alten Ständen" erzeugen, die man dann nach einigen Montaten nach Bedarf löschen kann.
Ich hoffe, ich konnte mein Anliegen näher bringen, wäre toll, wenn jemand da eine gute Idee hat!

Das muss auch nicht unbedingt mit Robocopy gelöst werden, alles was sich irgendwie "Batchen" lässt ist OK für mich.
(natürlich so einfach wie möglich face-wink )

Danke

Michael
[Edit Biber] Hier noch mal für die echten Bätcher im Original:
Older		 43		 desktop.ini    0%  100%					 
 		 1		 D:\Entwicklungen\						 
*EXTRA Dir	 -1		 \\192.168.5.252\Michael\DS-NB-Akt\D\Entwicklungen\_bv-hw\	 
*EXTRA Dir	 -1		 \\192.168.5.252\Michael\DS-NB-Akt\D\Entwicklungen\PC-Geh	 
New File	 373760	 #Aufkleber-BV-PC.doc  0%  17%   35%   52%   70%   87%  100%	 
[/Edit]
Member: miniversum
miniversum Nov 15, 2007 at 07:19:31 (UTC)
Goto Top
Hier mal meine ungetestete Idee dazu:
@echo off
setlocal enabledelayedexpansion
set "quelle=C:\quellordner"  
set "ziel=C:\sicherungsordner"  
set "backup=C:\backupordner\%date%"  

:: Auslesen welche Dateien und Verzeichnisse kopiert werden wuerden in eine temponaere Liste
xcopy "%quelle%" "%ziel%" /c /s /e /r /v /d /y /i /h /f /o /x /L>"%temp%\liste.txt"  

:: Kopieren der Dateien in der Liste zum Backup
FOR /F "delims=" %%f in ("%temp%\liste.txt") do (  
set "backuppart=%%f"  
set "backuppart=!backuppart:%ziel%=!"  
copy "%%f" "%backup%\%backuppart%"  
)

:: Nun kopieren des Dateien und Verzeichnisse
xcopy "%quelle%" "%ziel%" /c /s /e /r /v /d /y /i /h /f /o /x  

:: Loeschen der temponaeren Liste
del "%temp%\liste.txt"  

miniversum
Member: dontknow
dontknow Nov 22, 2007 at 19:58:00 (UTC)
Goto Top
Hallo und danke für den Tipp nochmal!

Sorry wegen der späten Meldung, aber ich habe in den letzten Tagen erst viel an diesem Problem weitergebastelt...
Der Tipp hat bei mir zwar so nicht funktioniert, aber die Idee mit der Liste war super!!!
Aber nochmal zu Verständnis:
Muss hier nicht was mit "Tokens" rein?
FOR /F "delims=" %%f in ("%temp%\liste.txt") do (  
Und was soll diese Zeile ganu bewirken:
set "backuppart=!backuppart:%ziel%=!"  
Ich habe die Listen-Idee etwas verändert und erweitert,
hier mein derzeitiger Stand:

@echo off
if exist BackupFehler.txt del BackupFehler.txt
for /F "tokens=1,2" %%a in ('Date /T') do set HEUTE=%%a  

set Quelle=D:\
set /p "ZielDisk=Bitte Sicherungslaufwerk angeben (ohne :) "  
set "Backup=%ZielDisk%:\DatenSicherung-NB\Backup_%HEUTE:~8,4%%HEUTE:~3,2%%HEUTE:~0,2%"  
set "Ziel=%ZielDisk%:\DatenSicherung-NB\D"  
::!!!Unbedingt bei :BackupExtraFile den Eintrag ":~23," an die Länge des Zielpfads anpassen!!! 
set /p "Ablauf=Nur (S)icherung oder mit (B)ackup: "  
if %Ablauf%==s goto Sichern

::Liste der Backup-Dateien erstellen
robocopy %Quelle% %Ziel% /B /FFT /MIR /R:3 /W:2 /XD $_ $PArchiv Recycler "System Volume Information" /NDL /NS /NJH /NJS /L >"ListeBackup.txt"  

:: Kopieren der Dateien in der Liste zum Backup
FOR /F "tokens=1,2 delims=	" %%i in (ListeBackup.txt) do call :BackupLoop "%%i" "%%j%"  

:Sichern
echo.
echo Beginne mit der Sicherung....
echo.
robocopy %Quelle% %Ziel% /B /FFT /MIR /R:3 /W:2 /XD $_ $PArchiv Recycler "System Volume Information"  
robocopy "C:\Dokumente und Einstellungen\Keite\Desktop" "%ZielDisk%:\DatenSicherung-NB\Desktop" /B /FFT /MIR /R:3 /W:2  
if %ERRORLEVEL% GEQ 8 goto EndeFehler
if exist BackupFehler.txt goto EndeFehler

:EndeErfolg
echo.
echo ###########################################
echo # Die Sicherung wurde erfolgreich beendet! 
echo # (Robocopy-Ergebnis %ERRORLEVEL% )          
echo # Taste drcken um Fenster zu schlieáen... 
echo ###########################################
Pause >nul
goto :EOF

:EndeFehler
if exist BackupFehler.txt call BackupFehler.txt
echo.
echo ###########################################
echo # Es ist ein Fehler aufgetreten!           
echo # (Robocopy-Fehler %ERRORLEVEL% )          
echo # Taste drcken um Fenster zu schlieáen... 
echo ###########################################
Pause >nul
goto :EOF

:----------------------------------------------Backup-Subroutine
:BackupLoop

set FileTyp=%1
echo %FileTyp%
if %FileTyp%=="    New File  " goto EndeBackupLoop  
if %FileTyp%=="    Newer     " goto BackupNewFile  
if %FileTyp%=="  *EXTRA File " goto BackupExtraFile  
goto EndeBackupLoop

:BackupNewFile
set BackupQuellPfad=%2
set BackupQuellPfad=%Ziel%%BackupQuellPfad:~3,-1%
set BackupZielPfad=%2
set BackupZielPfad=%Backup%%BackupZielPfad:~3,-1%*
xcopy "%BackupQuellPfad%" "%BackupZielPfad%" /S /V /H /R /Y /C  
if NOT %ERRORLEVEL%==0 echo ERR-BcpNF bei: "%BackupQuellPfad%" >>BackupFehler.txt  
goto EndeBackupLoop

:BackupExtraFile
set BackupQuellPfad=%2
set BackupQuellPfad=%BackupQuellPfad:~1,-1%
set BackupZielPfad=%2
set BackupZielPfad=%Backup%%BackupZielPfad:~23,-1%*
xcopy "%BackupQuellPfad%" "%BackupZielPfad%" /S /V /H /R /Y /C  
if NOT %ERRORLEVEL%==0 echo ERR-BcpEF bei: "%BackupQuellPfad%" >>BackupFehler.txt  

:EndeBackupLoop
goto :EOF
:----------------------------------------------Backup-Subroutine-Ende

Zur Erläuterung:
Erstmal lösche ich die alter Fehler-Logdatei und erstelle eine Variable für einen Zeitstempel.
Dann frage ich das Sicherungslaufwerk ab, da ich je nach Standort auf eine andere Platte sichern möchte
Das Verzeichnis "DatenSicherung-NB" bleibt gleich,
Dann werden die Pfade für "Backup" und "Ziel" erstellt.
Die Liste selber erstelle ich mit Robocopy, da gibts einige Optionen,
die eine Übersichtliche Gestaltung der Liste ermöglichen und den überflüssigen Kram raus lassen.
Der große Vorteil hierbei ist, dass von Robocopy die "Extra-Files" mit angegeben werden
(um die kümmert sich xcopy meines Wissens leider nicht).
Dann wird jeder Listeneintrag in einer Schleife abgearbeitet:
-Abfrage ob der Eintrag überhaupt als Backup in Frage kommt (Bei "New File" nicht nötig)
-Die entsprechende Backupschleife ausführen (notwendig, weil die "Newer" und
"Extra" Files jewils andere Pfadangaben in der Liste haben)
-Fehler bei einem Backup-Vorgang werden in der Datei "BackupFehler.txt" hinterlegt.

Danach wird die eigentliche Datensicherung (!und Löschung der überflüssigen!) mittels Robocopy durchgeführt.
Zum guten Schluss gibts noch ne Meldung, ob alles OK war, oder ob Fehler aufgetreten sind.
Das kann man nochwesentlich komfortabler gestalten, für die Robocopy-Fehlercodes
gibt es einen schönen "Einbauvorschlag" für Batch-Dateien in der Doku...

Jetzt aber genug vom Geschwafel!
Danke nochmal für den Tipp und wenn jemand noch Verbesserungsvorschläge hat oder Fragen,
immer her damit, werden stets gerne genommen (Zumal das alles trotz erster erfolgreicher Tests
keinen Anspruch auf Perfektion erhebt) face-wink

Michael
Member: miniversum
miniversum Nov 22, 2007 at 20:39:14 (UTC)
Goto Top
Zur Erklärung:
Mit
FOR /F "delims=" %%f in ("%temp%\liste.txt") do (
set "backuppart=%%f"
wird jede Zeile einzeln aus der Datei ausgelesen und in die Variable backuppart geschrieben. Dort steht dann der Dateiname mit Pfadangabe der Dateien drin die den Zielordner kopiert werden würden. Die Pfadangabe ist allerdings die des Zielordners. Daher wird hier mit
set "backuppart=!backuppart:%ziel%=!"
Der Teil des textes der gleich dem Zielordner entspricht einfach entfernt (siehe dazu set /?) und beim vorherigen sichern der Backupordner davor gestellt.

miniversum