7z ist nicht nur ein Packer, es eignet sich hervorragend für schnelle incrementelle Sicherungen. Dazu muss man nicht immer die Shell aufmachen – gerade im Kommandozeilen Modus ist einiges möglch. Dadurch lassen sich Batches erstellen, die im täglichen Betrieb hilfreich sein können; vor allem, wenn man entwickelt und schnell verschiedene Versionen eines Ordners aufbehalten möchte. Besonders vorteilhaft ist hierbei, daß 7z bei Differenzsicherungen auch sogenannte Antifiles anlegt, was Platzhalter für Dateilöschungen sind. Damit werden bei der Extrahierung der Differenz über dem Master Backup auch inzwischen gelöschte Dateien entfernt.

Schauen wir uns dazu erstmal grundlegende Beispiele an:

Grundlegende Befehlsoptionen und Beispiele

Vollbackup

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

Differenz:

7z u c:\archive.7z  c:\ZuSichern  -ms=off -mx=9 -t7z -u- -up0q3r2x2y2z0w2!c:\diff1.7z
    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)
    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)

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

Rons Backup Bat:

Aus den o.g. Optionen kann man sich nun eine Batch bauen, die für beliebige Ordner in einem vorgegebenen Pfad (z.b. in einem Netzwerkordner, oder auf USB Backups anlegt.

Ich habe die Batch so gestaltet, daß sie den Pfad der zu sichernden Dateien im Backup Ordner nachbaut (Auch für UNC-Shares) und im passenden Ordner die erste Vollsicherung mit Namen „basis.7z“ erstellt. Wird die Batch noch einmal am gleichen Ordner ausgeführt, folgt die erste Differenzsicherung, die als Namen Datum und Uhrzeit erhält.

Am Besten legt man diese Bat einfach in das Sendto Verzeichnis. So kann man einfach per „Senden an..“ schnelle Backups machen. In den ersten Zeilen stehen die Pfade für 7z und den Bachop Pfad, die müssen natürlich angepasst werden.

Die Batch nimmt als ersten Parameter den zu sichernden Ordner. Alle weiteren folgenden Parameter sind Excludes.

@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:\Backup

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%"