Dateien löschen und dabei bestimmte Dateiendungen ausschließen
Hallo Leute,
ich habe hier ein Script (Alte Dateien nach x Tagen löschen und dabei bestimmte Dateiendungen ausschließen) gefunden das genau das machen soll was ich benötige.
Ich habe da noch einige Fragen:
ich habe versucht das Script mit der Endung .vbs laufen zu lassen, es tut sich aber nix. Welche Dateiendung muss das Script haben?
Fehlt vielleicht bei diesem Script noch etwas?
Wenn ich das richtig verstehe gehören in der Ordnerliste.txt die Verzeichnisse die NICHT durchsucht werden sollen (z.B. C:\Sicherung).
In der Ausschluss.txt gehören die Dateiendungen die NICHT gelöscht werden sollen (z.B. .vbs).
Ist das richtig so??
Besten Dank schon einmal im voraus
hier noch mal das Script:
ich habe hier ein Script (Alte Dateien nach x Tagen löschen und dabei bestimmte Dateiendungen ausschließen) gefunden das genau das machen soll was ich benötige.
Ich habe da noch einige Fragen:
ich habe versucht das Script mit der Endung .vbs laufen zu lassen, es tut sich aber nix. Welche Dateiendung muss das Script haben?
Fehlt vielleicht bei diesem Script noch etwas?
Wenn ich das richtig verstehe gehören in der Ordnerliste.txt die Verzeichnisse die NICHT durchsucht werden sollen (z.B. C:\Sicherung).
In der Ausschluss.txt gehören die Dateiendungen die NICHT gelöscht werden sollen (z.B. .vbs).
Ist das richtig so??
Besten Dank schon einmal im voraus
hier noch mal das Script:
Set fso = CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
On Error Resume Next
'* hier eigenen Bedürfnissen anpassen *
strOrdnerliste = "D:\Sicherung\Ordnerliste.txt"
strAusschlussliste = "D:\Sicherung\Ausschluss.txt"
Set objOrdnerliste = fso.OpenTextFile(strOrdnerliste, 1)
Verzeichnis = Split(objOrdnerliste.ReadAll, vbCrLF)
objOrdnerliste.Close
Set objAusschlussliste = fso.OpenTextFile(strAusschlussliste, 1)
If Not objAusschlussliste.AtEndOfStream Then 'falls nicht schon am Dateiende (= Datei ist leer) ...
Exclude = objAusschlussliste.ReadLine ' ... erste Zeile lesen und speichern ...
Else
Exclude = "" '... ansonsten gibt es keine Ausnahmen beim Löschen.
End If
objAusschlussliste.Close
Aufheben = 1 'Anzahl der Tage
' * Ende der Anpassungen *
Heute = Date()
For n = 0 To UBound(Verzeichnis)
Set Ordner = fso.GetFolder(Verzeichnis(n))
DeleteInFolder(Ordner)
Next
Sub DeleteInFolder(Ordner)
Set Dateien = Ordner.Files
' Alle Dateien in diesem Ordner abklappern
For Each Datei In Dateien
If Datei.DateLastModified < (Heute - Aufheben) Then
Ext = Mid(Datei.Name, InStrRev(Datei.Name, "."))
If InStr(Exclude, Ext) = 0 Then
On Error Resume Next
Datei.Delete
If Err And Err <> 70 Then MsgBox "Unerwarteter Fehler (Code=" & Err & ")", vbCritical: WScript.Quit
On Error Goto 0
End If
End If
Next
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
For Each Unter In Ordner.SubFolders
DeleteInFolder(Unter)
If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then Unter.Delete
Next
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 84047
Url: https://administrator.de/contentid/84047
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo speedy4you!
Grüße
bastla
P.S.: Scripts werden besser lesbar dargestellt, wenn Du -Tags verwendest.
Wenn ich das richtig verstehe gehören in der Ordnerliste.txt die Verzeichnisse die NICHT durchsucht werden sollen (z.B. C:\Sicherung).
Nein, es ist umgekehrt: Die zu durchsuchenden Ordner sind (jeweils einer pro Zeile) in die "Ordnerliste.txt" zu schreiben - mehr zu diesem Script findest Du im zitierten Thread ...Grüße
bastla
P.S.: Scripts werden besser lesbar dargestellt, wenn Du -Tags verwendest.
Hallo speedy4you!
Um eine Rückmeldung zu erhalten, könntest Du unmittelbar vor der Zeile "Sub DeleteInFolder(Ordner)" zB eine Zeile
einbauen.
Grüße
bastla
P.S.: Danke für die Code-Formatierung, allerdings hast Du das "" etwas zu früh gesetzt (sollte erst nach dem letzten "End Sub" folgen) ...
... wie starte ich das Script?
Unter der Annahme, dass Du das Script als "C:\Scripts\DelOld.vbs" gespeichert hättest, entweder per Doppelklick oder (von der Kommandozeile bzw aus einem Batch heraus) mitcscript //nologo "C:\Scripts\DelOld.vbs"
Um eine Rückmeldung zu erhalten, könntest Du unmittelbar vor der Zeile "Sub DeleteInFolder(Ordner)" zB eine Zeile
WScript.Echo "Fertig."
Grüße
bastla
P.S.: Danke für die Code-Formatierung, allerdings hast Du das "" etwas zu früh gesetzt (sollte erst nach dem letzten "End Sub" folgen) ...
Hallo speedy4you!
Dazu müssen das Script und auch die Ausschlussliste etwas angepasst werden.
Die "Ausschluss.txt" muss jetzt zeilenweise die auszuschließenden Endungen enthalten, zB:
"Endungen" ist dabei so zu verstehen, dass der letzte Teil des Dateinamens (inkl Extension) geprüft wird.
Grüße
bastla
Dazu müssen das Script und auch die Ausschlussliste etwas angepasst werden.
Set fso = CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
On Error Resume Next
' * hier eigenen Bedürfnissen anpassen *
strOrdnerliste = "Z:\Sicherung\Ordnerliste.txt"
strAusschlussliste = "Z:\Sicherung\Ausschluss.txt"
Aufheben = 1 'Anzahl der Tage
' * Ende der Anpassungen *
Set objOrdnerliste = fso.OpenTextFile(strOrdnerliste, 1)
Verzeichnis = Split(objOrdnerliste.ReadAll, vbCrLF)
objOrdnerliste.Close
Set objAusschlussliste = fso.OpenTextFile(strAusschlussliste, 1)
Exclude = Split(objAusschlussliste.ReadAll, vbCrLF)
objAusschlussliste.Close
Heute = Date()
For n = 0 To UBound(Verzeichnis)
Set Ordner = fso.GetFolder(Verzeichnis(n))
DeleteInFolder(Ordner)
Next
Sub DeleteInFolder(Ordner)
Set Dateien = Ordner.Files
' Alle Dateien in diesem Ordner abklappern
For Each Datei In Dateien
If Datei.DateLastModified < (Heute - Aufheben) Then
ToKeep = False
For Each Ex In Exclude
If LCase(Right(Datei.Name, Len(Ex))) = LCase(Ex) Then
ToKeep = True
Exit For
End If
Next
If Not ToKeep Then
On Error Resume Next
Datei.Delete
If Err And Err <> 70 Then MsgBox "Unerwarteter Fehler (Code=" & Err & ")", vbCritical: WScript.Quit
On Error Goto 0
End If
End If
Next
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
For Each Unter In Ordner.SubFolders
DeleteInFolder(Unter)
If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then Unter.Delete
Next
End Sub
.doc
.rtf
0.pdf
Grüße
bastla