Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Wie kann ich in einem Verzeichnis bestimmte Dateien eines bestimmten Alters via Script löschen?

Frage Entwicklung Batch & Shell

Mitglied: XxDustyxX

XxDustyxX (Level 1) - Jetzt verbinden

04.05.2011 um 15:57 Uhr, 6049 Aufrufe, 20 Kommentare

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
Mitglied: TsukiSan
04.05.2011 um 16:10 Uhr
da gab's doch neulich dieses Script hier im Forum:
01.
'*************************************************************************  
02.
'Dateien die älter als intTage sind löschen  
03.
'DateLastModified=Änderungsdatum; DateCreated=Erstellungsdatum  
04.
'WScript.Echo intZahl & " Dateien gelöscht." (Ausgabe gelöschter Dateien)  
05.
'*************************************************************************  
06.
 
07.
Set objFSO = CreateObject("Scripting.FileSystemObject")  
08.
strOrdner = "D:\scans\"			'Ordnerpfad angeben  
09.
strExtension = ""	  
10.
intTage = 1				'Anzahl der Tage angeben  
11.
Set objOrdner = objFSO.GetFolder(strOrdner)  
12.
intZahl = 0  
13.
intOrdner = 0 
14.
For Each objDatei In objOrdner.Files  
15.
    If LCase(Right(objDatei.name, Len(strExtension))) = LCase(strExtension) _   
16.
        And DateDiff("d", objDatei.DateCreated, Now) > intTage Then  
17.
        objDatei.Delete  
18.
        intZahl = intZahl + 1  
19.
    End If  
20.
Next  
21.
For Each objUnterordner In objOrdner.SubFolders    
22.
    If DateDiff("d", objUnterordner.DateCreated, Now) > intTage Then   
23.
       objUnterordner.Delete 
24.
       intOrdner = intOrdner + 1   
25.
    End If   
26.
Next   
27.
WScript.Echo intZahl & " Dateien, sowie" & VBCRLF & intOrdner & " Ordner gelöscht."
such mal nach ungefähr: Dateien-und-Ordner-nach-nTage-loeschen

Gruss
Tsuki
Bitte warten ..
Mitglied: XxDustyxX
04.05.2011 um 16:13 Uhr
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
Bitte warten ..
Mitglied: TsukiSan
04.05.2011 um 16:15 Uhr
ups,

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

Gruss
Tsuki
Bitte warten ..
Mitglied: Lochkartenstanzer
04.05.2011 um 16:19 Uhr
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.
Bitte warten ..
Mitglied: XxDustyxX
04.05.2011 um 16:34 Uhr
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
Bitte warten ..
Mitglied: Skyemugen
04.05.2011 um 16:50 Uhr
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
Bitte warten ..
Mitglied: 32067
04.05.2011 um 16:59 Uhr
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 ...
Bitte warten ..
Mitglied: XxDustyxX
04.05.2011 um 17:01 Uhr
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
Bitte warten ..
Mitglied: Loeffelstiel
04.05.2011 um 17:02 Uhr
MoinMoin,

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

http://home.mnet-online.de/horst.muc/wbat32d.htm
Bitte warten ..
Mitglied: XxDustyxX
04.05.2011 um 17:07 Uhr
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
Bitte warten ..
Mitglied: XxDustyxX
04.05.2011 um 17:09 Uhr
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
Bitte warten ..
Mitglied: Loeffelstiel
04.05.2011 um 17:13 Uhr
01.
delage32 _tmp_ 60 /recurse /created
sollte gehen.
Bitte warten ..
Mitglied: XxDustyxX
04.05.2011 um 17:19 Uhr
Zitat von Loeffelstiel:
01.
delage32 __tmp__ 60 /recurse /created
sollte gehen.

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

Danke & Grüße
Bitte warten ..
Mitglied: XxDustyxX
04.05.2011 um 17:31 Uhr
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
Bitte warten ..
Mitglied: Skyemugen
04.05.2011 um 17:33 Uhr
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 ^_^
Bitte warten ..
Mitglied: Biber
04.05.2011 um 17:49 Uhr
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
Bitte warten ..
Mitglied: Skyemugen
05.05.2011 um 08:59 Uhr
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é
Bitte warten ..
Mitglied: XxDustyxX
05.05.2011 um 09:18 Uhr
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.

Grüße
Bitte warten ..
Mitglied: XxDustyxX
05.05.2011 um 09:29 Uhr
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...
Bitte warten ..
Mitglied: XxDustyxX
05.05.2011 um 12:31 Uhr
Sooo... nach einigen Tests kann ich Erfolg vermelden!

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

Bis bald und viele Grüße

XxDustyxX
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst CSV Dateien auswerten mit Script (8)

Frage von Crank69 zum Thema Batch & Shell ...

VB for Applications
gelöst Vbscript bestimmte Zeile ungeachtet der Nummerierung löschen (4)

Frage von aletri zum Thema VB for Applications ...

Batch & Shell
gelöst Batch Änderungsdatum von Dateien vergleichen und ältere löschen (10)

Frage von 129528 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...