Jump to content

Ordner mit Batch nach xx Tagen löschen.


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

Empfohlene Beiträge

Morgen Braintee,

 

vielleicht hilft es, wenn du beim delete einen force mitgibst...

 

also in der Art

 

fso.DeleteFile(file.Path) True

 

 

Ich denke die beiden Links sollten dir weiterhelfen....

 

In speziellen Ordnern Dateien löschen - microsoft.public.de.german.scripting.wsh | Google Groups

 

Dateien löschen, Exception - microsoft.public.de.german.scripting.wsh | Google Groups

 

Gruß

 

Dirk

Link zu diesem Kommentar

Hier mit Log und dem von Dirk erwähnten "force":

 

Const ForReading = 1, ForWriting = 2, ForAppending = 8

strRootFolder = "D:\Test"
strLogFile = "C:\Killfolderlog.txt"
lngDays = 14

Set fso = CreateObject("Scripting.FileSystemObject")
Set ofolder = fso.GetFolder(strRootFolder)
Set flog = fso.OpenTextFile(strLogFile, ForAppending, True)

flog.writeline "---- Alte Ordner in " & strRootFolder & " werden gelöscht! - " & Now()

'Durchlaufe alle Unterverzeichnisse
for each folder in ofolder.subfolders
 KillFolderSub folder
next

flog.writeline "---- Script beendet - " & Now()


Sub KillfolderSub(objFolder)
on error resume next

 'Durchlaufe alle Unterverzeichnisse
 for each subfolder in objfolder.subfolders
   KillFolderSub subfolder
 next

 'Wenn Ordner vor mehr als x Tagen erstellt wurde...
 if objFolder.datecreated < (Date - lngDays) then

   'Alle Dateien im Ordner löschen
   for each file in objfolder.Files
     Err.Clear
     strFile = file.Path
     fso.DeleteFile strFile, true
     if Err = 0 then
       flog.writeline "Datei " & strFile & " gelöscht"
     else
       flog.writeline "Datei " & strFile & " konnte nicht gelöscht werden! - Fehler " & Err & " (" & Err.Description & ")"
     end if
   next

   'Ordner löschen
   Err.Clear
   strFolder = objFolder.Path
   fso.DeleteFolder(strFolder)
   if Err = 0 then
     flog.writeline "Ordner " & strFolder & " gelöscht"
   else
       flog.writeline "Ordner " & strFolder & " konnte nicht gelöscht werden! - Fehler " & Err & " (" & Err.Description & ")"
   end if
 end if

on error goto 0
End Sub

 

...und noch Fehlerroutine mit eingebaut...

Link zu diesem Kommentar
  • 1 Monat später...
  • 2 Wochen später...

@Cyquest

 

Gibt es vielleicht ein Möglichkeit eine Art Vortschrittsanzeige einzubauen? Nicht zwingend zeitlich basierend, sondern dass man in einem Fenster (z.B. in der Kommandozeile) sieht, wo der Löschvorgang gerade ist. So in der Art, einfach den aktuellen Ordnernamen ausgeben und dahinter "wird gelöscht".

Hier könnte auch gleich die Ausgabe erfolgen wenn das Script beandet ist, weil man das nicht direkt sieht....

 

Außerdem habe ich innerhalb des Verzeichnisses, wo ich löschen möchte, einige Ordner, die nicht gelöscht werden dürfen, ich kann sie leider nicht generell an einem anderen Ort spreichern. Also sichere ich diese und kopiere sie nach dem Löschvorgang zurück...

Gibt es eine Möglichkeit Ordner auszuschließen?

 

Das Script trifft sonst genau das was ich brauche. Klein, aber wirkungsvoll ;-)

 

Vielleicht lässt sich da noch was umsetzten, ich würde mich Freuen.

 

Grüße

Link zu diesem Kommentar

Biddeschöööön :)

'---------------------------------------------------------
' KillOldFolders.vbs by FR
'---------------------------------------------------------

'-Konstanten----------------------------------------------

Const ForReading = 1, ForWriting = 2, ForAppending = 8

'-Variablen-----------------------------------------------

strRootFolder = "J:\DIV\VB"
strLogFile = "J:\DIV\KillfolderLog.txt"
strExcludeFile = "J:\DIV\KillfolderExclude.txt"
lngDays = 14

'---------------------------------------------------------

'Wenn Statusmeldungen in DOS-Box gewünscht, Script mittels "cscript.exe KillOldFolders.vbs" starten!
If LCase (Right (WScript.FullName, 11)) <> "cscript.exe" Then boolcsript = false else boolcscript=true

Set fso = CreateObject("Scripting.FileSystemObject")
Set ofolder = fso.GetFolder(strRootFolder)
Set flog = fso.OpenTextFile(strLogFile, ForAppending, True)

writelog "---- Alte Ordner in " & strRootFolder & " werden gelöscht! - " & Now()
writelog "Ausgeschlossene Verzeichnisse:"

Dim arrEx
maxExcludes=0
if fso.FileExists(strExcludeFile) then
 Set fex = fso.OpenTextFile(strExcludeFile, ForReading)
 do while not fex.AtEndOfStream
   MaxExcludes=MaxExcludes+1
   Redim arrEx(maxExcludes)
   arrEx(maxExcludes) = fex.readline()
   writelog arrEx(maxExcludes)
 loop
 fex.close
