Backups mit 7zip

Frei nach dem Prinzip "kein Backup - kein Mitleid" stelle ich Euch eine einfache Methode vor, mit dem freien Komprimierungs-Tool 7zip einfache Backups zu erstellen.

Dabei kann man einfache Backups erstellen - hier geht es aber um Versionierung:
Das bedeutet, man kann ein Haupt-Backup erstellen und dann weitere, die nur die Änderungen enthalten.

Der Charme hierbei ist, dass man beim Wiederherstellen auch die Löschungen beachtet werden.
Das funktioniert dann indem man:
1. die Ursprungs-Version entpackt
2. die Änderungen zum gewünschten Zeitpunkt darüber extrahiert
3. und die gemachten Löschungen auch im Änderungs-Zip enthalten sind
So dass am Ende eine Kopie entsteht,, die exakt dem Inhalt des betreffenden Sicherungspunktes entspricht.

1. Basis Befehle im Beispiel

1.1. Vollbackup

7z a c:\archive.7z  c:\ZuSichern

1.2. Differenz:

Beispiel Kommando

7z u c:\archive.7z  c:\ZuSichern  -ms=off -mx=9 -t7z -u- -up0q3r2x2y2z0w2!c:\diff1.7z

Entschlüsselung der Einstellungen am Ende
Das ist immer eine Kombination aus einem Buchstaben für den entsprechenden Fall und einer Zahl für die Aktion.

FALL:
p - File exists in archive, but is not matched with wildcard.
q - File exists in archive, but doesn't exist on disk.
r - File doesn't exist in archive, but exists on disk.
x - File in archive is newer than the file on disk.
y - File in archive is older than the file on disk.
w - Can not be detected what file is newer (times are the same, sizes are different)

AKTION:
0 Ignore file (don't create item in new archive for this file)
1 Copy file (copy from old archive to new)
2 Compress (compress file from disk to new archive)
3 Create Anti-item (item that will delete file or directory during extracting). 
This feature is supported only in 7z format

1.3. Rücksicherung:

7z.exe x c:\archive.7z -oc:\recovery_path\
7z.exe x c:\archive.7z -aoa -y -oc:\recovery_path\
-aoa Overwrite All existing files without prompt.   
-y (assume Yes on all queries) switch

2. Scripte zur Automatisierung

2.1. Differenzielles Backup

Dieses Script ist dazu gedacht, Backups in einen dafür vorgesehenen Ordner zu machen.
(im Beispiel set BF=D:\\backup03\MISC-Backup\7z)

Beim ersten Mal wird ein Vollbackup gemacht.
Bei jeder weiteren Ausführung wird nur noch die Differenz genommen, so dass man einen sauberen Änderungsverlauf erhält.

Das Script wird als Textdatei FullBackup.bat gespeichert und mit dem zu sichernden Ordner als Kommandozeilenvariable gestartet.
[BatchPfad]\FullBackup.bat [Ordner der Orifginal-Dateien]

@echo off

REM === HIER ANPASSEN : ============================================================
REM Pfad zu 7zip
      set Z=C:\Program Files\7-Zip\7z.exe
REM Standard Backup Ordner
      set BF=D:\\backup03\MISC-Backup\7z

REM ============ VERARBEITUNG ======================================================
set SF=%1%
REM Hochkomma weg
set SF=%SF:"=%

REM Filename
      for /f "tokens=* delims= " %%f in ("%SF%") do set SN=%%~NXf

REM Alternativ Pfad bauen
      set SP=%SF:\\=NET\%
      set SP=%SP::=%
      set SP=%SP:"=%

REM EXCLUDE LIST
    rem -xr!*.o 
    set xcl= 
    :loop
        shift
        if "%1"=="" goto :endloop
            set xcl=%xcl% -xr!%1%
        goto :loop
    :endloop
    cls
echo EXCLUDES: %xcl%


Echo BACKUP  :  %d%%t% von %SF% 
echo PFAD    :  %BF%\%SP%\%d%%t%.7z
echo EXCLUDES:  %xcl%
echo.
echo.

REM 7Z 
      if exist "%BF%\%SP%\basis.7z" goto :increment
            Rem Backup
            "%Z%" a "%BF%\%SP%\basis.7z" "%SF%" %xcl%
            goto :end

      :increment  
            REM DATETIME
            for /f "tokens=1,2,3,4 delims=. " %%i in ('date /t') do set d=%%k-%%j-%%i
            for /f "tokens=1,2 delims=: " %%i in ('time /t') do set t=%%i%%j
            set inc=%BF%\%SP%\%d%%t%.7z

            REM Backup Incrementell
            "%Z%" u "%BF%\%SP%\basis.7z" "%SF%" -ms=off -mx=9 -t7z -u- -up0q3r2x2y2z0w2!"%inc%" %xcl%

:end

explorer.exe "%BF%\%SP%"
x