Löschen von Dateien - VBS ???

Dieses Thema Löschen von Dateien - VBS ??? im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von Enrico, 19. Nov. 2005.

Thema: Löschen von Dateien - VBS ??? Hallo, ich habe ein Problem mit dem folgenden Skript: Wenn ich die Variable %userprofile% durch einen richtigen...

  1. Hallo,

    ich habe ein Problem mit dem folgenden Skript:
    Wenn ich die Variable %userprofile% durch einen richtigen Pfad ersetze, dann funktionier das Script, aber mit der Variable nicht. Wie kann ich das ändern?


    '************************************************************
    '
    ' Löscht alle Dateien, die seit einem bestimmten Datum
    ' nicht mehr geändert wurden
    '
    '************************************************************

    '******* hier eigenen Bedürfnissen anpassen *****************

    Verzeichnis1 = %userprofile%\Lokale Einstellungen\Temporary Internet Files
    Aufheben    = 60->Anzahl der Tage

    '********Ende der Anpassungen********************************

    'On Error Resume Next

    Set fso = CreateObject(Scripting.FileSystemObject)

    Set ordner = fso.GetFolder(Verzeichnis1)
    heute = Date()
    DeleteInFolder(ordner)

    Sub DeleteInFolder(ordner)
    Set dateien = ordner.Files
    ' Alle Dateien in diesem Ordner abklappern
    For Each datei In dateien
      If datei.DateLastModified < (heute - Aufheben) Then
        datei.Delete
      End If
    Next
    Set untere = ordner.SubFolders
    'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
    For Each unter In untere
      DeleteInFolder(unter)
    Next
    End Sub




    Vielen Dank.

    Enrico
     
  2. Hallo,

    danke für die Antwort. Jetzt funktioniert es :D

    Allerdings habe ich jetzt ein weiteres Problem. Wenn ich z.B. den TEMP-Ordner leeren möchte, bekomme ich die Meldung Erlaubnis verweigert von Skript ausgegeben.
    Das wird wohl daran liegen, dass man manche Dateien in diesem Ordner nicht löschen kann. Wie kann ich das jetzt so umgehen, dass das Skript dann nicht einfach abstürtzt, sondern mit der nächsten Datei weiter macht?

    Danke

    Enrico
     
  3. Hi!

    Ersetzte die Zeile datei.delete durch diese Zeilen:
    Code:
    on error resume next
    datei.delete
    if err and err<>70 then msgbox Unerwarteter Fehler (Code=&err&),16 : wscript.quit
    on error goto 0
    
    Mit on error resume next wird der WSH angewiesen bei einem Fehler nicht zu stoppen, sondern mit der nächsten Zeile fortzufahren. In der Zeile nach datei.delete wird abgefragt ob ein Fehler aufgetreten ist.
    Wenn der Fehler Erlaubnis verweigert (das ist der Fehlercode 70) ist, wird er ignoriert, ansonsten wird der Fehlercode angezeigt und das Skript beendet.
    on error goto 0 hebt die Fehlerbehandlung wieder auf. Das heisst beim nächsten auftretenden Fehler bricht der WSH wieder automatisch das Skript ab.
     
  4. Danke, auch das funktioniert :)

    Jetzt habe ich mir noch überlegt mehrere Ordner zu leeren.
    Könnte ich das jetzt mit einer Schleife erledigen?

    Meinentwegen:

    Verzeichnis1 = WSHShell.ExpandEnvironmentStrings(%userprofile%)&\Lokale Einstellungen\Temporary Internet Files
    Verzeichnis2 = WSHShell.ExpandEnvironmentStrings(%userprofile%)&\Lokale Einstellungen\Temp
    Verzeichnis3 = WSHShell.ExpandEnvironmentStrings(%userprofile%)&\Cookies


    Und die Schleife dann bei jedem Duchlauf das letzte Zeichen von Verzeichnis? um eins hochzählen lassen? Oder wäre das mit dem hochzählen zu kompliziert. Ganz einfach könnte ich sicher auch die Zeile Set ordner = fso.GetFolder(Verzeichnis1) dreimal hintereinander schreiben und jedesmal die Variable ordner und Verzeichnis entsprechend anpassen. Aber vielleicht geht das ja auch besser?

    Grüße und danke
    Enrico
     
  5. Du meinst wohl so:
    Code:
    dim Verzeichnis(2)
    Verzeichnis(0) = WSHShell.ExpandEnvironmentStrings(%userprofile%)&\Lokale Einstellungen\Temporary Internet Files
    Verzeichnis(1) = WSHShell.ExpandEnvironmentStrings(%userprofile%)&\Lokale Einstellungen\Temp
    Verzeichnis(2) = WSHShell.ExpandEnvironmentStrings(%userprofile%)&\Cookies
    for n=0 to 2
    	Set ordner = fso.GetFolder(Verzeichnis(n))
    	...
    	...
    next
    
    Ne andre Möglichkeit:
    Code:
    o=array(\Lokale Einstellungen\Temporary Internet Files,\Lokale Einstellungen\Temp,\Cookies)
    for each oo in o
    	Set ordner = fso.GetFolder(WSHShell.ExpandEnvironmentStrings(%userprofile%)&oo)
    	...
    	...
    next
    
     
  6. Danke, du bist ja spitze  :D

    Funktioniert alles.
    Hier noch mal das komplette Skript für alle, die es interessiert:

    Code:
    
    '************************************************************
    ' 
    ' Löscht alle Dateien, die seit einem bestimmten Datum
    ' nicht mehr geändert wurden
    '
    '************************************************************
    
    Set fso = CreateObject(Scripting.FileSystemObject)
    Set WSHShell = WScript.CreateObject(WScript.Shell)
    On Error Resume Next
    
    
    '******* hier eigenen Bedürfnissen anpassen *****************
    
    dim Verzeichnis(2)
    Verzeichnis(0) = WSHShell.ExpandEnvironmentStrings(%userprofile%)&\Lokale Einstellungen\Temporary Internet Files
    Verzeichnis(1) = WSHShell.ExpandEnvironmentStrings(%userprofile%)&\Lokale Einstellungen\Temp
    Verzeichnis(2) = WSHShell.ExpandEnvironmentStrings(%userprofile%)&\Cookies
    
    Aufheben    = 14->Anzahl der Tage
    
    '********Ende der Anpassungen********************************
    
    
    for n=0 to 2
    	Set ordner = fso.GetFolder(Verzeichnis(n))
    	heute = Date()
    	DeleteInFolder(ordner)
    next
    
    Sub DeleteInFolder(ordner)
    	Set dateien = ordner.Files
    	' Alle Dateien in diesem Ordner abklappern
    	For Each datei In dateien
    	  If datei.DateLastModified < (heute - Aufheben) Then
    	    on error resume next
    	     datei.delete
                 if err and err<>70 then msgbox Unerwarteter Fehler (Code=&err&),16 : wscript.quit
                 on error goto 0
    	  End If
    	Next
    	Set untere = ordner.SubFolders
    	'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
    	For Each unter In untere
    	  DeleteInFolder(unter)
    	Next
    End Sub
    
    
    Liegt bei mir im Autostart-Ordner...


    Grüße
    Enrico
     
Die Seite wird geladen...

Löschen von Dateien - VBS ??? - Ähnliche Themen

Forum Datum
SSD - Einzelne Dateien sicher löschen Windows 10 Forum 1. Apr. 2016
Entfernt das Löschen eines Ordners auch alle darin enthaltenen Dateien? Windows 7 Forum 26. Mai 2015
Kann zugemailte jpg-Dateien weder löschen noch öffnen Sonstiges rund um den PC & Kaufberatung 26. Sep. 2014
dateien löschen Windows XP Forum 25. Nov. 2011
Dateien unwiderruflich Löschen Windows 7 Forum 12. Juni 2011