end if

writelog "----"

'Durchlaufe alle Unterverzeichnisse
for each folder in ofolder.subfolders
 KillFolderSub folder
next

writelog "---- Script beendet - " & Now()
if not boolcscript then MsgBox "Script beendet - " & Now()

'---------------------------------------------------------
'ENDE
'---------------------------------------------------------

Sub KillfolderSub(objFolder)
on error resume next

 'Durchlaufe alle Unterverzeichnisse
 for each subfolder in objfolder.subfolders
   KillFolderSub subfolder
 next

 strFolder = objFolder.Path

 'Wenn Ordner in "Exclude"-Liste steht, nicht löschen!
 boolExclude = false
 For i=1 to maxExcludes
   if strFolder = arrEx(i) then boolExclude = true
 next

 if boolExclude then
   writelog "Ordner " & strFolder & " nicht gelöscht (Exclude-Regel!)"

 else

   'Wenn Ordner vor mehr als x Tagen erstellt wurde...
   if objFolder.datecreated < (Date - lngDays) then

     'Alle Dateien im Ordner löschen
     for each file in objfolder.Files
       Err.Clear
       strFile = file.Path
       fso.DeleteFile strFile, true
       if Err = 0 then
         writelog "Datei " & strFile & " gelöscht"
       else
         writelog "Datei " & strFile & " konnte nicht gelöscht werden! - Fehler " & Err & " (" & Err.Description & ")"
       end if
     next

     'Ordner löschen
     Err.Clear
     fso.DeleteFolder(strFolder)
     if Err = 0 then
       writelog "Ordner " & strFolder & " gelöscht"
     else
       writelog "Ordner " & strFolder & " konnte nicht gelöscht werden! - Fehler " & Err & " (" & Err.Description & ")"
     end if
   else
     writelog "Ordner " & strFolder & " nicht gelöscht (jünger als " & lngDays & " Tage! Datecreated: " & objFolder.datecreated
   end if
 end if

on error goto 0
End Sub

'---------------------------------------------------------

Sub Writelog(strMessage)

 flog.writeline strMessage
 if boolcscript then wscript.echo strMessage

End Sub

Link zu diesem Kommentar

Das ging schnell, Danke.

 

Mache ich einen Fehler beim Handling der Exclude Liste?

Ich gebe die Pfade ganz normal in der Textdatei an, in der Form:

 

c:\del\test

C:\del\test2

 

Diese werden auch sauber in der Ausgabe gelistet als auszuschließende Folder, aber dennoch gelöscht. Mache ich was falsch?

 

Das mit der Anzeige des Vorganges im CMD Fenter ist völlig OK!

 

Grüße

Link zu diesem Kommentar

Hallo Cybquest,

 

super das Du noch etwas weiter entwickelst. Das Problem mit dem Exclude Verzeichniss habe ich auch ich teste mal Deinen Vorschlag. Kann ich auch Dateien excluden ?

Dann habe ich noch ein Problem wo ich nicht weiß was ich machen soll, auf einem Server beim Kunden ist es so, dass er die Verzeichnisse einfach komplett löscht. Er beachtet überhaupt kein Alter der Ordner. In der Log Datei steht auch drin Ordner nicht gelöscht da er jünger als z.B. 5 Tage ist. Aber wenn ich danach in das Verzeichniss reingehe ist der Ordner weg. Hast Du da eine Idee wie das sein kann ?

 

Gruß Braintee

Link zu diesem Kommentar

War mal wieder zu schnell dahingescriptet gestern ;)

Dem "Redim" hat der "Preserve" gefehlt! Habs nur mit einem Ordner in der Excludeliste getestet, daher gings da noch...

Hier der korrekte Block:

Dim arrEx()
maxExcludes=0
if fso.FileExists(strExcludeFile) then
 Set fex = fso.OpenTextFile(strExcludeFile, ForReading)
 do while not fex.AtEndOfStream
   maxExcludes=maxExcludes+1
   Redim Preserve arrEx(maxExcludes)
   arrEx(maxExcludes) = fex.readline()
   writelog arrEx(maxExcludes)
 loop
 fex.close
end if

 

@Braintee: Das mit den Dateien überleg ich mir in ner ruhigen Minute mal...

Das mit dem Ordner, der dennoch gelöscht wird... momentan keine Idee. Konnte es hier noch nicht nachvollziehen...

Link zu diesem Kommentar

Block getauscht, leider wird immer noch alles gelöscht.

 

Aus deinem letzten Beitrag schließe ich, dass es bei dir funktioniert. Dann muss ich irgendeinen Fehler machen, nur weiß ich nicht welchen.

 

Du schreibst:

"Habs nur mit einem Ordner in der Excludeliste getestet, daher gings da noch..."

 

Das war vielleicht ein Missverständnis, bei mir ging es auch bei nur einem Ordner in der Liste nicht.

 

Ich sehe mir alles noch mal in Ruhe an. Danke erstmal

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...