Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Suche Script das automatisch jede Woche Dateien nach Datum löscht

Frage Microsoft Windows Server

Mitglied: aschinnerl

aschinnerl (Level 2) - Jetzt verbinden

26.04.2007, aktualisiert 27.04.2007, 3925 Aufrufe, 4 Kommentare

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?
Mitglied: gemini
26.04.2007 um 21:48 Uhr
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.
01.
''-------------------------------------------------------------------------------------- 
02.
'' Erwartet 2 Parameter mit den Schaltern -f und -t direkt gefolgt von den Werten :::::: 
03.
'' -f Startverzeichnis für die rekursive Suche ::::::::::::::::::::::::::::::::::::::::: 
04.
'' -t Time To Life der Files in Tagen :::::::::::::::::::::::::::::::::::::::::::::::::: 
05.
''-------------------------------------------------------------------------------------- 
06.
 
07.
Option Explicit  
08.
 
09.
Dim WshNetwork 
10.
Dim WshShell 
11.
Dim objFSO 
12.
Dim objFolder 
13.
Dim objSubFld 
14.
Dim objLog 
15.
Dim objArgs 
16.
Dim f1 
17.
Dim f2 
18.
Dim colFiles 
19.
Dim arrDate 
20.
Dim strScriptName 
21.
Dim strCompName 
22.
Dim strExt 
23.
Dim strStart				'Startverzeichnis für die rekursive Suche 
24.
Dim strMSG 
25.
Dim strRelPath 
26.
Dim strLog 
27.
Dim strLogFile 
28.
Dim strTemp 
29.
Dim intTTL					'Time To Life der Files in Tagen 
30.
Dim i 
31.
Dim j 
32.
 
33.
Set WshShell = WScript.CreateObject("WScript.Shell") 
34.
Set WshNetwork = Wscript.CreateObject("WScript.Network") 
35.
Set objFSO = CreateObject("Scripting.FileSystemObject")  
36.
Set objArgs = WScript.Arguments 
37.
 
38.
strScriptName = Wscript.ScriptName 
39.
strCompName = WshNetwork.ComputerName 
40.
strExt = ".log" 
41.
strLog = "\\Pfad\zum\Logverzeichnis\" 
42.
j = 1 
43.
strMSG = "Scriptname: " & vbTab & strScriptName & vbCrLf & "running on: " & vbTab & _ 
44.
	strCompName & vbCrLf & "started at: " & vbTab & WeekdayName(Weekday(Date)) & ", " & _ 
45.
	Now & vbCrLf 
46.
 
47.
 
48.
If objArgs.Count = 2 Then 
49.
	Dim Item 
50.
	For Each Item in objArgs 
51.
		Select Case Left(Item, 2) 
52.
		Case "-f" 
53.
			strStart = CStr(Right(Item, Len(Item) - 2)) 
54.
			strMSG = strMSG & "started in: " & vbTab & strStart & vbCrLf 
55.
		Case "-t" 
56.
			intTTL = CInt(Right(Item, Len(Item) - 2)) 
57.
			strMsg = strMSG & "criteria: " & vbTab & intTTL & " days" & vbCrLf 
58.
		End Select 
59.
	Next 
60.
 
61.
strMsg = strMsg & "_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_" & vbCrLf 
62.
 
63.
	If ChkFolder(strStart) Then 
64.
			Main(strStart) 
65.
	Else 
