Alte Backups automatisch löschen
Hallo,
ich habe folgende Situation:
- Ich möchte wöchentliche automatische Backups von normalen Dokumenten auf die selbe HD durchführen.
- Nun hätte ich noch gerne den Wunsch, dass diese Backup-Ordner immer nach dem jeweiligen Datum benannt werden.
- Nach jedem erfolgreich durchgeführtem Backup sollten alle ausser die letzten 4 Backups gelöscht werden. (ich möchte nur die Backups der letzten 4 Wochen haben, also 4 Ordner)
Gibt es dazu eine Möglichkeit, dies in eine .bat Datei zu schreiben oder kennt hier jemand ein Tool, welches derartiges bewältigen kann?
Danke für alle Antworten
ich habe folgende Situation:
- Ich möchte wöchentliche automatische Backups von normalen Dokumenten auf die selbe HD durchführen.
- Nun hätte ich noch gerne den Wunsch, dass diese Backup-Ordner immer nach dem jeweiligen Datum benannt werden.
- Nach jedem erfolgreich durchgeführtem Backup sollten alle ausser die letzten 4 Backups gelöscht werden. (ich möchte nur die Backups der letzten 4 Wochen haben, also 4 Ordner)
Gibt es dazu eine Möglichkeit, dies in eine .bat Datei zu schreiben oder kennt hier jemand ein Tool, welches derartiges bewältigen kann?
Danke für alle Antworten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 170048
Url: https://administrator.de/contentid/170048
Ausgedruckt am: 25.11.2024 um 06:11 Uhr
14 Kommentare
Neuester Kommentar
Hallo Goalgetter,
Bei Erfolg hat
Weitere Möglichkeit:
Es werden alle Verzeichnisse bis auf die vier jüngsten gelöscht.
Gruß
Friemler
- Geplanten Task anlegen und mit
XCOPY
kopieren. Siehexcopy /?
. md "BackupVerzeichnis\Backup-%date:.=-%"
- Folgender Code löscht im Backupverzeichnis alle Verzeichnisse älter als 28 Tage:
@echo off & setlocal
set "VBScript=%Temp%\DeleteOlderThan4Weeks.vbs"
> "%VBScript%" echo If WScript.Arguments.Count ^> 0 Then
>>"%VBScript%" echo Set objFSO = CreateObject("Scripting.FileSystemObject")
>>"%VBScript%" echo If objFSO.FolderExists(WScript.Arguments(0)) Then
>>"%VBScript%" echo For Each objFolder In objFSO.GetFolder(WScript.Arguments(0)).SubFolders
>>"%VBScript%" echo If DateDiff("d", objFolder.DateCreated, Now) ^> 28 Then objFolder.Delete(True)
>>"%VBScript%" echo Next
>>"%VBScript%" echo WScript.Quit 0
>>"%VBScript%" echo Else
>>"%VBScript%" echo WScript.Quit 1
>>"%VBScript%" echo End If
>>"%VBScript%" echo Else
>>"%VBScript%" echo WScript.Quit 2
>>"%VBScript%" echo End If
cscript /nologo "%VBScript%" "Laufwerk:\Pfad\Backupverzeichnis"
del "%VBScript%"
ERRORLEVEL
den Wert 0, wenn des übergebene Verzeichnis nicht gefunden wurde den Wert 1 und bei fehlendem Verzeichnis den Wert 2.Weitere Möglichkeit:
@echo off & setlocal
set "BackupDir=Z:\Backups"
for /f "skip=4 delims=" %%d in ('dir /b /a:d /t:c /o:-d "%BackupDir%"') do (
rd /s /q "%BackupDir%\%%d"
)
Gruß
Friemler
Hallo Goalgetter,
Du kannst mein Script von oben in das Backupscript einbauen. Das VBScript wird als temporäre Datei aus dem Batchscript heraus erzeugt und ausgeführt. Ob Du den Aufruf (die Zeile mit
BTW:
Gruß
Friemler
Du kannst mein Script von oben in das Backupscript einbauen. Das VBScript wird als temporäre Datei aus dem Batchscript heraus erzeugt und ausgeführt. Ob Du den Aufruf (die Zeile mit
cscript /nologo
) vor oder nach dem XCOPY
einbaust bleibt Dir überlassen. Davor wäre geschickter, dann wird vor einem neuen Backup erstmal Platz geschaffen. Allerdings verlierst Du Backups, falls das neue Backup fehlschlägt.BTW:
XCOPY /E
ist zu wenig. Setze Dich besser nochmal mit den Parametern von XCOPY
auseinander.Gruß
Friemler
Nachtrag:
Für den Zeitstempel hätte ich noch diese Idee:
Damit wird ein Zielverzeichnis erstellt, dessen Name das Format
Gruß
Friemler
Für den Zeitstempel hätte ich noch diese Idee:
@echo off & setlocal
set "quelle=QUELLENPFAD"
set "ziel=ZIELPFAD"
set "VBScript=%Temp%\GetTimeStamp.vbs"
> "%VBScript%" echo WScript.Echo Year(Now) ^& "-" ^& Month(Now) ^& "-" ^& Day(Now) ^& " - " ^& Hour(Now) ^& "-" ^& Minute(Now) ^& "-" ^& Second(Now)
for /f "delims=" %%t in ('cscript /nologo "%VBScript%"') do set "TimeStamp=%%t"
del "%VBScript%"
md "%Ziel%\%TimeStamp%"
xcopy "%quelle%" "%ziel%\%TimeStamp%"
Damit wird ein Zielverzeichnis erstellt, dessen Name das Format
JJJJ-MM-TT - HH-MM-SS
hat. Sowas lässt sich leichter sortieren.Gruß
Friemler
Hallo Goalgetter,
Zeile 17 kannst Du Dir sparen und die
Den Paramter
Da Zeile 11 ein simpler
Du solltest evtl.
Gruß
Friemler
Zeile 17 kannst Du Dir sparen und die
FOR
-Schleife ab Zeile 21 müsste dann so lauten:for /f "skip=4 delims=" %%d in ('dir /b /a:d /t:c /o:-d "%ziel%"') do (
rd /s /q "%ziel%\%%d"
)
Den Paramter
/I
bei XCOPY
brauchst Du nur, wenn das Ziel der Kopieraktion nicht existiert. Dann wird das Ziel als Name eines Verzeichnisses interpretiert und dieses Verzeichnis auch angelegt. Du könntest Dir in dem Fall Zeile 13 (md "%Ziel%\%TimeStamp%"
) sparen.Da Zeile 11 ein simpler
DEL
-Befehl ist, gehe ich davon aus, dass Du Zeile 10 meintest. Hier wird mit cscript /nologo "%VBScript%"
das temporäre VBScript gestartet, das in Zeile 8 erstellt wurde. Die Ausgabe dieses Scripts wird durch die FOR
-Schleife an die Variable TimeStamp
zugewiesen. Grund für dieses Vorgehen ist, das Programme/Scripts nur numerische Werte zurückliefern können, keine Zeichenketten. Ausführliche Informationen zur FOR
-Schleife liefert mein Tutorial zur FOR-Schleife.Du solltest evtl.
XCOPY
noch den Parameter /Z
übergeben, wenn Du auf eine Netzwerkfreigabe kopieren willst. Wenn ein Fehler beim kopieren einer Datei auftritt, wird dann der Kopiervorgang für diese Datei neu gestartet.Gruß
Friemler
Hallo Goalgetter,
Du brauchst in Zeile 4 nichts einzufügen.
Halt, nicht ganz: Ändere zusätzlich Zeile 3 auf
Als Backupziel das C:-Laufwerk zu nehmen ist eine schlechte Idee.
Gruß
Friemler
[EDIT]
Betr. Screenshot: Der Fehler verschwindet durch den Parameter
Und um sämtliche Unklarheiten zu beseitigen:
[/EDIT]
Du brauchst in Zeile 4 nichts einzufügen.
%TimeStamp%
kann hier auch nicht funktionieren, da die Variable zum Anfang des Scripts noch garnicht definiert ist. Das passiert ja erst in Zeile 10. Schreibe in Zeile 4 einfach set "ziel=C:\Backup"
, lass' Zeile 5 weg und füge zum XCOPY
-Befehl noch den Parameter /I
hinzu, dann sollte es funktionieren.Halt, nicht ganz: Ändere zusätzlich Zeile 3 auf
set "quelle=C:\test1"
, sonst hast Du die Anführungszeichen als Bestandteil der Variablen, was Fehler verursacht. Deshalb auch meine kleine Änderung für Deine Zeile 4.Als Backupziel das C:-Laufwerk zu nehmen ist eine schlechte Idee.
Gruß
Friemler
[EDIT]
Betr. Screenshot: Der Fehler verschwindet durch den Parameter
/I
von XCOPY
.Und um sämtliche Unklarheiten zu beseitigen:
@echo off & setlocal
set "quelle=C:\test1"
set "ziel=D:\Backup"
set "VBScript=%Temp%\GetTimeStamp.vbs"
> "%VBScript%" echo WScript.Echo Year(Now) ^& "-" ^& Month(Now) ^& "-" ^& Day(Now) ^& " - " ^& Hour(Now) ^& "-" ^& Minute(Now)
for /f "delims=" %%t in ('cscript /nologo "%VBScript%"') do set "TimeStamp=%%t"
del "%VBScript%"
xcopy /ecyzi "%quelle%" "%ziel%\%TimeStamp%"
for /f "skip=4 delims=" %%d in ('dir /b /a:d /t:c /o:-d "%ziel%"') do (
rd /s /q "%ziel%\%%d"
)
Hallo Goalgetter,
klar ist das möglich:
Du musst die Quellen in Zeile 3 angeben, immer durch ein Leerzeichen getrennt. Wenn der Pfad einer Quelle selbst Leerzeichen enthält, muss der Pfad, so wie im Beispiel das Verzeichnis
Wenn das Backup z.B. heute um 22:00 Uhr gestartet würde, würde folgende Verzeichnisstruktur entstehen:
Damit Monat, Tag, Stunde und Minuten immer 2-stellig angegeben werden, die kleinen Änderungen im VBScript.
Gruß
Friemler
klar ist das möglich:
@echo off & setlocal
set "Quellen=C:\Test1 "C:\Anderes Verzeichnis""
set "Ziel=D:\Backup"
set "Aufheben=4"
set "VBScript=%Temp%\GetTimeStamp.vbs"
> "%VBScript%" echo WScript.Echo Year(Now) ^& "-" ^& Right("0" ^& Month(Now), 2) ^& "-" ^& Right("0" ^& Day(Now), 2) ^& " - " ^& Right("0" ^& Hour(Now), 2) ^& "-" ^& Right("0" ^& Minute(Now), 2)
for /f "delims=" %%t in ('cscript /nologo "%VBScript%"') do set "TimeStamp=%%t"
del "%VBScript%"
for /d %%q in (%Quellen%) do (
xcopy /ecyzi "%%~q" "%Ziel%\%TimeStamp%\%%~nxq"
)
for /f "skip=%Aufheben% delims=" %%d in ('dir /b /a:d /t:c /o:-d "%Ziel%"') do (
rd /s /q "%Ziel%\%%d"
)
Du musst die Quellen in Zeile 3 angeben, immer durch ein Leerzeichen getrennt. Wenn der Pfad einer Quelle selbst Leerzeichen enthält, muss der Pfad, so wie im Beispiel das Verzeichnis
C:\Anderes Verzeichnis
, in Anführungszeichen gesetzt werden. Du kannst auch Wildcards (* bzw. ?) verwenden, um mehrere Verzeichnisse anzugeben, z.B. C:\Fotos*
.Wenn das Backup z.B. heute um 22:00 Uhr gestartet würde, würde folgende Verzeichnisstruktur entstehen:
D:\Backup\2011-07-20 - 22-00\Test1
D:\Backup\2011-07-20 - 22-00\Anderes Verzeichnis
Damit Monat, Tag, Stunde und Minuten immer 2-stellig angegeben werden, die kleinen Änderungen im VBScript.
Gruß
Friemler