Jump to content

Win XP Prof - VB Script zum Leeren des Temp Ordners alle drei Tage


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

ich bin auf der Suche nach einem Script, welches ich beim Herunterfahren von Windows laufen lassen möchte. Dieses Script soll alle drei Tage den Ordner

 

C:\Temp

 

leeren. Leider fehlen mir die nötigen VB Script-Kenntnisse und daher wollte ich mal ganz freundlich anfragen, ob jemand bereits solch ein Script geschrieben hat und mir evtl. erklären könnte wie so etwas funktioniert. Bzw. ob so etwas überhaupt relativ simpel per VB Script zu bewerkstelligen ist.

 

LG

Link zu diesem Kommentar

Hallo *MIK*,

 

Vielleicht hilft Dir das folgende Script aus dem Buch Scripting für Administratoren, MSPress 633, weiter.

 

Ich habe es etwas modifiziert.

Es löscht alle Dateien im Temp-Ordner, die älter als 2 Tage sind.

Zur Sicherheit ist eine vorherige Abfrage eingebaut und es wird standardmäßig ein Testlauf gemacht. Erst das Setzen der Variable testlauf auf false bewirkt den "scharfen" Lauf des Scripts.

Erstmal würde ich den Testlauf bevorzugen, das bulklöschaktionen selten gut sind...

 

' URSPRUNG:
' (C) 2000 by Dr. Tobias Weltner
' MSPress: "Scripting für Administratoren"
' Anpassung 2006 durch Markus Kafurke, www.marka-it.net

msg = "Dieses Skript entfernt alle Dateien aus dem TEMP-Ordner, die älter als 2 Tage sind." & vbCr & "Das Script startet zunächst im Testmodus und löscht nicht wirklich." & vbCr & "Setzen Sie in Zeile 20 die Variable 'testlauf' auf 'false', um tatsächlich zu löschen." & vbCr & vbCr & "Script nun starten?"
antwort = MsgBox(msg, vbYesNo + vbQuestion,"Sicherheitshinweis:")
if antwort = vbNo then
 abbruchtext ="Script wurde nicht gestartet." & vbCr & "Es wurde nichts gelöscht!"
cancelmsg = MsgBox (abbruchtext, vbExclamation, "Abbruch durch Benutzer:")
 WScript.Quit
end if
rep_delete = 0
rep_notdelete = 0
rep_error = 0
rep_clean = 0
rep_folder = 0
rep_debug = ""

' dies auf false setzen, wenn wirklich gelöscht werden soll!
testlauf = True

' alle TEMP-Dateien löschen, die älter sind als 2 Tage
CleanTemp 2
list = "Aufräumaktion TEMP-Ordner:" & vbCr & vbCr
list = list & rep_delete & " Dateien gelöscht." & vbCr
list = list & rep_notdelete & " Dateien nicht gelöscht, weil sie jünger als das Limit waren." _
  & vbCr
list = list & rep_error & " Dateien nicht gelöscht, weil Datum nicht ermittelbar." & vbCr
list = list & rep_folder & " Ordner gelöscht." & vbCr
If rep_clean>0 Then rep_clean = rep_clean / 1024^2
list = list & FormatNumber(rep_clean,1) & " MB Speicherplatz freigegeben."



MsgBox list, vbInformation
if testlauf=true then WScript.Echo rep_debug

Sub CleanTemp(alter)
  'SYS: Microsoft (r) Script Runtime
Set fs = CreateObject("Scripting.FileSystemObject")

  ' extrem wichtig: hier wird TEMP-Ordner geöffnet
  ' und gesamter Inhalt gelöscht. Geben Sie hier den falschen
  ' Ordner an, dann Katastrophe perfekt!
  Set temp = fs.GetSpecialFolder(2)


  ' deshalb zusätzlicher Test:
  temppath = LCase(temp.Name)
  If Not (InStr(temppath, "temp")>0 Or InStr(temppath, "tmp")>0) Then
     MsgBox "ACHTUNG! PRÜFEN SIE, OB DER TEMP-ORDNER ANGEGEBEN WURDE!"
     WScript.Quit
  End If


  DeleteAll temp, alter
End Sub

Sub DeleteAll(folderobj, alter)
  For each subfolder in folderobj.SubFolders
     DeleteAll subfolder, alter
  Next

  For each file in folderobj.Files
     On Error Resume Next
     datum = file.DateLastModified
     ok = (Err.number = 0)
     On Error Goto 0

     If ok Then
        filealter = DateDiff("d", datum, Date)
        If filealter>alter Then
           rep_delete = rep_delete + 1
           rep_clean = rep_clean + file.Size
           If testlauf = False Then
              file.Delete True
           Else
              rep_debug = rep_debug & file.Path & vbCr
           End If

        Else
           rep_notdelete = rep_notdelete + 1
        End If
     Else
        rep_error = rep_error + 1
     End If
  Next
  If folderobj.Files.Count = 0 And folderobj.SubFolders.Count = 0 Then
     If testlauf = False Then
        folderobj.Delete True
     Else
        rep_debug = rep_debug & folderobj.Path & vbCr
     End If
     rep_folder = rep_folder + 1
  End If
End Sub

Link zu diesem Kommentar

Wuah, @Marka: Vielen Dank für Deine Bemühung. Das Script werde ich mir auf jeden Fall detailliert angucken und würde gerne noch ein paar Fragen dazu posten, da ich verstehen möchte was da vor sich geht. Wollte mich hier nicht ins gemachte Nest setzen. :D

 

@OLC: Die Powershell hab ich bereits am laufen, welchen Syntax müsste man denn nutzen um dort solch eine Abfrage zu programmieren? Will jetzt nicht das gesamte Script nur nen Denkanstoß da ich wie gesagt verstehen will was da vor sich geht.

 

Danke im Voraus.

Link zu diesem Kommentar

Hey, das stammt auch nicht von mir!

Ich habe mir das oben schon erwähnte Buch gekauft, in der Hoffnung, mir den Admin-Alltag etwas vereinfachen zu können.

Das Buch ist toll, aber: ohne Scripting-Vorkenntnisse geht es nicht. Die Scripte müssen teilweise noch an die eigenen Umgebungen angepasst werden.

Auch ich habe mich, als Scripting-Neuling und Nicht-Scripting-Spezi ehrlich gesagt etwas schwer getan, da die Scripte teilweise recht mager kommentiert und beschrieben sind.

 

Das Buch soll auch kein komplettes VBS-Tutorial sein, sondern nur eine Erweiterung vorhandener Grundkenntnisse darstellen...

 

Aber was ich beantworten kann, beantworte ich gerne.

Link zu diesem Kommentar
@OLC: Die Powershell hab ich bereits am laufen, welchen Syntax müsste man denn nutzen um dort solch eine Abfrage zu programmieren? Will jetzt nicht das gesamte Script nur nen Denkanstoß da ich wie gesagt verstehen will was da vor sich geht.

 

Kein Thema, "das gesamte Script" ist kein Aufwand - da liegt der Vorteil zum VBScript. ;)

 

Get-ChildItem -Path C:\TEMP | Where-Object -FilterScript {($_.LastWriteTime -lt [[DateTime]]::Now - "3")} | Remove-Item -force

 

Gruß olc

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...