Löschen von Dateien - VBS ???

  • #1
E

Enrico

Bekanntes Mitglied
Themenersteller
Dabei seit
06.07.2001
Beiträge
156
Reaktionspunkte
0
Ort
Dresden
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
 
  • #3
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
 
  • #4
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.
 
  • #5
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
 
  • #6
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
 
  • #7
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
 
Thema:

Löschen von Dateien - VBS ???

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.839
Beiträge
707.962
Mitglieder
51.492
Neuestes Mitglied
Janus36
Oben