Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Alte Backups automatisch löschen

Frage Sicherheit Backup

Mitglied: DauJoe

DauJoe (Level 1) - Jetzt verbinden

19.07.2011 um 21:49 Uhr, 5278 Aufrufe, 14 Kommentare

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
Mitglied: Friemler
19.07.2011 um 22:19 Uhr
Hallo Goalgetter,

  1. Geplanten Task anlegen und mit XCOPY kopieren. Siehe xcopy /?.
  2. md "BackupVerzeichnis\Backup-%date:.=-%"
  3. Folgender Code löscht im Backupverzeichnis alle Verzeichnisse älter als 28 Tage:
01.
@echo off & setlocal 
02.
 
03.
set "VBScript=%Temp%\DeleteOlderThan4Weeks.vbs" 
04.
 
05.
> "%VBScript%" echo If WScript.Arguments.Count ^> 0 Then 
06.
>>"%VBScript%" echo   Set objFSO = CreateObject("Scripting.FileSystemObject") 
07.
>>"%VBScript%" echo   If objFSO.FolderExists(WScript.Arguments(0)) Then 
08.
>>"%VBScript%" echo     For Each objFolder In objFSO.GetFolder(WScript.Arguments(0)).SubFolders 
09.
>>"%VBScript%" echo       If DateDiff("d", objFolder.DateCreated, Now) ^> 28 Then objFolder.Delete(True) 
10.
>>"%VBScript%" echo     Next 
11.
>>"%VBScript%" echo     WScript.Quit 0 
12.
>>"%VBScript%" echo   Else 
13.
>>"%VBScript%" echo     WScript.Quit 1 
14.
>>"%VBScript%" echo   End If 
15.
>>"%VBScript%" echo Else 
16.
>>"%VBScript%" echo   WScript.Quit 2 
17.
>>"%VBScript%" echo End If 
18.
 
19.
cscript /nologo "%VBScript%" "Laufwerk:\Pfad\Backupverzeichnis" 
20.
 
21.
del "%VBScript%"
Bei Erfolg hat ERRORLEVEL den Wert 0, wenn des übergebene Verzeichnis nicht gefunden wurde den Wert 1 und bei fehlendem Verzeichnis den Wert 2.

Weitere Möglichkeit:
01.
@echo off & setlocal 
02.
 
03.
set "BackupDir=Z:\Backups" 
04.
 
05.
for /f "skip=4 delims=" %%d in ('dir /b /a:d /t:c /o:-d "%BackupDir%"') do ( 
06.
  rd /s /q "%BackupDir%\%%d" 
07.
)
Es werden alle Verzeichnisse bis auf die vier jüngsten gelöscht.

Gruß
Friemler
Bitte warten ..
Mitglied: DauJoe
19.07.2011 um 22:44 Uhr
Also:

01.
@ECHO OFF 
02.
 set quelle="QUELLENPFAD" 
03.
 set ziel="ZIELPFAD\%date%_%time:~0,2%.%time:~3,2%" 
04.
 
05.
md %ziel% 
06.
xcopy %quelle% %ziel% /E
Wo genau muss ich nun das VBSCRIPT einbauen? oder muss das nebenher laufen, also auch einen Geplanten Task dafür anlegen?

Gruss
Bitte warten ..
Mitglied: Friemler
19.07.2011 um 22:51 Uhr
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 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
Bitte warten ..
Mitglied: Friemler
19.07.2011 um 23:01 Uhr
Nachtrag:

Für den Zeitstempel hätte ich noch diese Idee:
01.
@echo off & setlocal 
02.
 
03.
set "quelle=QUELLENPFAD" 
04.
set "ziel=ZIELPFAD" 
05.
 
06.
 
07.
set "VBScript=%Temp%\GetTimeStamp.vbs" 
08.
 
09.
> "%VBScript%" echo WScript.Echo Year(Now) ^& "-" ^& Month(Now) ^& "-" ^& Day(Now) ^& " - " ^& Hour(Now) ^& "-" ^& Minute(Now) ^& "-" ^& Second(Now) 
10.
for /f "delims=" %%t in ('cscript /nologo "%VBScript%"') do set "TimeStamp=%%t" 
11.
 
12.
del "%VBScript%" 
13.
 
14.
md "%Ziel%\%TimeStamp%" 
15.
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
Bitte warten ..
Mitglied: DauJoe
20.07.2011 um 10:46 Uhr
Hallo,

also ich habs nun so:

01.
 @echo OFF & setlocal  
02.
 
03.
set quelle="QUELLENPFAD"  
04.
set ziel="ZIELPFAD"  
05.
 
