Alte Dateien nach x Tagen löschen und dabei bestimmte Dateiendungen ausschließen
HI @ all,
ich hab da mal eine Frage zu diesem Script der in Shell ist.
Hier mal meine Frage kann man den Script so ändern das er bestimmte Dateiendungen nicht löscht wie z.B. *.cfg oder kann man es nicht machen, wenn nicht könnte mir einer von euch einen link geben wo ich so einen Script finden könnte oder mir gleich so einen geben.
Wäre sehr nett von euch.
MFG:
MeiSeed
ich hab da mal eine Frage zu diesem Script der in Shell ist.
'************************************************************
'
' Löscht alle Dateien, die seit einem bestimmten Datum
' nicht mehr geändert wurden
'
'************************************************************
Set fso = CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
On Error Resume Next
'******* hier eigenen Bedürfnissen anpassen *****************
dim Verzeichnis(2)
Verzeichnis(0) = "Z:\BtD\System_tgl\"
Verzeichnis(1) = "z:\BtD\Exchange2003\"
REM Verzeichnis(2) = "C:\Temp\Verlauf"
Aufheben = 1 'Anzahl der Tage
'********Ende der Anpassungen********************************
for n=0 to 2
Set ordner = fso.GetFolder(Verzeichnis(n))
heute = Date()
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
on error resume next
datei.delete
if err and err<>70 then msgbox "Unerwarteter Fehler (Code="&err&")",16 : wscript.quit
on error goto 0
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
End If
Next
End Sub
Hier mal meine Frage kann man den Script so ändern das er bestimmte Dateiendungen nicht löscht wie z.B. *.cfg oder kann man es nicht machen, wenn nicht könnte mir einer von euch einen link geben wo ich so einen Script finden könnte oder mir gleich so einen geben.
Wäre sehr nett von euch.
MFG:
MeiSeed
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 73406
Url: https://administrator.de/contentid/73406
Ausgedruckt am: 25.11.2024 um 14:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo MeiSeed!
Das geänderte Script könnte etwa so aussehen:
Grüße
bastla
Das geänderte Script könnte etwa so aussehen:
Set fso = CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
On Error Resume Next
'* hier eigenen Bedürfnissen anpassen *
Verzeichnis = Array(_
"Z:\BtD\System_tgl\", _
"z:\BtD\Exchange2003\", _
"C:\Temp\Verlauf" _
)
Exclude = ".cfg.ini.set" 'Endungen nicht zu löschender Dateien
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
Grüße
bastla
Hallo MeiSeed!
Wenn Du in eine Textdatei jeweils einen Ordner je Zeile schreibst, kannst Du diese so lesen:
Mit ".ReadAll" wird der gesamte Inhalt der Textdatei gelesen und mit "Split()" in ein Array aufgeteilt, wobei als Trennzeichen für die Aufteilung das Zeilenende ("vbCrLF") gilt. Als Ergebnis steht dann jede Zeile der Textdatei in einem Element des Arrays "Verzeichnis" und Du kannst den Rest des Programmes wie bisher verwenden.
Für die nicht zu löschenden Dateiendungen kannst Du eine weitere Textdatei erstellen und alle Endungen (wie im Script für die Variable "Exclude") in eine Zeile schreiben. Zum Auslesen kannst Du wie oben vorgehen, wobei Du allerdings nur die erste Zeile benötigst.
Das "Set fso=..." brauchst Du natürlich innerhalb eines Scripts nur einmal zu schreiben.
Grüße
bastla
Wenn Du in eine Textdatei jeweils einen Ordner je Zeile schreibst, kannst Du diese so lesen:
strOrdnerliste = "D:\Sicherung\Ordnerliste.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set objOrdnerliste = fso.OpenTextFile(strOrdnerliste, 1)
Verzeichnis = Split(objOrdnerliste.ReadAll, vbCrLF)
objOrdnerliste.Close
Für die nicht zu löschenden Dateiendungen kannst Du eine weitere Textdatei erstellen und alle Endungen (wie im Script für die Variable "Exclude") in eine Zeile schreiben. Zum Auslesen kannst Du wie oben vorgehen, wobei Du allerdings nur die erste Zeile benötigst.
strAusschlussliste = "D:\Sicherung\Ausschluss.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
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
Grüße
bastla
Hallo MeiSeed!
Die beiden Codeabschnitte sollen als Ersatz für die bisher im Script vorgenommenen Festlegungen dienen, also sähe der entsprechende Codeteil so aus:
Eigentlich sollte mit dem dargestellten Code das Einlesen aller einzeln (zeilenweise) angegebenen Ordner gelingen.
Wenn Du mit einer InputBox arbeiten willst (die Eingabe steht dann zb in "strEingabe"), müstest Du diese Eingabe mit
in das Array "Verzeichnis" stellen, damit der Rest des Programmes unverändert bleiben kann.
Grüße
bastla
Die beiden Codeabschnitte sollen als Ersatz für die bisher im Script vorgenommenen Festlegungen dienen, also sähe der entsprechende Codeteil so aus:
'* hier eigenen Bedürfnissen anpassen *
strOrdnerliste = "D:\Sicherung\Ordnerliste.txt"
strAusschlussliste = "D:\Sicherung\Ausschluss.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
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 *
Wenn Du mit einer InputBox arbeiten willst (die Eingabe steht dann zb in "strEingabe"), müstest Du diese Eingabe mit
Verzeichnis = Array(strEingabe)
Grüße
bastla
Hallo MeiSeed!
Ich habe eben das Script in der folgenden Fassung (einzige Änderung gegenüber oben: "Set fso = ..." steht nur in der allerersten Scriptzeile) getestet und keine Problem hinsichtlich des Einlesens der Ordner oder hinsichtlich des Löschens von leeren Ordnern gefunden.
Grüße
bastla
Ich habe eben das Script in der folgenden Fassung (einzige Änderung gegenüber oben: "Set fso = ..." steht nur in der allerersten Scriptzeile) getestet und keine Problem hinsichtlich des Einlesens der Ordner oder hinsichtlich des Löschens von leeren Ordnern gefunden.
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
Grüße
bastla