Batch - Ordnerinhalt nach Alter löschen

>|Sh4d0w|<

Commander
Registriert
Jan. 2009
Beiträge
2.489
Hallo,
ich habe mir eine Batch geschrieben, die meinen Ordner "Eigene Dateien" zuerst mit WinRar (Rar.exe) in der niedrigsten Kompressionsrate in Archive erstellt und splittet und auf eine andere HDD sichert.
Die Batch wird auf meinem Filer monatlich mittels der Aufgabenplanung ausgeführt.

Sie sieht so aus:
Code:
@echo off
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%

mkdir D:\BACKUP\Eigene_Dateien\%jahr%-%monat%-%tag%

C:\#Install\Rar\Rar.exe a -m0 -v4g "D:\BACKUP\Eigene_Dateien\%jahr%-%monat%-%tag%\Eigene Dateien.rar" "V:\FlexRAID\Eigene Dateien"

Im "BACKUP"-Ordner unter "Eigene_Dateien" wird somit jeden Monat ein Unterordner nach einem Datum-Schema erstellt. Am heutigen Datum heißt der Unterordner also 2012-12-10.

Da mich das Sichern jedes Mal mindestens 80GB (und Zukunft mehr) kostet, möchte ich in der Batch noch weitere Zeilen einfügen, die den ältesten Ordner löscht. Insgesamt möchte ich sechs Monate aufheben, d.h Minimum sechs Unterordner müssen bestehen bleiben.

Meine Vermutung ist, dass das cmd-mäßig nicht möglich sein wird (ODER DOCH?)
Mit VBScripts geht das bestimmt -> allerdings keine Erfahrung :freak:.

Ansonsten kommt mir folgendes in den Sinn:
Angelegt werden die Unterordner Januar bis Dezember (12 Stück) und die Batch mit der Variable %monat% soll prüfen, um welchen Monat es sich handelt und ab dann IF-Anweisungen startet.

Bsp:
if %monat% == 12
then rmdir D:\BACKUP\Eigene_Dateien\Juni\*.* /S /Q
else if %monat% ==11
then rmdir D:\BACKUP\Eigene_Dateien\Mai\*.* /S /Q
...
...
...
So eine IF-Anweisung bekomme ich hin, man muss sich da nur etwas einlesen.

Wer kennt sich hier etwas aus :)


PS: Ja manuell löschen könnte man das natürlich. Ich bin einer derjenigen, die das alles automatisch steuern möchte ;)
 
Hi,

du kannst ja dann nach dem Datum löschen, wenn du sagst nach 6 Monaten.
Dafür könntest du forfiles nutzen:
forfiles /p "<Pfad>" /s /m *.bak /d -200 /c "cmd /c Del /F /Q @file"

löscht dir alle Dateien aus einem Pfad mit der Endung .bak, die älter sind als 200 Tage.
Das sollte für dich passen. Da die letzen 6 Backups bei dir etwa 180 Tage alt sind und der siebte +-210.
 
Ui, forfiles kannte ich noch nicht.
Anstatt *.bak müsste ich dann eben *.rar einsetzen :)
Werde ich mir aufjedenfall mal anschauen.

Währenddessen bin ich mit IF-Anweisungen auch zu einem Ergebnis gekommen. Sieht zwar verschachtelt etwas komisch, tut aber seinen Zweck :D.
Musste noch einen Ausstieg mit goto ende basteln, da mir auffiel, dass wenn er keinen Monat erkennt das Oberverzeichnis "Eigene_Dateien" samt Inhalt der Monatssicherungen löscht und dann leer neu anlegt.
Ebenfalls musste ich noch ne Art ping Bremse einbauen, da die Batch manchmal sofort geschlossen wird und nichts gesichert wird. Wohlmöglich erkennt die Rar.exe den erstellten Ordner noch nicht und kann nix machen.


Code:
@echo off
set monat=%date:~-7,2%
set pfad=D:\BACKUP\Eigene_Dateien


if %monat% == 1 (
  set ordnerloeschen=Juli
  set ordnererstellen=Januar
) else (
  if %monat% == 2 (
  set ordnerloeschen=August
  set ordnererstellen=Februar
) else (
  if %monat% == 3 (
  set ordnerloeschen=September
  set ordnererstellen=Maerz
) else (
  if %monat% == 4 (
  set ordnerloeschen=Oktober
  set ordnererstellen=April
) else (
  if %monat% == 5 (
  set ordnerloeschen=November
  set ordnererstellen=Mai
) else (
  if %monat% == 6 (
  set ordnerloeschen=Dezember
  set ordnererstellen=Juni
) else (
  if %monat% == 7 (
  set ordnerloeschen=Januar
  set ordnererstellen=Juli
) else (
  if %monat% == 8 (
  set ordnerloeschen=Februar
  set ordnererstellen=August
) else (
  if %monat% == 9 (
  set ordnerloeschen=Maerz
  set ordnererstellen=September
) else (
  if %monat% == 10 (
  set ordnerloeschen=April
  set ordnererstellen=Oktober
) else (
  if %monat% == 11 (
  set ordnerloeschen=Mai
  set ordnererstellen=November
) else (
  if %monat% == 12 (
  set ordnerloeschen=Juni
  set ordnererstellen=Dezember
) else (
  goto ende
)
)
)
)
)
)
)
)
)
)
)
)


rmdir /S /Q %pfad%\%ordnerloeschen%
ping localhost
mkdir %pfad%\%ordnererstellen%
ping localhost
C:\#Install\Rar\Rar.exe a -m0 -v4g "%pfad%\%ordnererstellen%\Eigene Dateien.rar" "V:\FlexRAID\Eigene Dateien" >>%pfad%\%ordnererstellen%\Rar.log

:ende
echo Es ist ein Fehler bei der Monatssicherung (MONAT %monat%) von "Eigene Dateien" aufgetreten!!! >>"%pfad%\### !!!-FEHLER_SICHERUNG-!!! ###.LOG"
echo Es ist ein Fehler bei der Monatssicherung (MONAT %monat%) von "Eigene Dateien" aufgetreten!!! >>"V:\FlexRAID\### !!!-FEHLER_SICHERUNG-!!! ###.LOG"
echo Es ist ein Fehler bei der Monatssicherung (MONAT %monat%) von "Eigene Dateien" aufgetreten!!! >>"C:\Users\Administrator\Desktop\### !!!-FEHLER_SICHERUNG-!!! ###.LOG"
exit
 
Zuletzt bearbeitet:
sonst kannst du dir noch robocopy anschauen, ist auch interessant.
Da könnte man nämlich alle Dateien die älter als x Tage sind in ein Verzeichnis verschieben und den Inhalt des Verzeichnisses immer löschen. Das verschieben nimmt keine Zeit in Anspruch, solange alles auf einer Platte passiert.
hier ein Beispiel: http://www.sbspraxis.de/server/srv007/srv_007.html
 
Hmm robocopy nutze ich schon seit längerem. Garnicht gewusst, dass es das kann :O
 
Zurück
Oben