Top-Themen

Aktuelle Themen (A bis Z)

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

Dateien Löschen als Dienst mit Filterung

Frage Microsoft Windows Tools

Mitglied: petere

petere (Level 1) - Jetzt verbinden

18.04.2014, aktualisiert 19.04.2014, 3151 Aufrufe, 8 Kommentare, 1 Danke

Hallo,

ich suche ein Tool, welches auf einem Windows-Server läuft und folgendes kann:

- Man gibt mehrere Verzeichnisse an
- Filter nach Dateiname und Dateialter
z.B. Lösche alle Dateien und leere Unterverzeichnisse, die älter als 90 Tage sind, mit *.bak enden ABER nicht die, welche am ersten jeden Monats erstellt wurden.

Habt ihr da ein Tool, was das kann?
Viele Grüße,
Peter
Mitglied: jsysde
19.04.2014 um 09:47 Uhr
Moin.

Spontan fällt mir da DelAge32 ein:
http://www.horstmuc.de/wbat32d.htm

Cheers,
jsysde
Bitte warten ..
Mitglied: petere
19.04.2014 um 10:08 Uhr
Oh das klingt toll.
Jetzt ist die frage: verzichte ich auf den Filter, dass Dateien des Monatsersten nicht gelöscht werden oder gibt's einen workaround.

Mit fällt spontan nix ein.
Bitte warten ..
Mitglied: jsysde
19.04.2014 um 10:17 Uhr
Moin.

Auch wieder spontan: Nach Datum filtern innerhalb der Batchdatei, mit der du DelAge32.exe aufrufst und dann eben DelAge32.exe mehrmals aus der Batch heraus starten mit unterschiedlichen Parametern, also einmal "Files von <aktuelles Datum> bis <aktuelles Datum -n Tage>", dann "letzter Monat exclude 01.Tag des Monats" usw. Ist sicherlich ein bisschen Gebastel und Geskripte, aber es funktioniert.

Cheers,
jsysde
Bitte warten ..
Mitglied: bastla
19.04.2014, aktualisiert um 11:38 Uhr
Hallo petere!

Ein VBScript für diesen Zweck könnte etwa so aussehen:
01.
' * hier eigenen Bedürfnissen anpassen * 
02.
Ordnerliste =    "D:\Ordnerliste.txt" 'Liste der zu bearbeitenden Ordner; 1 Ordner je Zeile 
03.
Dateitypen =     "D:\Typen.txt" 'Liste der Dateitype; 1 Typ je Zeile 
04.
Alter =          90 'Alter der zu löschenden Dateien in Tagen 
05.
ErstellungsTag = 1 'Dateien, die an diesem Tag des Monats erstellt wurden, nicht löschen 
06.
' * Ende der Anpassungen * 
07.
 
08.
 
09.
Set fso = CreateObject("Scripting.FileSystemObject") 
10.
Verzeichnis = Split(fso.OpenTextFile(Ordnerliste).ReadAll, vbCrLF) 'Ordnerliste einlesen 
11.
Include = LCase("#" & Replace(fso.OpenTextFile(Dateitypen).ReadAll, vbCrLF, "#") & "#") 'Dateitypen einlesen 
12.
 
13.
Heute = Date() 
14.
 
15.
For n = 0 To UBound(Verzeichnis) 'alle Ordner durchgehen 
16.
    Set Ordner = fso.GetFolder(Verzeichnis(n)) 
17.
    DeleteInFolder(Ordner) 'Lösch-Unterprogramm für Ordner aufrufen 
18.
Next 
19.
 
20.
Sub DeleteInFolder(Ordner) 
21.
Set Dateien = Ordner.Files 
22.
For Each Datei In Dateien 'alle Dateien in diesem Ordner durchgehen 
23.
    If Datei.DateLastModified < (Heute - Alter) Then 'Datei ist alt genug 
24.
        If InStr(Include, "#" & LCase(fso.GetExtensionName(Datei.Name)) & "#") > 0 Then 'Datei hat passenden Typ 
25.
            If Day(Datei.DateCreated) <> ErstellungsTag Then 'nicht am festgelegten Tag eines Monats erstellt 
26.
                On Error Resume Next 
27.
                'Datei.Delete 'Datei löschen 
28.
                WScript.Echo Datei.DateLastModified & "_" & Datei.Path 'zu löschende Datei nur anzeigen 
29.
                'Falls Fehler "permission denied" aufgetreten, ignorieren, ansonsten Script abbrechen 
30.
                If Err And Err <> 70 Then MsgBox "Fehler (Code=" & Err & ")", vbCritical: WScript.Quit 
