Wie kann ich in einem Verzeichnis bestimmte Dateien eines bestimmten Alters via Script löschen?
Hallo zusammen! Ich bin neu hier im Forum und freue mich auf einen regen Meinungsaustausch mit Euch!
Ich stehe gerade vor der folgenden Problemstellung.
Es sollen in regelmäßigen Abständen (60/90 Tage) in einem bestimmten Verzeichnis und Unterordnern bestimmte Dateien gelöscht werden. Folgende Kriterien muss diese Datei erfüllen:
Sie hat einen spezifischen Dateinamen (z. Bsp. _tmp_) und ist älter als 60 bzw. 90 Tage. Das Script soll das gesamte Verzeichnis inkl. der Unterordner überprüfen und die Dateien löschen, die den o.a. Kriterien entsprechen.
Ich habe hier schon einige Anleitungen und Tipps bezüglich Forfiles und DelAge32 gelesen, aber leider keine auf mein "Problem" zutreffenden Antworten gefunden.
Ich hoffe sehr, dass jemand von Euch eine Lösung für mich hat.
Besten Dank & Grüße
XxDustyxX
Ich stehe gerade vor der folgenden Problemstellung.
Es sollen in regelmäßigen Abständen (60/90 Tage) in einem bestimmten Verzeichnis und Unterordnern bestimmte Dateien gelöscht werden. Folgende Kriterien muss diese Datei erfüllen:
Sie hat einen spezifischen Dateinamen (z. Bsp. _tmp_) und ist älter als 60 bzw. 90 Tage. Das Script soll das gesamte Verzeichnis inkl. der Unterordner überprüfen und die Dateien löschen, die den o.a. Kriterien entsprechen.
Ich habe hier schon einige Anleitungen und Tipps bezüglich Forfiles und DelAge32 gelesen, aber leider keine auf mein "Problem" zutreffenden Antworten gefunden.
Ich hoffe sehr, dass jemand von Euch eine Lösung für mich hat.
Besten Dank & Grüße
XxDustyxX
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 165647
Url: https://administrator.de/contentid/165647
Ausgedruckt am: 26.11.2024 um 10:11 Uhr
20 Kommentare
Neuester Kommentar
da gab's doch neulich dieses Script hier im Forum:
such mal nach ungefähr: Dateien-und-Ordner-nach-nTage-loeschen
Gruss
Tsuki
'*************************************************************************
'Dateien die älter als intTage sind löschen
'DateLastModified=Änderungsdatum; DateCreated=Erstellungsdatum
'WScript.Echo intZahl & " Dateien gelöscht." (Ausgabe gelöschter Dateien)
'*************************************************************************
Set objFSO = CreateObject("Scripting.FileSystemObject")
strOrdner = "D:\scans\" 'Ordnerpfad angeben
strExtension = ""
intTage = 1 'Anzahl der Tage angeben
Set objOrdner = objFSO.GetFolder(strOrdner)
intZahl = 0
intOrdner = 0
For Each objDatei In objOrdner.Files
If LCase(Right(objDatei.name, Len(strExtension))) = LCase(strExtension) _
And DateDiff("d", objDatei.DateCreated, Now) > intTage Then
objDatei.Delete
intZahl = intZahl + 1
End If
Next
For Each objUnterordner In objOrdner.SubFolders
If DateDiff("d", objUnterordner.DateCreated, Now) > intTage Then
objUnterordner.Delete
intOrdner = intOrdner + 1
End If
Next
WScript.Echo intZahl & " Dateien, sowie" & VBCRLF & intOrdner & " Ordner gelöscht."
such mal nach ungefähr: Dateien-und-Ordner-nach-nTage-loeschen
Gruss
Tsuki
cygwin installieren ( http://cygwin.com ) und dann in der bash:
find /pfad/in/dem/gesucht/werden/soll/ -name "_tmp_" -ctime 90 -exec rm -rfv {} \;
eingeben.
wahlweise kann man beim namen auch iname nehmen, wenn Groß- und Kleinschreibung egal ist und statt ctime atime oder mtime, je nachdem ob Erstellungs-, Zugriffs- oder Änderungsdatum auschlaggebend ist. Bei der Zeitangabe kann man auch mit + oder - noch angeben, ob auch ältere oder neuere Dateien/Order gefunden werden sollen.
find /pfad/in/dem/gesucht/werden/soll/ -name "_tmp_" -ctime 90 -exec rm -rfv {} \;
eingeben.
wahlweise kann man beim namen auch iname nehmen, wenn Groß- und Kleinschreibung egal ist und statt ctime atime oder mtime, je nachdem ob Erstellungs-, Zugriffs- oder Änderungsdatum auschlaggebend ist. Bei der Zeitangabe kann man auch mit + oder - noch angeben, ob auch ältere oder neuere Dateien/Order gefunden werden sollen.
Aloha,
man könnte auch mit batch pur das ganze bewerkstelligen, allerdings Aufwand & Nutzen sind nicht wirklich gut geregelt (schon eher, wenn man Boardmittel wie .vbs dazuzieht [für die Datumsberechnung wäre dies nunmal am Einfachsten]).
greetz André
P.S.: Powershell als Boardmittel zu betrachten, hmm ... mag für neuere OS stimmen aber für die Millionen von XP Rechnern wäre auch dies ein zusätzliches Programm :P
man könnte auch mit batch pur das ganze bewerkstelligen, allerdings Aufwand & Nutzen sind nicht wirklich gut geregelt (schon eher, wenn man Boardmittel wie .vbs dazuzieht [für die Datumsberechnung wäre dies nunmal am Einfachsten]).
greetz André
P.S.: Powershell als Boardmittel zu betrachten, hmm ... mag für neuere OS stimmen aber für die Millionen von XP Rechnern wäre auch dies ein zusätzliches Programm :P
Guck dir mal forfiles.exe an, das hab ich dafür mal verwendet.
Genaue Beschreibung für diesen Einsatzfall hier: http://www.jjclements.co.uk/index.php/2008/07/31/delete-files-older-tha ...
Genaue Beschreibung für diesen Einsatzfall hier: http://www.jjclements.co.uk/index.php/2008/07/31/delete-files-older-tha ...
MoinMoin,
eventuell ist dieses kleine Programm für Dich ausreichend: delage32, siehe
http://home.mnet-online.de/horst.muc/wbat32d.htm
eventuell ist dieses kleine Programm für Dich ausreichend: delage32, siehe
http://home.mnet-online.de/horst.muc/wbat32d.htm
Aloha,
nah dran aber doch daneben, dennoch habe es selber mal getestet (war mir auch nicht bekannt), es ginge z.B. so:
oder auch so, wenn man den Dateitypen noch mit angeben will:
greetz André
P.S.: lieber erstmal Voransicht ^_^
nah dran aber doch daneben, dennoch habe es selber mal getestet (war mir auch nicht bekannt), es ginge z.B. so:
delage32 *_tmp_* 60 /recurse /created /preview
oder auch so, wenn man den Dateitypen noch mit angeben will:
delage32 *_tmp_*.typ 60 /recurse /created /preview
greetz André
P.S.: lieber erstmal Voransicht ^_^
Moin XxDustyxX,
willkommen im Forum.
Was genau war denn bei ForFiles und DelAge32 das Problem, das dich schreiben liess:
Ich finde sowohl die Hilfe, die bei "ForFiles.exe" angezeigt wird und natürlich erst recht die DelAge32.exe durchaus brauchbar.
Mit ForFiles (das ich überhaupt nie verwende) komme ich auch nach kurzem Hilfe-Lesen der vielleicht 20 Zeilen auch zu schnellen Ergebnissen.
Jedenfalls kann ich auch damit rekursiv und mit Wildcards arbeiten - und dabei habe ich sicherlich keine aktuelle Version.
Egal, ob du eines dieser Tools oder etwas Selbstgelötetes in einem Batch/Script verwendest,
Denn rekursive Löschskripte per Doppelklick starten.... ich trau mich das selten.
Grüße
Biber
willkommen im Forum.
Was genau war denn bei ForFiles und DelAge32 das Problem, das dich schreiben liess:
Ich habe hier schon einige Anleitungen und Tipps bezüglich Forfiles und DelAge32 gelesen,
aber leider keine auf mein "Problem" zutreffenden Antworten gefunden.
aber leider keine auf mein "Problem" zutreffenden Antworten gefunden.
Ich finde sowohl die Hilfe, die bei "ForFiles.exe" angezeigt wird und natürlich erst recht die DelAge32.exe durchaus brauchbar.
Mit ForFiles (das ich überhaupt nie verwende) komme ich auch nach kurzem Hilfe-Lesen der vielleicht 20 Zeilen auch zu schnellen Ergebnissen.
Jedenfalls kann ich auch damit rekursiv und mit Wildcards arbeiten - und dabei habe ich sicherlich keine aktuelle Version.
>forfiles
FORFILES v 1.1 - emmanubo@microsoft.com - 4/98
Syntax : FORFILES [-pPath] [-mSearch Mask] [-ccommand] [-d<+|-><DDMMYYYY|DD>] [-s]
-pPath Path where to start searching
-mSearch Mask Search files according to <Search Mask>
-cCommand Command to execute on each file(s)
-d<+|-><DDMMYYYY|DD> Select files with date >= or <=DDMMYYYY (UTC)
or files having date >= or <= (current date - DD days)
-s Recurse directories
-v Verbose mode
The following variables can be used in Command :
@FILE, @FNAME_WITHOUT_EXT, @EXT, @PATH, @RELPATH, @ISDIR, @FSIZE, @FDATE,
@FTIME
To include special hexa characters in the command line : use 0xHH
Default : <Directory : .> <Search Mask : *.*> <Command : "CMD /C Echo @FILE">
Examples :
FORFILES -pc:\ -s -m*.BAT -c"CMD /C Echo @FILE is a batch file"
FORFILES -pc:\ -s -m*.* -c"CMD /C if @ISDIR==TRUE echo @FILE is a directory"
FORFILES -pc:\ -s -m*.* -d-100 -c"CMD /C Echo @FILE : date >= 100 days"
FORFILES -pc:\ -s -m*.* -d-01011993 -c"CMD /C Echo @FILE is quite old!"
FORFILES -pc:\ -s -m*.* -c"CMD /c echo extension of @FILE is 0x22@EXT0x22"
(=17:31:09 F:\schnipsel=)
>forfiles -pf:\schnipsel\ -s -ms*.txt -d-1000 -c"CMD /C Echo @PATH\@FILE : older 1000 days"
f:\schnipsel\scanlog.txt : older 1000 days
f:\schnipsel\scanlog_filter.txt : older 1000 days
Egal, ob du eines dieser Tools oder etwas Selbstgelötetes in einem Batch/Script verwendest,
- nimm dir Zeit für ein paar Kommentare in dem Script
- und stelle sicher, dass beim "einfachen" Doppelklick/Aufruf ohne jegliche Parameter nur ANGEZEIGT wird, was denn gelöscht werden würde.
Denn rekursive Löschskripte per Doppelklick starten.... ich trau mich das selten.
Grüße
Biber
Aloha Dusty,
wenn mich nicht alles täuscht, liest du nicht ordentlich alle Beiträge der Helfer ... sonst würde dir jetzt schon auffallen, dass es auch ohne zu testen nicht funktionieren wird ...
Also noch einmal zum Mitschreiben: ohne Platzhalter
greetz André
wenn mich nicht alles täuscht, liest du nicht ordentlich alle Beiträge der Helfer ... sonst würde dir jetzt schon auffallen, dass es auch ohne zu testen nicht funktionieren wird ...
Also noch einmal zum Mitschreiben: ohne Platzhalter
*
läuft da gar nichts aber sonst ist die Zusammenstellung korrekt, achte jedoch eventuell noch darauf, sollte dein Endpfad Leerzeichen enthalten, diesen dann in Zollzeichen nein, das sind keine richtigen Anführungszeichen zu setzen.DelAge32 "C:\files\*_tmp_*" 60 /recurse /created /includeRHS
greetz André