eric123
Goto Top

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

Content-Key: 6427

Url: https://administrator.de/contentid/6427

Printed on: April 16, 2024 at 21:04 o'clock

Member: Floh
Floh Feb 02, 2005, updated at Mar 14, 2023 at 09:16:04 (UTC)
Goto Top
Member: indie
indie Mar 10, 2005, updated at Mar 14, 2023 at 09:16:34 (UTC)
Goto Top
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:

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 
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
Member: bertschle0
bertschle0 Jan 13, 2006, updated at Mar 14, 2023 at 09:17:13 (UTC)
Goto Top
Danke ich habe eine Lösung gefunden

Ich habe mir das Programm delage32 heruntergeladen
Member: colinardo
colinardo Jul 26, 2006 at 06:33:43 (UTC)
Goto Top
Hier eine Version per Visual Basic Script:

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
'-------------------------------------------------------------------  
Member: bertschle0
bertschle0 Jul 26, 2006 at 06:51:48 (UTC)
Goto Top
Vielen Dank.

Ist auch ne gute Idee
Member: enzo
enzo Oct 08, 2006 at 21:34:05 (UTC)
Goto Top
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:

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
Member: Biber
Biber Oct 09, 2006 at 07:57:16 (UTC)
Goto Top
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:
....
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
Member: colinardo
colinardo Oct 09, 2006 at 09:51:51 (UTC)
Goto Top
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.

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
Member: bertschle0
bertschle0 Oct 09, 2006 at 13:08:31 (UTC)
Goto Top
am besten gehts immer noch mit delage32
Member: Biber
Biber Oct 09, 2006 at 13:30:41 (UTC)
Goto Top
am besten gehts immer noch mit delage32

...aber auch die zweitbesten Lösungen in diesem Board haben ihren Reiz... face-wink
Member: enzo
enzo Oct 09, 2006 at 20:42:49 (UTC)
Goto Top
Danke erst einmal für die schnelle Hilfe!

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
Member: bertschle0
bertschle0 Oct 09, 2006 at 20:55:31 (UTC)
Goto Top
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
Member: enzo
enzo Oct 09, 2006, updated at Mar 14, 2023 at 09:18:37 (UTC)
Goto Top
Habe es so gemacht:

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...
Member: bertschle0
bertschle0 Oct 09, 2006 at 21:21:20 (UTC)
Goto Top
Probier mal:

@echo off
cls
delage32 C:\Laptop\*.* 12 /move C:\laptopdel >delage32log.txt
pause
Member: enzo
enzo Oct 09, 2006 at 21:33:44 (UTC)
Goto Top
ok - habs probiert!

Fazit:
1. Auf meinem Desktop wurde eine delage32log.txt erstellt die keinen Inhalt hat.
2. Im Verzeichnis C: wurde ein Verzeichnis erstellt mit dem Namen laptopdel - ebenfalls leer
3. Die Verzeichnisse, die gelöscht werden sollen sind immer noch da

Gruß Enzo
Member: bertschle0
bertschle0 Oct 09, 2006 at 21:37:00 (UTC)
Goto Top
Probier mal:

@echo off
> cls
> delage32 C:\Laptop\*.* 12 /move C:\laptopdel
> >delage32log.txt
> pause

Sollte so aussehen

@echo off
cls
delage32 C:\Laptop\*.* 12 /move C:\laptopdel\ >C:\delage32log.txt
pause
Member: enzo
enzo Oct 09, 2006 at 21:47:00 (UTC)
Goto Top
Wieder das gleiche Ergebnis!
Datei und Verzeichnis erstellt - beides ohne Inhalt
Verzeichnisse immer noch da...
Member: bertschle0
bertschle0 Oct 09, 2006 at 21:48:53 (UTC)
Goto Top
Nimm mal irgendeinen beliebigen ordner (Empfehlung: C:\temp bzw C:\windows\temp)

heir sind oft sehr alte dateien drin.

wenns dann nicht geht weiß ich auch nicht weiter
Member: colinardo
colinardo Oct 10, 2006 at 07:04:08 (UTC)
Goto Top
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:

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
Member: Biber
Biber Oct 10, 2006 at 08:39:22 (UTC)
Goto Top
Thx, Softmeister,

genau den hab ich vergessen - den Unterverzeichnis-Parent-Ordner vor dem letzten "%%i".
Kommt davon, dass ich immer nur dann teste, "wenn es erforderlich ist.."

Muss noch an meinen guten Vorsätzen arbeiten face-big-smile

Gruß
Biber
Member: enzo
enzo Oct 10, 2006 at 19:44:26 (UTC)
Goto Top
Es geht face-smile

Huhuuuh.....

Vielen, vielen Dank...

Werde jedenfalls wiederkommen face-smile

Gruß Enzo