Suche Script das automatisch jede Woche Dateien nach Datum löscht
Ich suche ein Batch Datei die mir zb jeden Sonntag (per Taskplaner aufgerufen) automatisch alle Dateien löscht die älter sind als 5 Tage.
Kann mir da von euch jemand helfen?
Kann mir da von euch jemand helfen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 57688
Url: https://administrator.de/forum/suche-script-das-automatisch-jede-woche-dateien-nach-datum-loescht-57688.html
Ausgedruckt am: 04.04.2025 um 06:04 Uhr
4 Kommentare
Neuester Kommentar
Hallo aschinnerl,
wenn dir VBS recht ist, kannst du das hier evtl. verwenden.
Es läuft jetzt als Teil eines Loginscript, kann aber leicht umgebaut werden.
Durchsucht eine Ordnerstruktur ab dem Startverzeichnis und löscht alle Dateien, die älter als di e bei -t angegebene Anzahl Tage ist.
Jede gelöschte Datei wird in ein Log geschrieben.
HTH,
gemini
wenn dir VBS recht ist, kannst du das hier evtl. verwenden.
Es läuft jetzt als Teil eines Loginscript, kann aber leicht umgebaut werden.
Durchsucht eine Ordnerstruktur ab dem Startverzeichnis und löscht alle Dateien, die älter als di e bei -t angegebene Anzahl Tage ist.
Jede gelöschte Datei wird in ein Log geschrieben.
''--------------------------------------------------------------------------------------
'' Erwartet 2 Parameter mit den Schaltern -f und -t direkt gefolgt von den Werten ::::::
'' -f Startverzeichnis für die rekursive Suche :::::::::::::::::::::::::::::::::::::::::
'' -t Time To Life der Files in Tagen ::::::::::::::::::::::::::::::::::::::::::::::::::
''--------------------------------------------------------------------------------------
Option Explicit
Dim WshNetwork
Dim WshShell
Dim objFSO
Dim objFolder
Dim objSubFld
Dim objLog
Dim objArgs
Dim f1
Dim f2
Dim colFiles
Dim arrDate
Dim strScriptName
Dim strCompName
Dim strExt
Dim strStart 'Startverzeichnis für die rekursive Suche
Dim strMSG
Dim strRelPath
Dim strLog
Dim strLogFile
Dim strTemp
Dim intTTL 'Time To Life der Files in Tagen
Dim i
Dim j
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = Wscript.CreateObject("WScript.Network")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strScriptName = Wscript.ScriptName
strCompName = WshNetwork.ComputerName
strExt = ".log"
strLog = "\\Pfad\zum\Logverzeichnis\"
j = 1
strMSG = "Scriptname: " & vbTab & strScriptName & vbCrLf & "running on: " & vbTab & _
strCompName & vbCrLf & "started at: " & vbTab & WeekdayName(Weekday(Date)) & ", " & _
Now & vbCrLf
If objArgs.Count = 2 Then
Dim Item
For Each Item in objArgs
Select Case Left(Item, 2)
Case "-f"
strStart = CStr(Right(Item, Len(Item) - 2))
strMSG = strMSG & "started in: " & vbTab & strStart & vbCrLf
Case "-t"
intTTL = CInt(Right(Item, Len(Item) - 2))
strMsg = strMSG & "criteria: " & vbTab & intTTL & " days" & vbCrLf
End Select
Next
strMsg = strMsg & "_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_" & vbCrLf
If ChkFolder(strStart) Then
Main(strStart)
Else
MsgBox "Argument """ & strStart & """ ungültig - Abbruch"
strMsg = strMsg & "Argument """ & strStart & """ ungültig - Abbruch" & vbCrLf
WriteLog strLog, strMSG
End If
Else
strMsg = strMsg & "Falsche Anzahl an Argumenten (" & objArgs.Count & _
" von 2) - Abbruch" & vbCrLf
WriteLog strLog, strMSG
MsgBox "Falsche Anzahl an Argumenten (" & objArgs.Count & " von 2) - Abbruch"
End If
Sub Main(Startfolder)
If ChkFolder(strLog) = TRUE Then 'das Ziel für das Logfile
strMSG = strMSG & vbCrLf & "#" & vbTab & "RelativePath" & vbTab & "//" & vbTab & _
"DateCreated" & vbTab & "//" & vbTab & "LastModified" & vbTab & "//" & vbTab & _
"LastAccessed" & vbTab & "//" & vbTab & "Action"
j = 0
ListFolder StartFolder
strMSG = strMSG & vbCrLf & vbCrLf & _
"_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_" & vbCrLf & _
j & " files successfully deleted" & vbCrLf & "finished at: " & vbTab & _
WeekdayName(Weekday(Date)) & ", " & Now
WriteLog strLog, strMSG
End If
End Sub
Function ChkFolder(Path2Folder)
ChkFolder = FALSE
If objFSO.FolderExists(Path2Folder) Then
ChkFolder = TRUE
End If
End Function
Private Sub ListFolder(StartFolder)
Set objFolder = objFSO.GetFolder(StartFolder)
ListFiles objFolder
Set objSubFld = objFolder.SubFolders
For Each f2 in objSubFld
ListFolder f2
Next
End Sub
Private Sub ListFiles(Start)
Set colFiles = Start.Files
For Each f1 in colFiles
If DateDiff("d", f1.DateCreated, Date) > intTTL Then
strRelPath = Right(objFSO.GetAbsolutePathName(f1), _
Len(objFSO.GetAbsolutePathName(f1)) - Len(strStart))
strMSG = strMSG & vbCrLf & j + 1 & vbTab & strRelPath & vbTab & "//" & vbTab & f1.DateCreated & _
vbTab & "//" & vbTab & f1.DateLastModified & vbTab & "//" & vbTab & _
f1.DateLastAccessed & vbTab & "//" & vbTab & "deleted"
objFSO.DeleteFile(f1)
j = j + 1
End If
Next
End Sub
Private Sub WriteLog(strLog, Report)
Set objLog = objFSO.CreateTextFile(GenerateFileName, blnNoOverWrite)
objLog.Write Report
objLog.Close
End Sub
Function GenerateFileName()
arrDate = Split(FormatDateTime(Date, 2),".")
strLogFile = strCompName & "_" & strScriptName & "_" & arrDate(2) & "." & arrDate(1) & "." & arrDate(0)
strTemp = strLogFile
For i = 1 To 999
If objFSO.FileExists(strLog & strLogFile & strExt) Then
strLogFile = strTemp & "_" & String(3 - Len(i), "0") & i
Else
GenerateFileName = strLog & strLogFile & strExt
Exit Function
End If
Next
End Function
Set WshNetwork = Nothing
Set WshShell = Nothing
Set objFSO = Nothing
Set objFolder = Nothing
Set objSubFld = Nothing
Set objLog = Nothing
Set objArgs = Nothing
f1 = ""
f2 = ""
colFiles = ""
arrDate = ""
strScriptName = ""
strCompName = ""
strExt = ""
strStart = ""
strMSG = ""
strRelPath = ""
strLog = ""
strLogFile = ""
strTemp = ""
intTTL = ""
i = ""
j = ""
Wscript.Quit
HTH,
gemini
Moin aschinnerl
Aber: auf der Startseite des Forums findest Du einen "neuen Link" zu Horst Schaeffers Software Pages, wo für genau diesen Zweck ein Konsolenutily namens DelAge32 angeboten wird.
Damit bekommst Du Deine Anforderung mit einem Ein-Zeilen-Task hin.
Besser gehts nicht.
Gruss
Biber
P.S. Wenn Du schreibst "Suche Script..." , dann möchte ich den Rückzieher "Leider kenne ich mich mit.... nicht aus" nicht gelten lassen.
Hier im Forum werden ja nun oft und gerne auch winzigste Skriptschnipsel in epischer Breite haarklein erklärt.
Die Chance würde ich mir nicht entgehen lassen, wenn Du auch selbst spezielle Anforderungen lösen willst/musst.
Geht das nicht einfacher mit einer Batchdatei?
Nein, weil die CMD.exe keine Datums-Variablen oder Datumsberechnungen bietet.Aber: auf der Startseite des Forums findest Du einen "neuen Link" zu Horst Schaeffers Software Pages, wo für genau diesen Zweck ein Konsolenutily namens DelAge32 angeboten wird.
Damit bekommst Du Deine Anforderung mit einem Ein-Zeilen-Task hin.
Besser gehts nicht.
Gruss
Biber
P.S. Wenn Du schreibst "Suche Script..." , dann möchte ich den Rückzieher "Leider kenne ich mich mit.... nicht aus" nicht gelten lassen.
Hier im Forum werden ja nun oft und gerne auch winzigste Skriptschnipsel in epischer Breite haarklein erklärt.
Die Chance würde ich mir nicht entgehen lassen, wenn Du auch selbst spezielle Anforderungen lösen willst/musst.
Leider kenne ich mich mit VBS nicht aus.
Geht das nicht einfacher mit einer Batchdatei?
Wenn das mit einer Batch zu lösen wäre, wäre diese für dich sicher nicht lesbarer als das Script oben.Geht das nicht einfacher mit einer Batchdatei?
Davon abgesehen, wenn man alles was mit Prüfung und Logging zusammenhängt rausnimmt wird sie auch gleich wesentlich kürzer.