06.
set "VBScript=%Temp%\GetTimeStamp.vbs" 
07.
 
08.
> "%VBScript%" echo WScript.Echo Year(Now) ^& "-" ^& Month(Now) ^& "-" ^& Day(Now) ^& " - " ^& Hour(Now) ^& "-" ^& Minute(Now)  
09.
 
10.
for /f "delims=" %%t in ('cscript /nologo "%VBScript%"') do set "TimeStamp=%%t"  
11.
del "%VBScript%"  
12.
 
13.
md "%Ziel%\%TimeStamp%"  
14.
 
15.
xcopy "%quelle%" "%ziel%\%TimeStamp%" /E /C /I? /Y 
16.
 
17.
set "BackupDir=Z:\Backups"  
18.
 
19.
  
20.
 
21.
for /f "skip=4 delims=" %%d in ('dir /b /a:d /t:c /o:-d "%BackupDir%"') do (  
22.
 
23.
  rd /s /q "%BackupDir%\%%d"  
24.
 
25.
) 
Wäre das so korrekt? Bei dem xcopy Parameter /I bin ich mir nicht ganz sicher, ob es den benötigt...
Beim Timestamp habe ich mal die Sekunden herausgenommen, die finde ich etwas überflüssig.
Noch eine Frage: Was genau wird eigentlich in Zeile 11 gemacht?
Bitte warten ..
Mitglied: Friemler
20.07.2011 um 11:23 Uhr
Hallo Goalgetter,

Zeile 17 kannst Du Dir sparen und die FOR-Schleife ab Zeile 21 müsste dann so lauten:
01.
for /f "skip=4 delims=" %%d in ('dir /b /a:d /t:c /o:-d "%ziel%"') do ( 
02.
  rd /s /q "%ziel%\%%d" 
03.
)
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
Bitte warten ..
Mitglied: DauJoe
20.07.2011 um 12:30 Uhr
Hallo Friemler,

ich meinte schon Zeile 11. Dass das ein delete-Befehl ist, war mir schon klar. Ich versteh nur nicht ganz, wieso dass VBScript gelöscht wird... Oder wird hier eben dieses temporäre Script gelöscht? Dann wäre es klar...

01.
@echo OFF & setlocal  
02.
 
03.
set quelle="QUELLENPFAD"  
04.
set ziel="ZIELPFAD"  
05.
md %ziel%  
06.
set "VBScript=%Temp%\GetTimeStamp.vbs" 
07.
 
08.
> "%VBScript%" echo WScript.Echo Year(Now) ^& "-" ^& Month(Now) ^& "-" ^& Day(Now) ^& " - " ^& Hour(Now) ^& "-" ^& Minute(Now)  
09.
 
10.
for /f "delims=" %%t in ('cscript /nologo "%VBScript%"') do set "TimeStamp=%%t"  
11.
del "%VBScript%"  
12.
 
13.
md "%Ziel%\%TimeStamp%"  
14.
 
15.
xcopy "%quelle%" "%ziel%\%TimeStamp%" /E /C /Y /Z 
16.
 
17.
 
18.
for /f "skip=4 delims=" %%d in ('dir /b /a:d /t:c /o:-d "%ziel%"') do (  
19.
 
20.
  rd /s /q "%ziel%\%%d"  
21.
 
22.
)
Zu den Parametern: Die Reihenfolge, wie ich sie angebe ist nicht relevant, oder?

Gruss
Bitte warten ..
Mitglied: Friemler
20.07.2011 um 12:39 Uhr
Hallo Goalgetter,

ja, in Zeile 11 wird das temporäre Script gelöscht. Es hat ja in Zeile 10 seinen Zweck erfüllt, warum sollte man es als Datenschrott auf der Platte lassen?

Die Reihenfolge der Parameter für XCOPY ist egal, Du kannst sie sogar zu /ecyz zusammenfassen.

Gruß
Friemler
Bitte warten ..
Mitglied: DauJoe
20.07.2011 um 16:43 Uhr
Hallo Friemler,

ich habe das Script nun mal getestet:

01.
@echo OFF & setlocal  
02.
 
03.
set quelle="C:\test1"  
04.
set ziel="C:\Backup\???"  
05.
md %ziel%  
06.
set "VBScript=%Temp%\GetTimeStamp.vbs" 
07.
 
08.
> "%VBScript%" echo WScript.Echo Year(Now) ^& "-" ^& Month(Now) ^& "-" ^& Day(Now) ^& " - " ^& Hour(Now) ^& "-" ^& Minute(Now)  
09.
 
10.
for /f "delims=" %%t in ('cscript /nologo "%VBScript%"') do set "TimeStamp=%%t"  
11.
del "%VBScript%"  
12.
 
