Mit VBS ~~Dateien in Ordnerstruktur löschen

RMU

Grünschnabel
Hallo Zusammen

Ich bräuchte ein VBS Script was mir in sämtlichen Benutzerordnern auf dem Server immer mal wieder die temporären Dateien löscht, welche dadurch entstehen wenn mein Officedokumente nicht sauber bendet. Die diese fangen dann ja mit mindestens einer Tilde an.

Dim FSO
On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.DeleteFile("C:\Test\~*.*"), True

Ich kann mit diesem Vierzeiler nur auf erster Ebene löschen. Das das Script auch sämtliche Unterordner durchforstet und diese Dateien löscht bekomme ich auch nach zig Google-Versuchen mit Codeschnipseln nicht hin :\

Meine Spezialität ist Citrix und Virtualisierungen - Mit VBS habe ich nicht viel am Hut. Es wäre Super wenn mir hier jemand Helfen kann.

Grüsse
Ralph
 

Yaslaw

n/a
Moderator
Ungetestet. Eine Funktion die sich selber für jeden Unterordner ausführt. Also eine Rekursive Sub
Visual Basic:
deleteFilesInFolderRekursiv "C:\Test", "~*.*"

'/**
' * Rekurisves Löschen von Dateien
' * @param    String     Pfad des Ordners
' */
Sub deleteFilesInFolderRekursiv(iFldPath, iFileNamePattern)
    Static fso
    Dim deletePath
    Dim subFld

    'fso initialisieren, falls es nicht schon ist. Sollte dank Static nur beim Ersten AUfruf der Fall sein.
    If fso Is Nothing Then Set fso = CreateObject("Scripting.FileSystemObject")

    'Die Funktion für jeden Unterordner ausführen
    For Each subFld In fso.GetFolder(iFldPath).SubFolders
        deleteFilesInFolderRekursiv subFld.Path, iFileNamePattern
    Next subFld

    'Löschpfad zusammensetzen und ausführen
    deletePath = fso.BuildPath(iFldPath, iFileNamePattern)
    fso.DeleteFile deletePath, True
End Sub
 

RMU

Grünschnabel
Hi Yaslaw

Danke für das schnelle Feedback. Hier bekomme ich die Fehlermeldung:

Zeile: 8
Zeichen: 5
Fehler: Anweisung erwartet
Code: 800A0400
Quelle: Kompilierungsfehler in Microsoft VBScript

:\

Grüsse
Ralph
 

Yaslaw

n/a
Moderator
Hab mal nachgeschaut. VBS kennt Static nicht. Man kann das aber über eine globale Variable (public) lösen
Static-Zeile aus dem Scrip löschen und dafür am ANfang des Script die Publiczeile hinzufügen
Visual Basic:
Public fso
deleteFilesInFolderRekursiv "C:\Test", "~*.*"

'/**
' * Rekurisves Löschen von Dateien
' * @param    String     Pfad des Ordners
' */
Sub deleteFilesInFolderRekursiv(iFldPath, iFileNamePattern)
    Dim deletePath
    Dim subFld

    'fso initialisieren, falls es nicht schon ist. Sollte dank Static nur beim Ersten AUfruf der Fall sein.
    If fso Is Nothing Then Set fso = CreateObject("Scripting.FileSystemObject")
....
 

RMU

Grünschnabel
Jetzt kommt die nächste Meldung:

Zeile: 18 (Next subFld)
Zeichen: 10
Fehler: Anweisungsende erwartet
Code: 800A0401
QQUell: Kompilierungsfehler in Microsoft VBScript
 

Yaslaw

n/a
Moderator
Mach mal bei Next subFld das subFld weg.

Ist halt try and Error. Ich programiere VBA und ganz selten VBS (etwa alle 5 Jahre mal).
 

RMU

Grünschnabel
Jetzt kommt Fehlermeldung früher:

Zeile: 13 (If fso Is Nothing Then Set fso = CreateObject("Scripting.FileSystemObject"))
Zeichen: 5
Fehler: Objekt erforderlich
 

Yaslaw

n/a
Moderator
Dann vereinfachen wir und lassen das Selbstinitialiserende.

Visual Basic:
Public fso
Set fso = CreateObject("Scripting.FileSystemObject")

deleteFilesInFolderRekursiv "C:\Test", "~*.*"

'/**
' * Rekurisves Löschen von Dateien
' * @param    String     Pfad des Ordners
' */
Sub deleteFilesInFolderRekursiv(iFldPath, iFileNamePattern)
    Dim deletePath
    Dim subFld

    'Die Funktion für jeden Unterordner ausführen
    For Each subFld In fso.GetFilder(iFldPath).SubFolders
        deleteFilesInFolderRekursiv subFld.Path, iFileNamePattern
    Next subFld

    'Löschpfad zusammensetzen und ausführen
    deletePath = fso.BuildPath(iFldPath, iFileNamePattern)
    fso.DeleteFile deletePath, True
End Sub
 

RMU

Grünschnabel
Jetzt Nörgelt er wieder die Zeile von vorhin an: Next subFld

Wenn ich "subFLD" lösche kommt anhängender Fehler: fehler.jpg
 

Neue Beiträge