66.
		MsgBox "Argument """ & strStart & """ ungültig - Abbruch" 
67.
		strMsg = strMsg & "Argument """ & strStart & """ ungültig - Abbruch" & vbCrLf 
68.
		WriteLog strLog, strMSG 
69.
	End If 
70.
Else	 
71.
	strMsg = strMsg & "Falsche Anzahl an Argumenten (" & objArgs.Count & _ 
72.
		" von 2) - Abbruch" & vbCrLf 
73.
	WriteLog strLog, strMSG 
74.
	MsgBox "Falsche Anzahl an Argumenten (" & objArgs.Count & " von 2) - Abbruch" 
75.
End If 
76.
 
77.
Sub Main(Startfolder) 
78.
If ChkFolder(strLog) = TRUE Then 'das Ziel für das Logfile 
79.
	strMSG = strMSG & vbCrLf & "#" & vbTab & "RelativePath" & vbTab & "//" & vbTab & _ 
80.
		"DateCreated" & vbTab & "//" & vbTab & "LastModified" & vbTab & "//" & vbTab & _ 
81.
		"LastAccessed" & vbTab & "//" & vbTab & "Action" 
82.
	j = 0 
83.
	ListFolder StartFolder 
84.
	strMSG = strMSG & vbCrLf & vbCrLf & _ 
85.
		"_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_--_" & vbCrLf & _ 
86.
		j & " files successfully deleted" & vbCrLf & "finished at: " & vbTab & _ 
87.
		WeekdayName(Weekday(Date)) & ", " & Now 
88.
	WriteLog strLog, strMSG 
89.
End If 
90.
End Sub 
91.
 
92.
Function ChkFolder(Path2Folder) 
93.
ChkFolder = FALSE 
94.
If objFSO.FolderExists(Path2Folder) Then 
95.
	ChkFolder = TRUE 
96.
End If 
97.
End Function 
98.
 
99.
Private Sub ListFolder(StartFolder) 
100.
Set objFolder = objFSO.GetFolder(StartFolder) 
101.
ListFiles objFolder 
102.
Set objSubFld = objFolder.SubFolders 
103.
For Each f2 in objSubFld  
104.
	ListFolder f2  
105.
Next 
106.
End Sub 
107.
 
108.
Private Sub ListFiles(Start)  
109.
Set colFiles = Start.Files 
110.
For Each f1 in colFiles 
111.
	If DateDiff("d", f1.DateCreated, Date) > intTTL Then 
112.
		strRelPath = Right(objFSO.GetAbsolutePathName(f1), _ 
113.
		Len(objFSO.GetAbsolutePathName(f1)) - Len(strStart)) 
114.
		strMSG = strMSG & vbCrLf & j + 1 & vbTab & strRelPath & vbTab & "//" & vbTab & f1.DateCreated & _ 
115.
		vbTab & "//" & vbTab &  f1.DateLastModified  & vbTab & "//" & vbTab & _ 
116.
		f1.DateLastAccessed & vbTab & "//" & vbTab & "deleted" 
117.
		objFSO.DeleteFile(f1) 
118.
		j = j + 1 
119.
	End If  
120.
Next 
121.
End Sub  
122.
 
123.
Private Sub WriteLog(strLog, Report) 
124.
Set objLog = objFSO.CreateTextFile(GenerateFileName, blnNoOverWrite)  
125.
objLog.Write Report 
126.
objLog.Close 
127.
End Sub 
128.
 
129.
Function GenerateFileName() 
130.
arrDate = Split(FormatDateTime(Date, 2),".") 
131.
strLogFile = strCompName & "_" & strScriptName & "_" & arrDate(2) & "." & arrDate(1) & "." & arrDate(0) 
132.
strTemp = strLogFile 
133.
For i = 1 To 999 
134.
	If objFSO.FileExists(strLog & strLogFile & strExt) Then 
135.
		strLogFile = strTemp & "_" & String(3 - Len(i), "0") & i 
136.
	Else 
137.
		GenerateFileName = strLog & strLogFile & strExt 
138.
  	Exit Function 
139.
	End If 
140.
Next 
141.
End Function 
142.
 
143.
Set WshNetwork = Nothing 
144.
Set WshShell = Nothing 
145.
Set objFSO = Nothing 
146.
Set objFolder = Nothing 
147.
Set objSubFld = Nothing 
148.
Set objLog = Nothing 
149.
Set objArgs = Nothing 
150.
f1 = "" 
151.
f2 = "" 
152.
colFiles = "" 
153.
arrDate = "" 
154.
strScriptName = "" 
155.
strCompName = "" 
156.
strExt = "" 
157.
strStart = "" 
158.
strMSG = "" 
159.
strRelPath = "" 
160.
strLog = "" 
161.
strLogFile = "" 
162.
strTemp = "" 
163.
intTTL = "" 
164.
i  = "" 
165.
j = "" 
166.
Wscript.Quit
HTH,
gemini
Bitte warten ..
Mitglied: aschinnerl
26.04.2007 um 22:18 Uhr
Leider kenne ich mich mit VBS nicht aus.

Geht das nicht einfacher mit einer Batchdatei?
Bitte warten ..
Mitglied: Biber
26.04.2007 um 22:50 Uhr
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.
Bitte warten ..
Mitglied: gemini
27.04.2007 um 05:13 Uhr
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.
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...