Braintee 10 Geschrieben 17. April 2009 Melden Teilen Geschrieben 17. April 2009 Hallo, ich habe jetzt schon recht viel gesucht und auch schon viele Sachen getestet aber irgendwie funktioniert keines von diesen ganzen Scripten. Ich möchte eigentlich nur eine Batch Datei, welche mir Ordner löscht die älter sind als 14 Tage. Bitte schickt mir keine Links mit irgendwelchen Tools, ich habe schon alles probiert was ich selbst mit 4 Stunden googlen gefunden habe. Vielleicht hat aber jemand selbst so eine Batch Datei im Einsatz wo er weiß das die auch wirklich funktioniert. Danke Gruß Braintee Zitieren Link zu diesem Kommentar
mkeil 10 Geschrieben 17. April 2009 Melden Teilen Geschrieben 17. April 2009 Hi, keine Batch... aber Powershell, sollte gehen: $date = Get-Date $older = 14 $files = get-childitem -Path ... | Where-Object {($date - $_.LastWriteTime).Days -gt $older} Dann hast Du alle Dateien in $files und kannst sie durchlaufen (foreach).. Zitieren Link zu diesem Kommentar
Braintee 10 Geschrieben 17. April 2009 Autor Melden Teilen Geschrieben 17. April 2009 Hallo mkeil, danke für Deine Antwort. Ich habe allerdings ein Windows 2003 Server und müsste dann wahrscheinlich erst die Powershell installieren damit ich Dein Script nutzen kann. Das nächste Problem ist, das ich das unten stehende zwar grob verstehe aber nicht weiß wie ich jetzt weitermachen könnte. Ich denke der Weg würde schon wieder in Richtung, ich habe keine Ahnung aber versuche mir das mal anzueignen gehen. Dieser Weg ist ja grundsätzlich nicht schlecht aber nach mehreren Stunden erfolgreichen probieren und testen suche ich jetzt einfach etwas fertiges. Ich denke ihr könnt das verstehen. Für alle die schon was fertiges im Einsatz haben immer her damit. Ein fertiges VBS geht natürlich auch aber einzelne Zeilen wo sozusagen der Anfang gemacht ist damit komme ich wie gesagt nicht richtig klar. Für alle die jetzt vielleicht meinen ich will einfach nur ne Lösung ohne vorher selbst geschaut zu haben, denen kann ich nur sagen, ich habe geschaut und nichts gefunden, was auch wirklich funktioniert. Gruß Braintee Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 17. April 2009 Melden Teilen Geschrieben 17. April 2009 Sollen die Ordner nach "Datum der Erstellung" oder "Datum der letzen Änderung" aussortiert werden? Sollen die kpl. Ordner, unabhängig davon, wie alt die enthaltenen Dateien sind, gelöscht werden? Hier ein VB-Script, das die Ordner nach "Datum der Erstellung" kpl. löscht: strRootFolder = Inputbox("Bitte Startverzeichnis eingeben:") if Trim(strRootFolder) <> "" then Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(strRootFolder) 'Durchlaufe alle Unterverzeichnisse for each subfolder in folder.subfolders KillFolderSub subfolder next MsgBox "Fertig" End if Sub KillfolderSub(objFolder) 'Durchlaufe alle Unterverzeichnisse for each subfolder in objfolder.subfolders KillFolderSub subfolder next 'Wenn Ordner vor mehr als 14 Tagen erstellt wurde... if objFolder.datecreated < (Date - 14) then 'Alle Dateien im Ordner löschen for each file in objfolder.Files fso.DeleteFile(file.Path) next 'Ordner löschen fso.DeleteFolder(objFolder.Path) end if End Sub ... allerdings eine "Grobfassung". Könnte bei Bedarf etwas verfeinert werden. Übrigens: Es reicht nicht, "datecreated" durch "datelastmodified" zu ersetzen, wenn das Änderungsdatum gewünscht wird, da diese Änderungsdatum sich auf das aktuelle Datum ändert, wenn in Unterordnern Dateien gelöscht werden! Zitieren Link zu diesem Kommentar
humpi 11 Geschrieben 17. April 2009 Melden Teilen Geschrieben 17. April 2009 Hallo, oder einfach mit Delage32 Gruss Christian 1 Zitieren Link zu diesem Kommentar
Braintee 10 Geschrieben 17. April 2009 Autor Melden Teilen Geschrieben 17. April 2009 Hallo, @cybquest Habe Dein Script mal probiert bekomme allerdings die Fehlermeldung. Zeile 22: Zeichen 3: Fehler Objekt erfoderlich:'objFolder' Code:800A01A8 Ich weiß jetzt nicht genau wo da der Fehler liegt aber vielleicht weißt Du das ja. @humpi Das Tool habe ich natürlich probiert aber damit kann man keine Ordner löschen. Aber trotzdem danke für den Tipp. Gruß Braintee Zitieren Link zu diesem Kommentar
humpi 11 Geschrieben 17. April 2009 Melden Teilen Geschrieben 17. April 2009 Hallo Braintee, kann man doch. Mache ich auch so. Nimm mal die Schalter /recurse und /rd Gruss Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 17. April 2009 Melden Teilen Geschrieben 17. April 2009 Hi, keine Batch... aber Powershell, sollte gehen: Dann hast Du alle Dateien in $files und kannst sie durchlaufen (foreach).. Oder gleich mit der pipe weitermachen und nicht alles 2x durchgehen. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 17. April 2009 Melden Teilen Geschrieben 17. April 2009 Sorry, mein Fehler. Nu sollte es laufen... strRootFolder = Inputbox("Bitte Startverzeichnis eingeben:") if Trim(strRootFolder) <> "" then Set fso = CreateObject("Scripting.FileSystemObject") Set ofolder = fso.GetFolder(strRootFolder) 'Durchlaufe alle Unterverzeichnisse for each folder in ofolder.subfolders KillFolderSub folder next MsgBox "Fertig" End if Sub KillfolderSub(objFolder) 'Durchlaufe alle Unterverzeichnisse for each subfolder in objfolder.subfolders KillFolderSub subfolder next 'Wenn Ordner vor mehr als 14 Tagen erstellt wurde... if objFolder.datecreated < (Date - 14) then 'Alle Dateien im Ordner löschen for each file in objfolder.Files fso.DeleteFile(file.Path) next 'Ordner löschen fso.DeleteFolder(objFolder.Path) end if End Sub Zitieren Link zu diesem Kommentar
Braintee 10 Geschrieben 17. April 2009 Autor Melden Teilen Geschrieben 17. April 2009 Hallo, @Cybquest ich habe das Script jetzt getestet und es läuft. Ich wollte jetzt mal selbständig das Script so ändern das ich einfach den pfad fest vorgebe um später das ganze als geplanten Task laufen lassen zu können. Klar hat natürlich nicht funktioniert. Ich habe einfach mal den Pfad oben reingeschrieben und die Inputbox raugelöscht. Er bringt mir zwar keine Fehlermeldung aber funktionieren will es auch nicht. Weiterhin habe ich die Message Box entfernt da ich diese ja dann nicht mehr brauche wenn es funktioniert. Hast Du vielleicht nochmal eine Minute um mir zu sagen was ich falsch gemacht habe ? Danke @humpi also ich meine das ich auch sämtliche Schalter versucht habe aber Ordner löschen bzw. Unterordner das hat nicht funktioniert. Wenn Du sagst das es bei Dir funktioniert, kannst Du mir dann mal deine Komandozeile schicken womit Du das machst ? @Dukel Danke ist nett gemeint aber ich bin "Programmier bzw. Scripttechnisch" nicht so fit. Gruß Braintee Zitieren Link zu diesem Kommentar
humpi 11 Geschrieben 17. April 2009 Melden Teilen Geschrieben 17. April 2009 Hallo, bei mit sieht das so aus: delage32 Laufwerk\Verz\*.* 14 /recurse /rd Zitieren Link zu diesem Kommentar
Braintee 10 Geschrieben 17. April 2009 Autor Melden Teilen Geschrieben 17. April 2009 Hallo humpi, Hier mal ein Auszug von der Homepage wo DelAge beschrieben wird. Delage32 deletes files, and optionally removes empty folders. Delage32 was not designed to delete directory structures depending on the age of the folder, regardless of the age of the files inside. Ich habe es dennoch mal testweise versucht und mit Preview die Ordner und Dateien angeschaut welche er löschen würde. Das was ich gelöscht haben möchte ist nicht dabei. Es wird funktioniert so also nicht. Gruß Braintee Zitieren Link zu diesem Kommentar
humpi 11 Geschrieben 17. April 2009 Melden Teilen Geschrieben 17. April 2009 Hallo, bei mir löscht er alle Dateien, die älter als X Tage sind. Danach die leeren Ordner. Die kommen zum Schluss dran. Im Preview habe ich mir das allerdings noch nicht angeschaut. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 17. April 2009 Melden Teilen Geschrieben 17. April 2009 Hast Du vielleicht nochmal eine Minute um mir zu sagen was ich falsch gemacht habe ? Da Du den geänderten Code hier nicht reingeschreiben hast, kann ich Dir schwer sagen, was DU falsch gemacht hast ;) Wenn der Pfad fest rein kommt, kann auch der "If..."-Teil weg. So sollte es gehen: strRootFolder = "C:\MeinOrdner" Set fso = CreateObject("Scripting.FileSystemObject") Set ofolder = fso.GetFolder(strRootFolder) 'Durchlaufe alle Unterverzeichnisse for each folder in ofolder.subfolders KillFolderSub folder next Sub KillfolderSub(objFolder) 'Durchlaufe alle Unterverzeichnisse for each subfolder in objfolder.subfolders KillFolderSub subfolder next 'Wenn Ordner vor mehr als 14 Tagen erstellt wurde... if objFolder.datecreated < (Date - 14) then 'Alle Dateien im Ordner löschen for each file in objfolder.Files fso.DeleteFile(file.Path) next 'Ordner löschen fso.DeleteFolder(objFolder.Path) end if End Sub Zitieren Link zu diesem Kommentar
Braintee 10 Geschrieben 18. April 2009 Autor Melden Teilen Geschrieben 18. April 2009 Hallo Cybquest, fast perfekt. Erstmal Danke. Er löscht jetzt das was ich möchte. Ich möchte das Script eventuell universeller einsetzten und vielleich auch mal Ordner löschen wo Setup.exe Dateien oder sonstige Systemdateien enthalten sind. Er bricht bei diesen Dateien ab und bringt einen Laufzeitfehler. Was auch noch gut wäre wenn man alles was er gelöscht hat in eine Log Datei schreiben könnte. Ich weiß jetzt nicht wo groß der Aufwand wäre um das so umzuschreiben. Soll jetzt nicht danach aussehen "Da gibt man ihm den kleinen Finger und schon ist die ganze Hand weg" Wenn Du keine Lust mehr dazu hast, ist das auch kein Problem dann schau ich mal weiter. Trotzdem nochmal Danke dafür. Gruß Braintee 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.