speedy4you
Goto Top

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:
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

Content-Key: 84047

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

Printed on: April 18, 2024 at 08:04 o'clock

Member: bastla
bastla Mar 27, 2008 at 07:48:38 (UTC)
Goto Top
Hallo speedy4you!

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.
Member: speedy4you
speedy4you Mar 27, 2008 at 08:15:34 (UTC)
Goto Top
Besten Dank für die Antwort,
vielleicht stehe ich etwas auf der "Leitung" aber wie starte ich das Script???
Member: bastla
bastla Mar 27, 2008 at 10:05:44 (UTC)
Goto Top
Hallo speedy4you!

... 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) mit
cscript //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."  
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) ...
Member: speedy4you
speedy4you Mar 27, 2008 at 10:26:03 (UTC)
Goto Top
jo, falsch gesetzt und schon korregiert.

Ich führe das Script mit einem doppelclick aus, so wie du es beschrieben hast.
Zu sehen ist aber nix, Dateien werden auch nicht gelöscht. Ich habe deinen Tip mit der Message mal eingebaut und es läuft durch.

Wenn ich aber die beiden .txt Dateien falsch editiert habe kann auch nichts passieren.
In der Ausschluss.txt steht .txt und .log (untereinander).
Inder Ordnerliste.txt habe ich folgendes stehen: "C:\Scripte\LOG" und "C:\Scripte\txt" auch untereinander geschrieben.

Sollte doch eigendlich richtig sein.
Member: speedy4you
speedy4you Mar 27, 2008 at 10:45:27 (UTC)
Goto Top
So bin schon ein Stückchen weiter. Also es werden alle angegebenen Dateien gelöscht.
Ich möchte aber das alle *0.pdf Dateien nicht gelöscht werden. Es gibt *1.pdf und *2.pdf Dateien.
Wenn ich *0.pdf in der Ausschluss.txt eingebe werden überhaupt keine pdf dateien gelöscht.
Kann mir dabei einer Helfen?

Besten Dank schon mal an alle.
Member: speedy4you
speedy4you Mar 27, 2008 at 14:39:03 (UTC)
Goto Top
hat vielleicht einer eine Idee wie ich es anstellen kann , dass die *0.pdf nicht gelöscht werden?
Member: bastla
bastla Mar 27, 2008 at 22:27:59 (UTC)
Goto Top
Hallo speedy4you!

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
Die "Ausschluss.txt" muss jetzt zeilenweise die auszuschließenden Endungen enthalten, zB:
.doc
.rtf
0.pdf
"Endungen" ist dabei so zu verstehen, dass der letzte Teil des Dateinamens (inkl Extension) geprüft wird.

Grüße
bastla
Member: Biber
Biber Mar 31, 2008 at 05:12:39 (UTC)
Goto Top
Moin speedy4you,

klingt nett, dieses..
Besten Dank schon einmal im voraus
... aber ich kann dann immer nicht erkennen, ob die Lösungsvorschläge geholfen haben.
Gibst Du bitte noch mal Feedback im Forum?

Danke
Biber
Member: speedy4you
speedy4you Mar 31, 2008 at 05:56:58 (UTC)
Goto Top
Hallo Biber,
ich habe es leider noch nicht ausprobiert, weiss nicht ob ich heute dazu komme.
Spätestens morgen werde ich aber testen und natürlich bekommst Du dann auch eine Rückinfo.

Besten Dank schon einmal im voraus.
Member: speedy4you
speedy4you Apr 01, 2008 at 08:45:55 (UTC)
Goto Top
Hallo Biber,
es scheint zu funktionieren. Werde es aber noch genauer testen müssen.
Besten Dank für die Hilfe.