Batchdatei zur Datensicherung mit WinRAR

Holgip

Lt. Commander
Registriert
Dez. 2012
Beiträge
1.785
Hallo,

ich hoffe, ich bin hier richtig.

Ich will mit WinRAR über eine Batchdatei eine inkrementelle Datensicherung durchführen. Dazu gibt es im Netz diverse Anleitungen, wovon ich mir eine ausgesucht und erweitert habe.
Die Datei sieht so aus:

@echo off
setlocal
set BackupDir=L:\Backup\backup_Download.rar
if NOT exist %BackupDir% goto mist
set WinrarDir=C:\Programme\Winrar
set SrcDir=D:\

REM Schwarzer Text auf grünem Hintergrund festlegen.
color a0
echo Arbeite...
echo.
echo.

rem Archiv-Attribut setzen
rem attrib +A "%SrcDir%\*" /S /D

"%WinrarDir%\winrar.exe" a -r -Y -EP -ac -ao -vn -ow -os -ep1 "%BackupDir%" "%SrcDir%"
endlocal

echo Backup Download fertig!
echo.
echo.
goto schluss

:mist
REM Gelber Text auf roten Hintergrund festlegen.
color ce
echo Backupfestplatte nicht eingeschaltet!
echo.
echo.

:schluss
pause

Soweit funkioniert auch alles, bis auf die Löschung des Archivbits. WinRAR archiviert also immer alles!
Beim Ausprobieren im Windows CMD habe ich festgestellt, dass das Archivbit gelöscht wird, wenn man eine Datei angibt, also z.B.: "winrar.exe a -r -Y -EP -ac -ao -vn -ow -os -ep1 test.rar d:\test.txt"
Wenn ich allerdings das ganze Laufwerk D: sichern will, also z.B.: "winrar.exe a -r -Y -EP -ac -ao -vn -ow -os -ep1 test.rar d:\" wird auch im CMD das Archivbit nicht gelöscht.

Hat jemand ein Ahnung, was da los sein könnte?

Gruß

Holgip
 
Vor dem Aufruf von WinRAR werden alle Archiv-Attribute rekursiv gesetzt. Zum Entfernen muss man -A statt +A angeben, und das nach dem Aufruf von WinRAR.
 
Hallo H4110,

erstmal vielen Dank für deine Antwort.
Das Setzen der Archivattribute bezieht sich vermutlich auf die Zeile "rem attrib +A "%SrcDir%\*" /S /D". Das ist nur drin, damit man ab und an ein komplettes Backup machen kann, im Normalfall ist die Zeile auskommentiert (rem!)
WinRAR besitzt mit dem Schalter "-ac" die Möglichkeit, das Archivbit zu löschen. Warum ich dann noch über Windows das erledigen müsste, erschließt sich mir nicht.
Das Löschen funktioniert mit einzelnen Dateien einwandfrei, auch mit einem Ordner ohne Unterordner. Nur beim Sichern kompletter Laufwerke oder Ordnern mit Unterordnern klappt die Löschung des Archivbits nicht.

Gruß

Holgip
 
Oh, das rem habe ich übersehen. Ich dachte daran, attrib als Workaround zu verwenden, wenn WinRAR die Attribute nicht entfernt, was ich für einen Bug in WinRAR halte. Probier mal aus, ob es wie gewünscht funktioniert, wenn man "D:\*" anstatt "D:\" angibt.
 
Ich hab zwar nicht wirklich Ahnung von Scripten, aber sollte man in der Kommandozeile nicht eher die Rar.exe benutzen anstatt WinRar.exe?

Aufruf: rar <Befehl> -<Schalter 1> -<Schalter N> <Archiv> <Dateien...>
<@Dateilistendateien...> <Zielverzeichnispfad\>

<Schalter>
- Schalterbearbeitung abbrechen
ac Archivattribut nach dem Packen oder Entpacken löschen

sagt die Auflistung nach aufrufen von Rar.exe aus
 
@H4110: Hab ich schon probiert, nutzt auch nichts. Wenn das ein Bug von WinRAR ist, werde ich es dann doch mit "attrib -A "%SrcDir%\*" /S /D" machen. Habe aber im Internet noch keine Beschreibung oder Anfrage bezüglich dieses Bugs gesehen.

@Waldheinz: Habe ich auch schon versucht, leider mit dem gleichen Ergebnis. WinRAR.exe und RAR.exe benutzen anscheinend die gleichen DLL's.

Gruß

Holgip
 
Vielleicht geht es mit anderen Packern, aber ich bin WinRAR gewohnt und habe keine Lust, andere Packer auszuprobieren.
Im Moment belasse ich es jetzt beim nachträglichen Löschen des Archivattributes.
Ich habe die Batchdatei etwas erweitert, vielleicht hat jemand Interesse daran.
Man wird gefragt, ob man ein vollständiges Backup machen will oder nicht. Die vielen "echo." dienen zur Übersichtlichkeit:

@echo off
setlocal
set BackupDir=L:\Backup\backup_Download.rar
rem Abfrage, ob Festplatte eingeschaltet ist
if NOT exist %BackupDir% goto mist
set WinrarDir=C:\Programme\Winrar
set SrcDir=D:\

REM Schwarzer Text auf grünem Hintergrund festlegen.
color a0
set /P Eingabe=Vollständiges Backup erstellen (J/N)?
echo.
echo.
if %Eingabe%==n goto weiter
rem Archiv-Attribut setzen
attrib +A "%SrcDir%\*" /S /D
echo Attribute bei allen Dateien gesetzt
echo.
pause

:weiter
echo.
echo Archiviere...
echo.
echo.
"%WinrarDir%\winrar.exe" a -r -Y -EP -ac -ao -esh -vn -ow -os -ep1 "%BackupDir%" "%SrcDir%"
attrib -A "%SrcDir%\*" /S /D
endlocal

echo Backup Download fertig!
echo.
echo.
goto schluss

:mist
REM Gelber Text auf roten Hintergrund festlegen.
color ce
echo Backupfestplatte nicht eingeschaltet!
echo.
echo.

:schluss
pause

Die "pause" nach dem Setzen des Archivattributes ist anscheinend notwendig. Fehlt sie, beginnt WinRAR schon mit der Archivierung und die Attribute der meisten Dateien sind noch nicht gesetzt. Leider versucht Windows auch bei den schreibgeschützten und versteckten Dateien das Attribut zu setzen bzw. zu löschen und bringt dann im Fenster eine Fehlermeldung. Ich habe noch keine Möglichkeit gefunden, das zu verhindern.
In WinRAR selbst sorgt der Schalter "-esh" dafür, dass schreibgeschützte und versteckte Dateien nicht archiviert werden.

Gruß

Holgip
 
Zurück
Oben