Ordner, Unterordner und Dateien löschen per VBS

Supe

Erfahrenes Mitglied
Hallo Leute!

Meine Stärken liegen im Bereich Grafikbearbeitung und 3D, sicherlich nicht bei VBS und Scripting.
Als "spezielle Sonderaufgabe" meines Chefs für unseren Dateiserver (Win2K3 R2, als Admin) habe ich nun die Löschung eines Verzeichnisses, egal welchen Inhalts (Unterordner, Dtaeien, schreibgeschützte Dateien) auf's Auge gedrückt bekommen.

Ich habe nicht soviel Zeit für die Extrawürste meines Chefs neben meiner normalen Arbeit, deshalb hier meine Frage, wer mir schnell und kompetent ("Mach es so!") helfen kann. Ich kann jetzt nicht einen VBS-Kurs machen, weshalb mir RTFM-Antworten wenig weiter helfen.

Augabenstellung: Jeden Nacht (Task-Planer) um 0.00 Uhr sollen alle Dateien und Ordner, Unterordner und Dateien darin im Stamm-Ordner D:\Allgemeine Ablage\Datentausch und D:\Allgemeine Ablage\Scandokumente ungefragt gelöscht werden. Egal ob mit Schreibschutz oder nicht.

Nachdem ich mit DOS rumgefuhrwerkt habe, bin ich über Google auf ein VBS-Script gestoßen:

Code:
Option Explicit
dim fso, strPfad

strPfad = "D:\Allgemeine Ablage\Datentausch"

Set fso = CreateObject("Scripting.FileSystemObject")

DeleteFiles strPfad

fso.DeleteFolder ("D:\Allgemeine Ablage\Datentausch\*")

Sub DeleteFiles(strFolder)
 dim oFolder, oFolders, oFiles, item

 On Error Resume Next

 Set oFolder = fso.GetFolder(strFolder)
 Set oFolders = oFolder.SubFolders
 Set oFiles = oFolder.Files

 For each item in oFolders
  DeleteFiles(item)
 Next

 For each item in oFiles
  ' um Schreibgeschützte Dateien zu löschen, True übergeben
  fso.DeleteFile item, True
 Next
End Sub

Das klappt soweit, aber sobald ich den zweiten Ordner hinzufüge ...

Code:
Option Explicit
dim fso, strPfad

strPfad = "D:\Allgemeine Ablage\Datentausch"
strPfad = "D:\Allgemeine Ablage\Scandokumente"

Set fso = CreateObject("Scripting.FileSystemObject")

DeleteFiles strPfad

fso.DeleteFolder ("D:\Allgemeine Ablage\Datentausch\*")
fso.DeleteFolder ("D:\Allgemeine Ablage\Scandokumente\*")

Sub DeleteFiles(strFolder)
 dim oFolder, oFolders, oFiles, item

 On Error Resume Next

 Set oFolder = fso.GetFolder(strFolder)
 Set oFolders = oFolder.SubFolders
 Set oFiles = oFolder.Files

 For each item in oFolders
  DeleteFiles(item)
 Next

 For each item in oFiles
  ' um Schreibgeschützte Dateien zu löschen, True übergeben
  fso.DeleteFile item, True
 Next
End Sub


... werden unter Datentausch keinerlei Datein oder Ordner mehr gelöscht. Sicherlich mache ich da etwas falsch, aber so sehr ich mich diletanisch auch versuche, ich kriege das nicht hin. Für Euch VBS-Experten sicherlich Kleinkram.

Wer kann mir hier weiterhelfen?
Danke vorab für Eure Unterstützung!
Supe
 
Zuletzt bearbeitet:

Yaslaw

alter Rempler
Moderator
Visual Basic:
strPfad = "D:\Allgemeine Ablage\Datentausch"
strPfad = "D:\Allgemeine Ablage\Scandokumente"
Du überscrheibst da den Pfad. Es wird nur der 2te genommen.
 

Supe

Erfahrenes Mitglied
Okay, danke für den Hinweis. Da ich nicht sehr bewandert bin: Wie erreiche ich eine serielle Abarbeitung der Verzeichnisse; der Dateien darin?

Danke für eine Antwort!
Supe
 

Yaslaw

alter Rempler
Moderator
Schreib deine Lösung in eine Funktion und rufe sie 2 mal auf....

Visual Basic:
Option Explicit
dim fso, strPfad

Set fso = CreateObject("Scripting.FileSystemObject")

Call deleteFolder("D:\Allgemeine Ablage\Datentausch")
Call deleteFolder("D:\Allgemeine Ablage\Scandokumente")

Sub deleteFolder(strFolder)
  Call DeleteFiles(strFolder)
  Call fso.DeleteFolder(strFolder & "\*")
End Sub

