aschinnerl
Goto Top

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?

Content-Key: 57688

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

Printed on: May 5, 2024 at 02:05 o'clock

Member: gemini
gemini Apr 26, 2007 at 19:48:07 (UTC)
Goto Top
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.
''--------------------------------------------------------------------------------------  
'' 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
Member: aschinnerl
aschinnerl Apr 26, 2007 at 20:18:33 (UTC)
Goto Top
Leider kenne ich mich mit VBS nicht aus.

Geht das nicht einfacher mit einer Batchdatei?
Member: Biber
Biber Apr 26, 2007 at 20:50:06 (UTC)
Goto Top
Moin aschinnerl
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.
Member: gemini
gemini Apr 27, 2007 at 03:13:59 (UTC)
Goto Top
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.
Davon abgesehen, wenn man alles was mit Prüfung und Logging zusammenhängt rausnimmt wird sie auch gleich wesentlich kürzer.