31.
                On Error Goto 0 
32.
            End If 
33.
        End If 
34.
    End If 
35.
Next 
36.
 
37.
For Each Unter In Ordner.SubFolders 'alle Unterordner durchgehen 
38.
    DeleteInFolder(Unter) 'DeleteInFolder rekursiv aufrufen 
39.
    If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then 'Unterverzeichnis leer 
40.
        'If Unter.DateLastModified < (Heute - Alter) Then Unter.Delete 'löschen, wenn Ordner alt genug 
41.
        If Unter.DateLastModified < (Heute - Alter) Then WScript.Echo "#" & Unter.DateLastModified & "_" & Unter.Path 'zu löschenden Ordner nur anzeigen 
42.
    End If 
43.
Next 
44.
End Sub
Benötigt werden die in den Zeilen 2 und 3 angeführten Textdateien, um die zu bearbeitenden Verzeichnisse bzw die zu berücksichtigenden Dateitypen festzulegen - für die Dateitypen könnte die Datei zB folgenden Inhalt haben:
01.
bak 
02.
tmp 
03.
log
- damit würden dann nur "*.bak"-, "*.tmp"- und "*.log"-Dateien gelöscht. Ein Filter für Dateinamen ist derzeit noch nicht integriert, ließe sich aber bei Bedarf "nachrüsten".

Zum Testen das Script mit
cscript "D:\Scriptname.vbs"
aus einer CMD-Shell starten - es werden dann alle Dateien und Ordner (Kennzeichnung mit vorangestelltem "#") angezeigt, die gelöscht würden, mit Änderungsdatum und Pfad angezeigt. Ordner werden allerdings nur aufscheinen, wenn sie bereits vorher leer waren (da ja noch keine Dateien gelöscht werden).

