d.stegemann 10 Geschrieben 18. April 2009 Melden Teilen Geschrieben 18. April 2009 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 Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 18. April 2009 Melden Teilen Geschrieben 18. April 2009 Ein Ordner/Directory kann gelöscht werden mit del oder rd (remove directory) und Parametern, aufgerufen in einem Task (Geplante Task), da braucht man keine Batch, kein Skript. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 18. April 2009 Melden Teilen Geschrieben 18. April 2009 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... Zitieren Link zu diesem Kommentar
Braintee 10 Geschrieben 20. April 2009 Autor Melden Teilen Geschrieben 20. April 2009 Hallo Cyquest, Danke. das Script funktioniert mit Ordner aber wenn ich Dateien auch löschen möchte geht das nicht. Kannst Du vielleicht ein letztes Mal. Wie gesagt, ich kann das Script jetzt verwenden aber damit es universeller Einsatzfähig ist wäre das super wenn das auch funktionieren würde. Gruß Braintee Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 22. April 2009 Melden Teilen Geschrieben 22. April 2009 Hi, sammel mal noch deine restlichen Wünsche ;) Nächste Woche kann ich mich darum wieder kümmern :) Grüße, Frank Zitieren Link zu diesem Kommentar
elta33 10 Geschrieben 26. Mai 2009 Melden Teilen Geschrieben 26. Mai 2009 @Cyquest Da hab ich schon ne Weile nach gesucht, besten Dank! Endlich mal ein Script, dass zu funktionieren scheint... Alle Tolls, die ich bissher probiert habe, orientieren sich am Datum der Dateien und nicht des Hauptordners, so wie ich es brauche. Falls sich da noch Verbesserungen ergeben sollten, sehr gerne ;-) Grüße Zitieren Link zu diesem Kommentar
elta33 10 Geschrieben 8. Juni 2009 Melden Teilen Geschrieben 8. Juni 2009 @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 Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 8. Juni 2009 Melden Teilen Geschrieben 8. Juni 2009 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 Zitieren Link zu diesem Kommentar
elta33 10 Geschrieben 9. Juni 2009 Melden Teilen Geschrieben 9. Juni 2009 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 Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 9. Juni 2009 Melden Teilen Geschrieben 9. Juni 2009 Ersetz mal if strFolder = arrEx(i) then boolExclude = true durch if strFolder = TRIM(arrEx(i)) then boolExclude = true Möglicherweise hat's am Ende der Strings noch'n Leerzeichen oder den Zeilenumbruch o.ä. Zitieren Link zu diesem Kommentar
Braintee 10 Geschrieben 9. Juni 2009 Autor Melden Teilen Geschrieben 9. Juni 2009 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 Zitieren Link zu diesem Kommentar
elta33 10 Geschrieben 9. Juni 2009 Melden Teilen Geschrieben 9. Juni 2009 Hab die eine Zeile getauscht, aber die Folder werden weiterhin gelöscht. Schreibfehler kann ich ausschließen, er listet meine angegeben Ordner in der CMD ausgabe, so dass ich genau vergleichen kann. Tragisch ist das nicht, aber vielleicht hast du noch ne Idee. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 9. Juni 2009 Melden Teilen Geschrieben 9. Juni 2009 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... Zitieren Link zu diesem Kommentar
elta33 10 Geschrieben 9. Juni 2009 Melden Teilen Geschrieben 9. Juni 2009 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 Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 9. Juni 2009 Melden Teilen Geschrieben 9. Juni 2009 Ggf. einfach mal im Code ein paar "writelog" verteilen und div. Variablen ausgeben lassen (so bin ich auf das fehlende "Preserve" gekommen) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.