Batch Datei: Alte Dateien nach gewissen Alter löschen
Hallo,
ich bräuchte eine Batch Datei, welche andere Dateien nach einem gewissen Alter löscht!
Habe über google leider nichts gefunden...
Vielen Dank im vorraus
Eric
ich bräuchte eine Batch Datei, welche andere Dateien nach einem gewissen Alter löscht!
Habe über google leider nichts gefunden...
Vielen Dank im vorraus
Eric
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6427
Url: https://administrator.de/contentid/6427
Ausgedruckt am: 26.11.2024 um 08:11 Uhr
21 Kommentare
Neuester Kommentar
hallo du,
es gibt eine *.exe datei die kannst du dir in den system32 ordner hineinkopieren
das heisst "DelAge32" ist 10 KB gross mit dieser exe kannst du dann im batch wenn du die datei aufrufst die tage einstellen wenn er sie löschen soll
DelAge32 löscht Dateien mit einem Mindestalter (Anzahl Tage).
Syntax:
Die Dateien werden per Suchmuster ausgewählt ("*.*" für alle Dateien), mit Angabe des relativen oder absoluten Pfades.
Beispiel:
Gelöschte Dateien werden mit Alter (Anzahl Tage) aufgelistet. Der Output kann in eine Datei umgeleitet werden.
Mit Option /preview kann die Aktion gefahrlos getestet werden, ohne wirklich zu löschen.
quelle: http://home.mnet-online.de/horst.muc/wbat32d.htm#delage
es gibt eine *.exe datei die kannst du dir in den system32 ordner hineinkopieren
das heisst "DelAge32" ist 10 KB gross mit dieser exe kannst du dann im batch wenn du die datei aufrufst die tage einstellen wenn er sie löschen soll
DelAge32 löscht Dateien mit einem Mindestalter (Anzahl Tage).
Syntax:
DelAge32 dateibegriff tage [/preview] [/create] [/includeRO] [/recurse] [/subonly] [/quiet]
Die Dateien werden per Suchmuster ausgewählt ("*.*" für alle Dateien), mit Angabe des relativen oder absoluten Pfades.
Beispiel:
DelAge32 C:\irgend\wo\*.* 100 /recurse
Mit Option /preview kann die Aktion gefahrlos getestet werden, ohne wirklich zu löschen.
quelle: http://home.mnet-online.de/horst.muc/wbat32d.htm#delage
Hier eine Version per Visual Basic Script:
Dieses Script löscht Dateien älter als 30 Tage!
Als Parameter einfach das zu verarbeitende Verzeichnis übergeben...
Dieses Script löscht Dateien älter als 30 Tage!
Als Parameter einfach das zu verarbeitende Verzeichnis übergeben...
'------------------------------------------------------
Set myArguments = WScript.Arguments
If myArguments.Count <> 1 Then
call DisplayInfo
Wscript.Quit (1)
End if
Dim heute, olddate
heute = FormatDateTime(Date, 2)
olddate = DateAdd("d", -30, heute)
set objFS = CreateObject("Scripting.FilesystemObject")
set myFolder = objFS.GetFolder(myArguments(0))
set myFiles = myFolder.Files
for each myfile in myFiles
If myFile.DateCreated < olddate then
myFile.Delete
end if
next
Sub DisplayInfo
MsgBox "Usage: deleteoldfiles.vbs [FolderPath]", vbExclamation, "Missing Argument"
End Sub
'-------------------------------------------------------------------
Also irgendwie komme ich mit den Antworten hier im Thread nicht klar - funktioniert jedenfalls bei mir nicht...
Ich möchte gerne Verzeichnisse, die älter als 30 Tage sind, löschen und zwar:
Habe ein Storage Center eingerichtet und auf allen PC`s im Netzwerk das Sicherungslaufwerk angelegt - jeder Rechner kann also darauf zu greifen und seine Sicherungen ablegen, welche auf eine interne 2. Platte im Storage gespiegelt werden.
Jeder Rechner hat ein eigenes Sicherungs-Batchprogramm, welches ich folgender Maßen aufgebaut habe:
Somit wird ein Ordner erstellt, der den Rechnernamen und das Sicherungsdatum trägt und darin werden dann die zu sichernden Dateien oder auch Ordner kopiert
Nun soll nach ca. 30 Tagen die 1. Sicherung gelöscht werden, damit das Laufwerk nach 6 Monaten nicht wegen Überfüllung geschlossen werden muss - wie muss ich das jetzt in die Batchdatei einfügen?
Für eine genaue Anleitung wäre ich sehr dankbar, da ich mich mit Batch und DOS nur sehr bedingt auskenne...
Vielen Dank im Voraus...
Gruß Enzo
Ich möchte gerne Verzeichnisse, die älter als 30 Tage sind, löschen und zwar:
Habe ein Storage Center eingerichtet und auf allen PC`s im Netzwerk das Sicherungslaufwerk angelegt - jeder Rechner kann also darauf zu greifen und seine Sicherungen ablegen, welche auf eine interne 2. Platte im Storage gespiegelt werden.
Jeder Rechner hat ein eigenes Sicherungs-Batchprogramm, welches ich folgender Maßen aufgebaut habe:
xset Date=^date
set Ziel="N:\Rechner1\%Date%\"
md %ziel%
xcopy /s /y /d /e C:\irgendeineDatei\*.* %Ziel%\irgendeineDatei\*.*
Somit wird ein Ordner erstellt, der den Rechnernamen und das Sicherungsdatum trägt und darin werden dann die zu sichernden Dateien oder auch Ordner kopiert
Nun soll nach ca. 30 Tagen die 1. Sicherung gelöscht werden, damit das Laufwerk nach 6 Monaten nicht wegen Überfüllung geschlossen werden muss - wie muss ich das jetzt in die Batchdatei einfügen?
Für eine genaue Anleitung wäre ich sehr dankbar, da ich mich mit Batch und DOS nur sehr bedingt auskenne...
Vielen Dank im Voraus...
Gruß Enzo
Moin Enzo,
leider habe ich keine gesicherte Erkenntnis, wie Dein Datumsformat und somit auch die Dateimaske der angelegten Unterverzeichnisse aussieht.
Ich unterstelle mal hier im Beispiel ein Wildcard-Format von "??.??.????" für z.B. Ordner wie 09.10.2006. Ggf. anpassen.
Eine mögliche Strategie wäre:
- über den DIR-Befehl eine Liste aller Dateien mit der richtigen Namenskonvention erzeugen
- und zwar mit den Parametern "/AD" (nur Verzeichnisse), "/O-D" Sortierung nach Datum absteigend, "/TC" nach Erzeugungsdatum und "/b" wie Billich-Ausführung ohne Details.
- von dieser Liste werde ich die ersten 30 Einträge überspringen - das sind die 30 Sicherungen, die bleiben sollen.
Den Rest tret ich in die Tonne.
Bei dieser Strategie gehe ich wissentlich nicht über das Kriterium "älter als 30 Tage" (es ist lumpig, mit Datum im Batch zu rechnen), sondern über die Bedingung: "mehr als 30 Sicherungen vorhanden".
Auf Bätchisch:
oder, Variation des Themas...
Es bietet sich natürlich an, das Verzeichnis in der DIR-Anweisung wieder über eine Variable anzusprechen:
set "zielRoot=N:\Rechner1"
-bzw-
Set "zielRoot=n:\%computername%"
Es gibt auch einige andere Beiträge, in denen das Thema "Dateien älter als x Tage löschen" behandelt wird - bitte über Forumssuche finden.
Gruß
Biber
leider habe ich keine gesicherte Erkenntnis, wie Dein Datumsformat und somit auch die Dateimaske der angelegten Unterverzeichnisse aussieht.
Ich unterstelle mal hier im Beispiel ein Wildcard-Format von "??.??.????" für z.B. Ordner wie 09.10.2006. Ggf. anpassen.
Eine mögliche Strategie wäre:
- über den DIR-Befehl eine Liste aller Dateien mit der richtigen Namenskonvention erzeugen
- und zwar mit den Parametern "/AD" (nur Verzeichnisse), "/O-D" Sortierung nach Datum absteigend, "/TC" nach Erzeugungsdatum und "/b" wie Billich-Ausführung ohne Details.
- von dieser Liste werde ich die ersten 30 Einträge überspringen - das sind die 30 Sicherungen, die bleiben sollen.
Den Rest tret ich in die Tonne.
Bei dieser Strategie gehe ich wissentlich nicht über das Kriterium "älter als 30 Tage" (es ist lumpig, mit Datum im Batch zu rechnen), sondern über die Bedingung: "mehr als 30 Sicherungen vorhanden".
Auf Bätchisch:
....
for /f "skip=30" %%i in ('dir /b /o-D /ad /tC "N:\Rechner1\??.??.????"') do rd /s /q %%i
:. .[hier Dein bisheriger Schnipsel ....]
oder, Variation des Themas...
...
for /f %%i in ('dir /b /o-D /ad /tC "N:\Rechner1\??.??.????"^|more /e +30') do rd /s /q %%i
:. .[hier Dein bisheriger Schnipsel ....]
Es bietet sich natürlich an, das Verzeichnis in der DIR-Anweisung wieder über eine Variable anzusprechen:
set "zielRoot=N:\Rechner1"
-bzw-
Set "zielRoot=n:\%computername%"
Es gibt auch einige andere Beiträge, in denen das Thema "Dateien älter als x Tage löschen" behandelt wird - bitte über Forumssuche finden.
Gruß
Biber
Hier nochmal das selbe Script wie oben , nur entsprechend für Ordner.
Einfach das Script mit folgenden Parametern in der Batchdatei aufrufen:
----> deleteoldfolders.vbs "C:\Dein Backup Root-Folder" 30
Die Anzahl der Tage kannst du mit dem zweiten Parameter festlegen! In diesem Fall 30 Tage.
Gruß
Softmeister
Einfach das Script mit folgenden Parametern in der Batchdatei aufrufen:
----> deleteoldfolders.vbs "C:\Dein Backup Root-Folder" 30
Die Anzahl der Tage kannst du mit dem zweiten Parameter festlegen! In diesem Fall 30 Tage.
Set myArguments = WScript.Arguments
If myArguments.Count <> 2 Then
call DisplayInfo
Wscript.Quit (1)
End if
Dim heute, olddate
heute = FormatDateTime(Date, 2)
olddate = DateAdd("d","-" & myArguments(1), heute)
set objFS = CreateObject("Scripting.FilesystemObject")
set myFolder = objFS.GetFolder(myArguments(0))
set mySubfolders = myFolder.Subfolders
for each subfolder in mySubfolders
If subfolder.DateCreated < olddate then
subfolder.Delete
end if
next
Sub DisplayInfo
MsgBox "Usage: deleteoldfolders.vbs [FolderPath] [Anzahl Tage]", vbExclamation, "Missing Arguments"
End Sub
Gruß
Softmeister
Danke erst einmal für die schnelle Hilfe!
Ich habe aber noch folgendes Problem:
Habe die Batchdatei wie folgt geschrieben:
...sind nur Testordner...
Jetzt habe ich noch einen Ordner: C:\Laptop
In dem sind 13 Ordner mit der Bezeichnung: 09.10.2006 bis 21.10.2006
Nu sollte also der Ordner 09.10.2006 gelöscht werden - macht es aber nicht!
Statt dessen bekomme ich die Fehlermeldung:
http://home.versanet.de/~d-rieke/forum/Fehler_Batch.jpg
Nu weiß ich auch nicht mehr weiter... Vielleicht bin ich einfach nur zu dämlich!
Ich hoffe, ihr habt noch ein wenig Geduld mit mir...
delage32 hatte ich auch schon ausprobiert - steige ich aber irgendwie nicht hinter wie ich das in die Batchdatei rein bekommen soll - alle Versuche sind gescheitert...
Trotzdem vielen Dank für eure Bemühungen - weiß ich echt zu schätzen!
Gruß Enzo
Ich habe aber noch folgendes Problem:
Habe die Batchdatei wie folgt geschrieben:
for /f "skip=12" %%i in ('dir /b /o-D /ad /tc "C:\Laptop\??.??.????"') do rd /s /q %%i
xset Date=^date
set Ziel="c:\Laptop\%Date%\"
md %ziel%
xcopy /s /y /d /e C:\temp\*.* %Ziel%\temp\*.*
xcopy /s /y /d /e C:\Nvidia\*.* %Ziel%\Nvidia\*.*
...sind nur Testordner...
Jetzt habe ich noch einen Ordner: C:\Laptop
In dem sind 13 Ordner mit der Bezeichnung: 09.10.2006 bis 21.10.2006
Nu sollte also der Ordner 09.10.2006 gelöscht werden - macht es aber nicht!
Statt dessen bekomme ich die Fehlermeldung:
http://home.versanet.de/~d-rieke/forum/Fehler_Batch.jpg
Nu weiß ich auch nicht mehr weiter... Vielleicht bin ich einfach nur zu dämlich!
Ich hoffe, ihr habt noch ein wenig Geduld mit mir...
delage32 hatte ich auch schon ausprobiert - steige ich aber irgendwie nicht hinter wie ich das in die Batchdatei rein bekommen soll - alle Versuche sind gescheitert...
Trotzdem vielen Dank für eure Bemühungen - weiß ich echt zu schätzen!
Gruß Enzo
DelAge32 C:\irgend\wo\*.* 100 /recurse
Dies ist der Delage32 befehl
Hier bekommst du delage32 (musst du nur noch in C:\Windows kopieren)
http://claudiob.at/download/updownfiles/bastard/Software/delage32.exe
Batchdatei sollte so aussehen
@echo off
cls
delage32 C:\temp\*.* 30 /recurse >log.txt
pause
Mit echo off bewirkst du das die Befehle nicht angezeigt werden.
cls ist für einen suaberen bildschirm.
Hier werden dir alle files gelöscht die älter wie 30 tage sind.
Weiters hast du dann eine logdatei (log.txt)
Mit pause verhinderst du das das Fenster gleich zugeht wenn das Batch durchgelaufen ist
Habe es so gemacht:
1. delage32.exe in c:\Windows kopiert
2. 1. Zeile in Batchdatei:
(rest wie oben beschrieben ohne den "if" Befehl
Systemdatum auf 09.12.2006 geändert und Datei erstellt.
Folge dessen müssten alle Dateien (von 09.10.2006 - 21.10.2006) gelöscht werden, da diese älter als 12 Tage sind - tut sich aber nix...
Das kann doch nicht so schwer sein - wo hab ich denn nu den Fehler drinne...
1. delage32.exe in c:\Windows kopiert
2. 1. Zeile in Batchdatei:
DelAge32 C:\Laptop\*.* 12 /recurse
(rest wie oben beschrieben ohne den "if" Befehl
Systemdatum auf 09.12.2006 geändert und Datei erstellt.
Folge dessen müssten alle Dateien (von 09.10.2006 - 21.10.2006) gelöscht werden, da diese älter als 12 Tage sind - tut sich aber nix...
Das kann doch nicht so schwer sein - wo hab ich denn nu den Fehler drinne...
Hallo Enzo,
du hast einen kleinen Fehler begangen....
Da die Batch die Befehle immer in dem Verzeichnis ausführt im dem du die Batch ausführst, kommt der "rd" Befehl nicht weiter weil das Zielverzeichnis in deinem Fall ja nicht auf dem Desktop liegt. Also musst du noch das Zielverzeichnis im "rd" Befehl ergänzen:
... oder wechsle mit der Batch vorher in das Zielverzeichnis mit "cd C:\Laptop"
Hoffe das hilft dir weiter , deine Batch ohne Hilfsmittel dritter Programme zu verwirklichen...
Merke: Durch Fehler lernt man!
Greets
;-] Softmeister
du hast einen kleinen Fehler begangen....
Da die Batch die Befehle immer in dem Verzeichnis ausführt im dem du die Batch ausführst, kommt der "rd" Befehl nicht weiter weil das Zielverzeichnis in deinem Fall ja nicht auf dem Desktop liegt. Also musst du noch das Zielverzeichnis im "rd" Befehl ergänzen:
for /f "skip=12" %%i in ('dir /b /o-D /ad /tc "C:\Laptop\??.??.????"') do rd /s /q C:\Laptop\%%i
... oder wechsle mit der Batch vorher in das Zielverzeichnis mit "cd C:\Laptop"
Hoffe das hilft dir weiter , deine Batch ohne Hilfsmittel dritter Programme zu verwirklichen...
Merke: Durch Fehler lernt man!
Greets
;-] Softmeister