Wenn das Ergebnis ok aussieht, die Zeilen 27 und 40 aktivieren (indem der Apostroph ' am Zeilenanfang entfernt wird) und vor die (dann nicht mehr benötigten) Zeilen 28 und 41 einen Apostroph setzen oder diese Zeilen einfach entfernen. Dann kann das Script auch ohne "cscript" bzw per Doppelklick gestartet werden.

Noch ein Hinweis: Bei Verzeichnissen wird nur das Alter, aber nicht der Erstellungstag, geprüft - ein leeres Verzeichnis zu behalten, weil es am 1. eines Monats erstellt wurde, dürfte nicht nötig sein, wobei sich aber natürlich auch diese Prüfung ergänzen ließe.

Grüße
bastla
Bitte warten ..
Mitglied: petere
19.04.2014 um 11:33 Uhr
Danke euch beiden, das sind echt sehr gute loesungen.
Bitte warten ..
Mitglied: bastla
19.04.2014 um 11:33 Uhr
@ jsysde
Im Fall des Falles würde ich eher "delage32" mit "/preview" aufrufen und dann jede der aufgelisteten Dateien auf den Erstellungstag prüfen - das Löschen der danach leeren Ordner bliebe so allerdings auf der Strecke ...

Grüße
bastla
Bitte warten ..
Mitglied: colinardo
LÖSUNG 19.04.2014, aktualisiert um 13:10 Uhr
Hallo Peter,
und hier noch die Powershell-Variante:
01.
function Cleanup-Folders { 
02.
    param( 
03.
        [parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string[]]$folders, 
04.
        [int]$olderthandays, 
05.
        [string]$filepattern = "*.*", 
06.
        [switch]$RemoveEmptyDirs, 
07.
        [switch]$Recurse, 
08.
        [ValidateRange(1,31)][int]$keepfileswithdayofmonth, 
09.
        [string]$logfile 
10.
11.
 
12.
    process{ 
13.
         
14.
        foreach($folder in $folders){ 
15.
            if (Test-Path $folder) { 
16.
                # process files ----------- 
17.
                if ($Recurse){ 
18.
                    $files = gci $folder -Recurse | ?{!$_.PSIsContainer} 
19.
                }else{ 
20.
                    $files = gci $folder | ?{!$_.PSIsContainer} 
21.
22.
                if ($olderthandays -gt 0){ 
23.
                    $files = $files | ?{$_.Name -like $filepattern -and $_.LastWriteTime -lt (get-date).AddDays(-$olderthandays)}  
24.
25.
                if ($keepfileswithdayofmonth -gt 0){ 
26.
                    $files = $files | ?{(get-date $_.LastWriteTime).Day -ne $keepfileswithdayofmonth} 
27.
28.
                $files = $files | ?{$_.Name -like $filepattern} 
29.
                foreach($file in $files){ 
30.
                    remove-item $file.FullName -Force -EA SilentlyContinue -EV err 
31.
                    if ($err.Count -gt 0){ 
32.
                        write-host "Beim Löschen von Ordner: '$($file.Fullname)' ist ein Fehler aufgetreten: $($err[0].ErrorDetails.Message)" -BackgroundColor Red -ForegroundColor Yellow 
33.
                        if ($logfile){echo "ACHTUNG Fehler: $($err[0].ErrorDetails.Message)" | out-file $logfile -Force -Append} 
34.
                    }else{ 
35.
                        write-host "Lösche Datei: '$($file.Fullname)'" -ForegroundColor Green 
36.
                        if($logfile){echo "$(get-date -Format "dd.MM.yyyy hh:mm:ss") - Datei gelöscht: $($file.FullName)" | out-file $logfile -Force -Append} 
37.
38.
39.
                 
40.
                # process empty folders ---- 
41.
                if($RemoveEmptyDirs){ 
42.
                    if ($Recurse){ 
43.
                        $allSubfolders = gci $folder -Recurse | ?{$_.PSIsContainer} 
44.
                    }else{ 
45.
                        $allSubfolders = gci $folder | ?{$_.PSIsContainer} 
46.
47.
                    $allSubfolders = $allSubfolders | ?{$_.GetDirectories().Count -eq 0 -and $_.GetFiles().Count -eq 0} 
48.
                    foreach($f in $allSubfolders){ 
49.
                        remove-item $f.FullName -Force -EA SilentlyContinue -EV err 
50.
                        if ($err.Count -gt 0){ 
51.
                            write-host "Beim Löschen von Ordner: '$($f.Fullname)' ist ein Fehler aufgetreten: $($err[0].ErrorDetails.Message)" -BackgroundColor Red -ForegroundColor Yellow 
52.
                            if ($logfile){echo "ACHTUNG Fehler: $($err[0].ErrorDetails.Message)" | out-file $logfile -Force -Append} 
53.
                        }else{ 
54.
                            write-host "Lösche Ordner: '$($f.Fullname)'" -ForegroundColor Green 
55.
                            if($logfile){echo "$(get-date -Format "dd.MM.yyyy hh:mm:ss") - Leerer Ordner gelöscht: $($f.FullName)" | out-file $logfile -Force -Append} 
56.
57.
                    }  
58.
                }  
59.
60.
61.
62.
}
Der Aufruf der Function erfolgt dann so:
Cleanup-Folders -folders "C:\ordner1","d:\Ordner2","E:\ordner3" -olderthandays 90 -filepattern "*.bak" -Recurse -RemoveEmptyDirs -keepfileswithdayofmonth 1 -logfile "C:\logfile.txt"
Der Parameter -folders ist dabei Pflichtangabe und es können mehrere Ordner mit Komma getrennt angegeben werden, die anderen Parameter sind Optional und können nach Bedarf kombiniert werden. Wird kein -filepattern angegeben wird von *.* ausgegangen.

Viel Spaß

Grüße Uwe
Bitte warten ..
Mitglied: petere
19.04.2014 um 13:10 Uhr
Super, herzlichen Dank
Bitte warten ..
Ähnliche Inhalte
Netzwerkmanagement
Umstellung von MAC-Filterung auf RADIUS
Frage von BrigadeOfTheWickedNetzwerkmanagement3 Kommentare

Guten Tag, In unserem Studentenwohnheim wollen wir den Netzwerkzugang auf eine Authentifizierung per RADIUS umstellen. Aktuell tragen wir noch ...

Firewall
Filterung von HTTPS-Aufrufen mit Mikrotik
gelöst Frage von daarmaFirewall4 Kommentare

Servus miteinander, ich komme jetzt irgendwie nicht weiter. Meine Aufgabenstellung in kurzen Worten: Für eine Anzahl von WLAN-Usern soll ...

Windows Server
GPO - Filterung nach Gruppenzugehörigkeit
gelöst Frage von FA-jkaWindows Server11 Kommentare

Kann ich bei Gruppenrichtlinien eigentlich auch danach filtern, ob der Computer einer bestimmten Gruppe im AD zugeordnet ist? Ich ...

Microsoft
Automatische Eventlogauswertung mit Filterung
gelöst Frage von DerWoWussteMicrosoft12 Kommentare

Moin Kollegen. Ich möchte die Machbarkeit von folgendem prüfen: kann ich per Skript das Sicherheitseventlog auf Vorhandensein von Events ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 13 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 17 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware10 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...