xxdustyxx
Goto Top

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

Content-ID: 165647

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

Ausgedruckt am: 26.11.2024 um 10:11 Uhr

TsukiSan
TsukiSan 04.05.2011 um 16:10:17 Uhr
Goto Top
da gab's doch neulich dieses Script hier im Forum:
'*************************************************************************   
'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
XxDustyxX
XxDustyxX 04.05.2011 um 16:13:08 Uhr
Goto Top
Hallo Tsuki,

vielen Dank für Deinen Hinweis. Ich bin eher auf der Suche nach einem Shell-Script und nicht nach einem VB-Script.

Ich werde jetzt mal Deinen Tipp bzgl. der Suche benutzen!

Viele Grüße

XxDustyxX
TsukiSan
TsukiSan 04.05.2011 um 16:15:48 Uhr
Goto Top
ups,

bei shell bin ich ehr keine Hilfe für dich. Da müssen die anderen Jungs ran face-wink

Gruss
Tsuki
Lochkartenstanzer
Lochkartenstanzer 04.05.2011 um 16:19:39 Uhr
Goto Top
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.
XxDustyxX
XxDustyxX 04.05.2011 um 16:34:46 Uhr
Goto Top
Danke für Deine Antwort, Lochkartenstanzer!

Kennst Du evtl. auch eine Lösung ohne das erwähnte Tool zu installieren!?

Evtl. für die PowerShell...!? So etwas muss sich doch auch mit Bordmitteln bewerkstelligen lassen.

Grüße
Skyemugen
Skyemugen 04.05.2011 um 16:50:32 Uhr
Goto Top
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
32067
32067 04.05.2011 um 16:59:09 Uhr
Goto Top
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 ...
XxDustyxX
XxDustyxX 04.05.2011 um 17:01:41 Uhr
Goto Top
Hallo Andre,

danke für Deine Antwort! Wo Du Recht hast... (PowerShell), da hast Du Recht! Wobei diese bereits installiert ist.

Ich werde mich jetzt mal mit dem Vorschlag/Script vom Lochkartenstanzer auseinander setzen.

Sollte noch jemand einen Hinweis oder Tipp für mich haben... immer her damit!

Grüße
Loeffelstiel
Loeffelstiel 04.05.2011 um 17:02:40 Uhr
Goto Top
MoinMoin,

eventuell ist dieses kleine Programm für Dich ausreichend: delage32, siehe

http://home.mnet-online.de/horst.muc/wbat32d.htm
XxDustyxX
XxDustyxX 04.05.2011 um 17:07:28 Uhr
Goto Top
Hallo DKrause,

forfiles hatte ich mir auch schon angesehen. Allerdings benötige ich die Möglichkeit Dateien mit einem bestimmten Namen (_tmp_, nicht *.*) und einem bestimmten Alter (60/90 Tage) automatisiert löschen zu lassen.

Grüße
XxDustyxX
XxDustyxX 04.05.2011 um 17:09:26 Uhr
Goto Top
Zitat von @Loeffelstiel:
MoinMoin,

eventuell ist dieses kleine Programm für Dich ausreichend: delage32, siehe

http://home.mnet-online.de/horst.muc/wbat32d.htm


Hallo Loeffelstiel,

DelAge32 hat die gleiche Einschränkung wie forfiles... das löschen aller Dateien (*.*) hilft mir leider nicht weiter...

Grüße
Loeffelstiel
Loeffelstiel 04.05.2011 um 17:13:04 Uhr
Goto Top
delage32 _tmp_ 60 /recurse /created
sollte gehen. face-smile
XxDustyxX
XxDustyxX 04.05.2011 um 17:19:08 Uhr
Goto Top
Zitat von @Loeffelstiel:
delage32 __tmp__ 60 /recurse /created
sollte gehen. face-smile

Mmh... klingt plausibel! Ich werde das mal testen!

Danke & Grüße
XxDustyxX
XxDustyxX 04.05.2011 um 17:31:44 Uhr
Goto Top
Wenn mich nicht alles täuscht sollte das Script folgendermaßen aussehen:

DelAge32 C:\files\ _tmp_ 60 /recurse /created /includeRHS

Ich habe es noch nicht getestet... würde ich aber vorher via /preview machen!

Grüße
Skyemugen
Skyemugen 04.05.2011 um 17:33:47 Uhr
Goto Top
Aloha,

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 ^_^
Biber
Biber 04.05.2011 um 17:49:37 Uhr
Goto Top
Moin XxDustyxX,

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.

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
Skyemugen
Skyemugen 05.05.2011 um 08:59:38 Uhr
Goto Top
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 * 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é
XxDustyxX
XxDustyxX 05.05.2011 um 09:18:47 Uhr
Goto Top
Moin Andre,

Danke für den Hinweis! Du kannst sicher sein das ich alle Beiträge vollständig durchlese! Es kann aber gut sein, dass ich im Eifer des Gefechtes die Platzhalter vergessen habe. face-smile

Grüße
XxDustyxX
XxDustyxX 05.05.2011 um 09:29:43 Uhr
Goto Top
Hallo Biber,

ich habe bei meiner ersten Suche gehofft, eine Lösung zu finden die genau meiner Problemstellung entspricht. Es hätte ja sein können, dass schon einmal jemand eine Lösung gesucht hat.

Da dies nicht der Fall war, habe ich mich dazu entschlossen meine Frage an das Forum zu stellen.

Mit den mittlerweile geposteten Beiträgen werde ich heute damit beginnen, ein erstes Script zum testen zu erstellen.

Ich danke schon einmal allen die dabei geholfen haben und mir Tipps gegeben haben!

Vielen Dank und Grüße

XxDustyxX

P.S. Ich werde das Script als geplanten Task laufen lassen... face-wink
XxDustyxX
XxDustyxX 05.05.2011 um 12:31:34 Uhr
Goto Top
Sooo... nach einigen Tests kann ich Erfolg vermelden! face-smile

Das Script läuft einwandfrei! Vielen Dank an alle die zur Lösung beigetragen haben!!

Bis bald und viele Grüße

XxDustyxX