venator
Goto Top

Dateien und Verzeichnisse automatisch loeschen

Alle Dateien und Ordner die länger als X Tage nicht berbeitet wurden, löschen

Hallo an alle,

wir haben ein Austauschlaufwerk (E:\Austausch) für Files. Dieses Laufwerk wuchert, da es nicht gepflegt wird.
Nun möchte ich ein (VB-)Script laufen lassen, welches alle Dateien die länger als 30 Tage nichtmehr geöffnet wurden, löschen.
Notfalls ginge auch älter als 30 Tage, aber optimal wäre länger als 30 Tage nichtmehr geöffnet.
Des Weiteren sollen leere Verzeichnisse ohne Inhalt gelöscht werden, mit der Ausnahme zweier Ordner (Temp1 + Temp2)

Wie geht das? Gibt es hierfür ein VB Script? Notfalls auch mit einem externen Tool, wenn es Windows Server 2003 geeignet ist und als Dienst läuft. Ein Script könnte man halt prima per Taskmanager automatisch ausführen.

Pseudocode sähe doch so oder ähnlich aus:

BEGIN
OPEN Verzeichnis "E:\Autausch"  
REPETE UNTIL Alle Verzeichnisse inkl. Unterverzeichnisse
IF Windowsattribut "Zuletzt geöffnet am" > 30 Tage DANN löschen  
IF Verzeichnis = leer UND UNGLEICH (Verzeichnisname = Temp1 ODER Temp2) DANN lösche Verzeichnis
END

Wie sieht das ganze dann in VB-Script aus?

Grüße + Danke,
Venator

[Edit Biber] WTF sind " leere Verzeichnisse ohne Inhalt "??[/Edit]

Content-Key: 90127

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

Printed on: April 19, 2024 at 17:04 o'clock

Member: bastla
bastla Jun 18, 2008 at 21:34:12 (UTC)
Goto Top
Hallo Venator!

Wir hatten hier zwar schon einmal ein ähnliches Script, aber ich hab's gleich noch angepasst:
'DelOldFilesAndEmptyFoldersWithExclusions.vbs  
Const Fld = "E:\Austausch"  
Const Excl = "§Temp1§Temp2§"  
Old = 30 'Tage  

Set fso = CreateObject("Scripting.FileSystemObject")  

Limit = Date() - Old
DeleteInFolder(fso.GetFolder(Fld))

Sub DeleteInFolder(Folder)
' Alle Dateien in diesem Ordner abklappern  
For Each File In Folder.Files
    If File.DateLastAccessed < Limit Then
        On Error Resume Next
        File.Delete
        If Err And Err <> 70 Then MsgBox "Unerwarteter Fehler (Code=" & Err & ")", vbCritical: WScript.Quit  
        On Error Goto 0
    End If
Next

'Unterordner abklappern, DeleteInFolder rekursiv aufrufen  
For Each SubFld In Folder.SubFolders
    DeleteInFolder(SubFld)
    If InStr(1, Excl, "§" & SubFld.Name & "§", vbTextCompare) = 0 Then  
        If (SubFld.SubFolders.Count + SubFld.Files.Count) = 0 Then SubFld.Delete
    End If
Next
End Sub
Die vom Löschen (leerer Verzeichnisse) auszuschließenden Verzeichnisnamen sind in Zeile 3 jeweils durch "§" begrenzt einzutragen, die übrigen Vorgaben in den Zeilen 2 und 4 sollten selbsterklärend sein face-wink.

Da nur oberflächlich getestet, solltest Du das Script vielleicht zuerst nur auf Testdaten loslassen ...

Grüße
bastla
Member: Venator
Venator Jun 19, 2008 at 08:14:47 (UTC)
Goto Top
Super, damit ist mein Problem gelöst.
Habe es selber nochmal durchgeschaut und dann auf zwei Testverzeichnisse angewendet.

Die beiden anderen Themen hatte ich via Suchfunktion gefunden, jedoch war das nicht exakt das was ich suche. Teilweise hätte ich es selbst hinbekommen, aber nur Teile eben. Meine VB-Kenntnisse sind sehr bescheiden, aber ich arbeite daran.

Danke nochmal für die Hilfe,
Grüße V..