Sub DeleteFiles(strFolder)
 dim oFolder, oFolders, oFiles, item

 On Error Resume Next

 Set oFolder = fso.GetFolder(strFolder)
 Set oFolders = oFolder.SubFolders
 Set oFiles = oFolder.Files

 For each item in oFolders
  DeleteFiles(item)
 Next

 For each item in oFiles
  ' um Schreibgeschützte Dateien zu löschen, True übergeben
  fso.DeleteFile item, True
 Next
End Sub
 

Supe

Erfahrenes Mitglied
Hallo!

Heute möchte ich diese Funktion um das Löschen von bestimmt benannten Dateien (bas*) in einem bestimmten Ordner (C:\Java\tomcat7a\conf) erweitern.
Wie baue ich das in das unten stehende Script ein?


C#:
Option Explicit

dim fso, strPfad

Set fso = CreateObject("Scripting.FileSystemObject")

Call deleteFolder("C:\Java\tomcat7a\temp")

Call deleteFolder("C:\Java\tomcat7a\work")

Call deleteFolder("C:\Java\tomcat7a\logs")

Sub deleteFolder(strFolder)

    Call DeleteFiles(strFolder)

    Call fso.DeleteFolder(strFolder & "\*")

End Sub

Sub DeleteFiles(strFolder)

dim oFolder, oFolders, oFiles, item

On Error Resume Next

Set oFolder = fso.GetFolder(strFolder)

Set oFolders = oFolder.SubFolders

Set oFiles = oFolder.Files

For each item in oFolders

  DeleteFiles(item)

Next

For each item in oFiles

  ' um Schreibgeschützte Dateien zu löschen, True übergeben

fso.DeleteFile item, True

Next

End Sub


Wscript.Echo "*** Daten gelöscht ***"[

Ich möchte also die Arbeitsverzeichnisse eines Tomcats leeren und aus dem Conf-Verzeichnis alle Dateien rauslöschen die mit "bas" anfangen.
Wie erweitere ich mein Skript geschickt an welcher Stelle?

Danke vorab für Eure Hilfestellung!
Supe
 
Zuletzt bearbeitet:

Yaslaw

alter Rempler
Moderator
Visual Basic:
deleteFilesWithFilter("C:\Java\tomcat7a\conf", "bas*")

Sub deleteFilesWithFilter(strFolder, strFilter)
 dim oFolder, oFiles, item
 Set oFolder = fso.GetFolder(strFolder)
 Set oFiles = oFolder.Files
 For each item in oFiles
  If item.Name like strFilter Then
   ' um Schreibgeschützte Dateien zu löschen, True übergeben
   fso.DeleteFile item, True
  End If
 Next
End Sub
 

Supe

Erfahrenes Mitglied
Hallo Yaslaw,

danke für's Ergänzen!

Ich habe es nun so eingefügt:


Visual Basic:
Option Explicit
dim fso, strPfad
Set fso = CreateObject("Scripting.FileSystemObject")
Call deleteFolder("C:\Java\tomcat7a\temp")
Call deleteFolder("C:\Java\tomcat7a\work")
Call deleteFolder("C:\Java\tomcat7a\logs")
Sub deleteFolder(strFolder)
    Call DeleteFiles(strFolder)
    Call fso.DeleteFolder(strFolder & "\*")
End Sub
Sub DeleteFiles(strFolder)
dim oFolder, oFolders, oFiles, item
On Error Resume Next
Set oFolder = fso.GetFolder(strFolder)
Set oFolders = oFolder.SubFolders
Set oFiles = oFolder.Files
For each item in oFolders
  DeleteFiles(item)
Next
For each item in oFiles
  ' um Schreibgeschützte Dateien zu löschen, True übergeben
fso.DeleteFile item, True
Next
End Sub

deleteFilesWithFilter("C:\Java\tomcat7a\conf", "bas*")

Sub deleteFilesWithFilter(strFolder, strFilter)
dim oFolder, oFiles, item
Set oFolder = fso.GetFolder(strFolder)
Set oFiles = oFolder.Files

For each item in oFiles
If item.Name like strFilter Then
' um Schreibgeschützte Dateien zu löschen, True übergeben
fso.DeleteFile item, True
End If

Next
End Sub

Wscript.Echo "*** Daten gelöscht ***"

Bekomme dann aber die Fehlermeldung, dass in Zeile 33 (deleteFilesWithFilter("C:\Java\tomcat7a\conf", "bas*")) beim Aufrufen der Unterrputine (Sub) keine Klammern verwendet werden dürfen (Fehlercode: 800A0414).
 
Zuletzt bearbeitet:

Yaslaw

alter Rempler
Moderator
Stimmt. Lass die Klammer weg
Visual Basic:
deleteFilesWithFilter "C:\Java\tomcat7a\conf", "bas*"
 

Supe

Erfahrenes Mitglied
Okay, danke, habe ich gemacht.
Skript läuft bis Zeile 44 (If item.Name like strFilter Then) mit der Meldung Sub oder Function-Prozedur nicht definiert (800A0023).

Fehlt noch was?