Post by Timo MichelsPost by PegasusNa ja, dann wäre es wohl am besten, wenn wir uns Hammer und Nagel
besorgen und dieses Projekt mal richtig festnageln. Dein neustes
1. Das Verzeichnis "G:\Betrieb" soll durchsucht werden.
werden, also
aber nicht
G:\Betrieb\Feb2008
und auch nicht
3. In jedem der behandelten Unterverzeichnisse sollen alle Dateien, die
älter als x Tage sind, gelöscht werden, also z.B.
Der Vorgang soll rekursiv ablaufen.
4. Wenn ein behandeltes Unterverzeichnis keine Dateien mehr enthält, dann
soll es gelöscht werden, auch wenn es noch weitere leere
Unterverzeichnisse enthält. Wenn tief im Unterverzeichnis noch mindestens
eine Datei vorhanden ist, dann darf das Unterverzeichnis nicht gelöscht
werden.
Zu deiner Erlaubnisfrage auf höheren Laufwerken als C: - Dies ist nicht
ein Script-Problem, sondern ein Erlaubnisproblem. Du musst die
Bewilligungen eben so einstellen, dass du Dateien und Verzeichnisse von
Explorer aus manipulieren kannst. Wenn's dort geht, dann funktioniert's
mit dem Script auch!
besser hätte ich es nicht ausdrücken können, das pflichtenheft stimmt
genau :)
Eigentlich hätte das Pflichtenheft von dir kommen sollen, dann hätte ich die
Sache nicht zwei Mal schreiben müssen. Versuch's Mal mit diesem Script, und
zwar von der Befehlseingabe aus, damit du die Fehlermeldungen sehen kannst.
01. Const Active = False
02. Const MaxAge = 10 'Tage
03. Const Recursive = True
04. Const sOrdner = "D:\Betrieb"
05. Const Name = "@Datensicherung"
06.
07. checked = 0
08. FDeleted = 0
09. ODeleted = 0
10. sName = LCase(Name)
11. Dim sOrdnerListe, iFileCount
12. if active then verb = "Datei löschen: """ Else verb = "Alte Datei: """
13.
14. Set oFSO = CreateObject("Scripting.FileSystemObject")
15. Set oOrdner = oFSO.GetFolder(sOrdner)
16.
17. CompileFolderList oOrdner
18. aOrdnerListe = Split(sOrdnerliste, "|")
19. For i = 0 To UBound(aOrdnerListe) - 1
20. ProcessFolder aOrdnerListe(i)
21. iFileCount = 0
22. CountFiles aOrdnerListe(i)
23. On Error Resume Next
24. If Active And (iFileCount = 0) Then
25. WScript.Echo "Der Ordner """ & aOrdnerListe(i) & """ wird gelöscht"
26. oFSO.DeleteFolder(aOrdnerListe(i))
27. If Err.number = 0 Then
28. ODeleted = ODeleted + 1
29. Else
30. WScript.Echo "Fehler beim Löschen von """ & aOrdnerListe(i) & """"
31. WScript.Echo Err.Description
32. End If
33. End If
34. On Error Goto 0
35. Next
36.
37. If Active Then
38. WScript.Echo checked & " Datei(en) geprüft, " _
39. & FDeleted & " Datei(en) gelöscht"
40. WScript.Echo ODeleted & " Ordner gelöscht"
41. Else
42. WScript.Echo checked & " Datei(en) geprüft, " _
43. & FDeleted & " Datei(en) würden gelöscht"
44. End If
45.
46. '-----------------------------------------------------------------
47. 'Compile a list of all foldes that match the specified folder name
48. '-----------------------------------------------------------------
49. Sub CompileFolderList (oOrdner1)
50. For Each oOrdner2 In oOrdner1.subfolders
51. If LCase(oOrdner2.name) = sName _
52. Then sOrdnerListe = sOrdnerListe & oOrdner2.path & "|"
53. CompileFolderList oOrdner2
54. Next
55. End Sub
56. '--------------------------------------------
57. 'Delete all old files in the specified folder
58. '--------------------------------------------
59. Sub ProcessFolder (sOrdner)
60. For Each oFile In oFSO.GetFolder(sOrdner).Files
61. checked = checked + 1
62. If DateDiff("D", oFile.DateLastModified, Now()) > MaxAge Then
63. WScript.Echo verb & oFile.Path & """"
64. On Error Resume Next
65. If Active Then oFile.Delete
66. If Err.number = 0 Then
67. FDeleted = FDeleted + 1
68. Else
69. WScript.Echo "Fehler beim Löschen von """ & oFile.Path & """"
70. WScript.Echo Err.Description
71. End If
72. On Error Goto 0
73. End If
74. Next
75.
76. if not Recursive then Exit Sub
77. For Each oSubfolder In oFSO.GetFolder(sOrdner).Subfolders
78. ProcessFolder oSubfolder.Path
79. Next
80. End Sub
81. '---------------------------------------------------
82. 'Recursively count the files in the specified folder
83. '---------------------------------------------------
84. Sub CountFiles (sOrdner)
85. iFileCount = iFileCount + oFSO.GetFolder(sOrdner).Files.Count
86. For Each oOrdner1 In oFSO.GetFolder(sOrdner).SubFolders
87. CountFiles oOrdner1.Path
88. Next
89. End Sub