13.
xcopy "%quelle%" "%ziel%\%TimeStamp%" /E /C /Y /Z 
14.
 
15.
 
16.
for /f "skip=4 delims=" %%d in ('dir /b /a:d /t:c /o:-d "%ziel%"') do (  
17.
 
18.
  rd /s /q "%ziel%\%%d"  
19.
 
20.
)
In Zeile 4, wie füge ich nun da das VBSCRIPT ein, damit Windows weiss, wie er den Ordner benennen soll? Mit %TimeStamp% funktioniert das nämlich nicht...

Wenn ich die.bat Datei dann ausführe, erscheint immer folgendes: http://puu.sh/3vw0 Egal was ich dann drücke, die Daten werden nicht kopiert, bzw der Ordner mit Zeitangaben wird nicht erstellt.
Bitte warten ..
Mitglied: Friemler
20.07.2011 um 16:52 Uhr
Hallo Goalgetter,

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:
01.
@echo off & setlocal  
02.
 
03.
set "quelle=C:\test1"  
04.
set "ziel=D:\Backup"  
05.
 
06.
set "VBScript=%Temp%\GetTimeStamp.vbs" 
07.
 
08.
> "%VBScript%" echo WScript.Echo Year(Now) ^& "-" ^& Month(Now) ^& "-" ^& Day(Now) ^& " - " ^& Hour(Now) ^& "-" ^& Minute(Now)  
09.
for /f "delims=" %%t in ('cscript /nologo "%VBScript%"') do set "TimeStamp=%%t"  
10.
del "%VBScript%"  
11.
 
12.
xcopy /ecyzi "%quelle%" "%ziel%\%TimeStamp%" 
13.
 
14.
for /f "skip=4 delims=" %%d in ('dir /b /a:d /t:c /o:-d "%ziel%"') do (  
15.
  rd /s /q "%ziel%\%%d"  
16.
)
[/EDIT]
Bitte warten ..
Mitglied: DauJoe
20.07.2011 um 21:01 Uhr
Hallo Friemler,

aah jetzt funktioniert es! Danke dir.

Ist es eigentlich auch möglich, mehrere "quellen" zu kopieren? Also z.B C:\test1 und C:\test2 in den Ordner C:\Backup kopieren.

Oder wäre es einfacher, einfach 2 Scripte laufen zu lassen?

Gruss
Goalgetter
Bitte warten ..
Mitglied: Friemler
20.07.2011 um 22:06 Uhr
Hallo Goalgetter,

klar ist das möglich:
01.
@echo off & setlocal 
02.
 
03.
set "Quellen=C:\Test1 "C:\Anderes Verzeichnis"" 
04.
set "Ziel=D:\Backup" 
05.
set "Aufheben=4" 
06.
 
07.
 
08.
set "VBScript=%Temp%\GetTimeStamp.vbs" 
09.
 
10.
> "%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) 
11.
for /f "delims=" %%t in ('cscript /nologo "%VBScript%"') do set "TimeStamp=%%t" 
12.
del "%VBScript%" 
13.
 
14.
 
15.
for /d %%q in (%Quellen%) do ( 
16.
  xcopy /ecyzi "%%~q" "%Ziel%\%TimeStamp%\%%~nxq" 
17.
18.
 
19.
 
20.
for /f "skip=%Aufheben% delims=" %%d in ('dir /b /a:d /t:c /o:-d "%Ziel%"') do ( 
21.
  rd /s /q "%Ziel%\%%d" 
22.
)
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
Bitte warten ..
Mitglied: DauJoe
20.07.2011 um 23:04 Uhr
Hallo Friemler,

nun klappt alles so wie ich es mir vorgestellt habe, danke Dir nochmals!

Gruss und vielen Dank
Goalgetter
Bitte warten ..
Mitglied: Friemler
20.07.2011 um 23:11 Uhr
Hallo Goalgetter,

gern geschehen. Markiere doch bitte noch den Beitrag als gelöst.

Gruß
Friemler
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
14 Tage alte Dateien automatisch löschen - Shell (1)

Frage von traller zum Thema Batch & Shell ...

Batch & Shell
gelöst Alte Daten automatisch per Zip erstellen (4)

Frage von BEBBYs zum Thema Batch & Shell ...

Exchange Server
gelöst W2011sbs - Exchange - gelöschte Mails automatisch löschen (8)

Frage von MG-One zum Thema Exchange Server ...

Exchange Server
Exchange 2013 pop3 Logs löschen sich nicht automatisch (3)

Frage von SpeakerST zum Thema Exchange Server ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...