Fraenky 10 Geschrieben 10. Dezember 2019 Melden Teilen Geschrieben 10. Dezember 2019 Hallo zusammen, hab seit langem noch mal eine Frage. Ich möchte gerne den Inhalt eines Ordners (Dateien und Ordner), die älter als X-Tage sind, mit einer Batch-Datei löschen. Dazu habe ich folgende Batch-Datei erstellt: forfiles /P C:\Test /S /D -5 /C "cmd /C del /s /q @file" forfiles /P C:\Test /D -5 /C "cmd /C IF @isdir == TRUE rd /S /Q @path" Das funktioniert soweit auch ganz gut. Nun möchte ich aber einen bestimmten Ordner darin ausklammern. Vielleicht kann mir da jemand helfen, wie ich das umsetzen kann? Vielen Dank vorab und viele Grüße Fränky Zitieren Link zu diesem Kommentar
Gulp 260 Geschrieben 10. Dezember 2019 Melden Teilen Geschrieben 10. Dezember 2019 Da würde ich auf Delage von Horst Schäffer umsteigen, das lässt sich für sowas prima konfigurieren ...... https://www.horstmuc.de/wbat32d.htm Grüsse Gulp Zitieren Link zu diesem Kommentar
Fraenky 10 Geschrieben 10. Dezember 2019 Autor Melden Teilen Geschrieben 10. Dezember 2019 Hallo und vielen Dank für Deine schnelle Antwort. Wenn ich das richtig gelesen habe, kann Delage aber nur leere Ordner löschen, und keine mit Inhalt? Gruß Fränky Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 10. Dezember 2019 Melden Teilen Geschrieben 10. Dezember 2019 Moin, man kann auch robocopy für sowas einspannen, das recht gute Möglichkeiten zur Auswahl und für den Ausschluss bietet. http://www.codesingh.com/2009/08/using-robocopy-to-delete-old-files-from.html Gruß, Nils Zitieren Link zu diesem Kommentar
Gulp 260 Geschrieben 10. Dezember 2019 Melden Teilen Geschrieben 10. Dezember 2019 (bearbeitet) vor 27 Minuten schrieb Fraenky: Hallo und vielen Dank für Deine schnelle Antwort. Wenn ich das richtig gelesen habe, kann Delage aber nur leere Ordner löschen, und keine mit Inhalt? Gruß Fränky So halb, das Tool kann durchaus Dateien löschen, dann leere Ordner entfernen oder aber die Ordnerstruktur unberührt lassen und nur die Inhalte löschen, je nach konfiguriertem Alter oder komplett eben je nachdem wie du das haben willst. Hier stehts genauer: https://www.horstmuc.de/win/delage-de.htm Grüsse Gulp bearbeitet 10. Dezember 2019 von Gulp Korrektur Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 10. Dezember 2019 Melden Teilen Geschrieben 10. Dezember 2019 (bearbeitet) Hi, wenn es auch PowerShell sein darf, wäre "Get-ChildItem" recht simpel zum Auffinden. Das Ergebnis muss dann nur noch gelöscht werden. Get-ChildItem -Recurse | ? { $_.LastWriteTime -gt $(Get-Date).AddDays(-5) -and $_.FullName -inotmatch "\\Ordner" } Gruß Jan bearbeitet 10. Dezember 2019 von testperson Zitieren Link zu diesem Kommentar
Fraenky 10 Geschrieben 11. Dezember 2019 Autor Melden Teilen Geschrieben 11. Dezember 2019 (bearbeitet) Guten Morgen und nochmals vielen Dank für Eure Antworten und die Hilfe. @Gulp Ich habe mal eine Test mit Delage gemacht. In einem Testordner lieben Dateien, sowie Unterordner. Dazu habe ich folgende Syntax verwendet: delage64 "C:\Test\*.*" 10 /includeRHS /recurse /subonly /rd Das hat insoweit funktioniert, dass alle Ordner geleert wurden, und anschließend auch dann die leeren Unterordner gelöscht wurden. Die Dateien, die dierekt im Ornder Test lagen, blieben allerdings unberührt . Also habe ich das Script so abgeändert: delage64 "C:\Test\*.*" 5 /includeRHS /recurse /subonly /rd delage64 "C:\Test\*.*" 5 /includeRHS Damit konnte ich dann den kompletten Ordner leeren. Mir ist allerdings noch unklar, wie ich einen Ordner davon ausschließen kann, egal, wie alt die Dateien darin sind. Gruß Fränky bearbeitet 11. Dezember 2019 von Fraenky Zitieren Link zu diesem Kommentar
Gulp 260 Geschrieben 11. Dezember 2019 Melden Teilen Geschrieben 11. Dezember 2019 Je nach Ordnerstruktur kann das schwierig werden und mehrere nacheinander oder gleichzeitig gestartete Instanzen notwendig machen ........ Grüsse Gulp Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 11. Dezember 2019 Melden Teilen Geschrieben 11. Dezember 2019 Moin, ich erwähne noch mal robocopy und dessen Auswahl-Syntax ... Gruß, Nils 1 Zitieren Link zu diesem Kommentar
Fraenky 10 Geschrieben 12. Dezember 2019 Autor Melden Teilen Geschrieben 12. Dezember 2019 Guten Morgen, @NilsK Danke auch für den Tip mit RoboCopy. Ich habe es jetzt auf die Schnelle so gelöst: @echo off cd\ mkdir C:\Sich mkdir C:\Sich-2 robocopy C:\Test\01-Wichtig C:\Sich\01-Wichtig /R:10 /W:30 robocopy C:\Test C:\Sich-2 /E /MOVE /MINAGE:5 /R:10 /W:10 rmdir C:\Sich-2 /s /q rmdir C:\Test\01-Wichtig /s /q robocopy C:\Sich\01-Wichtig C:\Test\01-Wichtig /R:10 /W:30 rmdir C:\Sich /s /q exit Lässt sich vielleicht auch eleganter lösen, aber funktioniert. Vielen Dank und viele Grüße Fränky Zitieren Link zu diesem Kommentar
speer 19 Geschrieben 12. Dezember 2019 Melden Teilen Geschrieben 12. Dezember 2019 (bearbeitet) Hallo, zwar etwas spät gelesen, aber vielleicht funktioniert folgendes für Dich: forfiles /c "cmd /c if not @fname==\"ROM\" rd /S /Q @file" "ROM" ist als Beispiel ein Ordner der Nicht angetastet wird. Der Rest müsstest du dir halt zusammenbauen. Bitte erstmals testen und nicht gleich in der prod. Umgebung abfeuern ;) bearbeitet 12. Dezember 2019 von speer Zitieren Link zu diesem Kommentar
Fraenky 10 Geschrieben 16. Dezember 2019 Autor Melden Teilen Geschrieben 16. Dezember 2019 Guten Morgen und Danke auch an speer für Deinen Beitrag. Ich habe es jetzt mit RoboCopy gelöst. Ein kleines Problem habe ich allerdings noch. Ich habe nicht bedacht, dass es vorkommt, dass jemand Dateien in diesen Ordner legt, die er vielleich am nächsten Tag braucht, diese aber vom Erstellungs- oder auch Änderungsdatum schon älter sind, als die Tage, die ich angebe. Gibt es irgendwie die Möglichkeit, das Ablagedatum der Datein dieses Ordners zu ermitteln? Danke und Gruß Fränky Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 16. Dezember 2019 Melden Teilen Geschrieben 16. Dezember 2019 Moin, hier bist du an einer Stelle, die sich mit einfachen Mitteln kaum sinnvoll lösen lässt. Man könnte jetzt darüber sinnieren, dass es einen Unterschied gibt, ob eine Datei an das Ziel kopiert wurde oder ob sie dorthin verschoben wurde (was hier vermutlich die Ursache ist). Danach wird man aber wahrscheinlich den nächsten Punkt finden. Die Mechanismen des "rohen" Dateisystems sind oft ungeeignet, um darauf Workflows von geschäftlicher Bedeutung abzubilden. Vielleicht ist hier ein grundsätzlich anderes Vorgehen empfehlenswert. Gruß, Nils Zitieren Link zu diesem Kommentar
mwiederkehr 382 Geschrieben 16. Dezember 2019 Melden Teilen Geschrieben 16. Dezember 2019 Wie Nils schon geschrieben hat, lässt sich das nicht zuverlässig mit den vom Dateisystem bereitgestellten Informationen lösen. Es sollte sich aber einigermassen leicht umsetzen lassen mit einer kleinen Datenbank. Falls Du ein Script willst, könntest Du PowerShell nehmen und die Daten in einer SQLite-Datenbank ablegen: In einem ersten Schritt geht das Script alle Dateien durch und trägt die, die noch nicht in der Datenbank vorhanden sind, ein mit Dateiname und aktuellem Datum. Dann sucht es in der Datenbank alle Dateien, die schon länger als X Tage da sind und löscht diese sowohl auf dem Dateisystem als auch in der Datenbank. Zitieren Link zu diesem Kommentar
Fraenky 10 Geschrieben 18. Dezember 2019 Autor Melden Teilen Geschrieben 18. Dezember 2019 Guten Morgen zusammen, und vielen Dank noch mal für die vielen Antworten. Ja, stimmt. Lässt sich wohl nicht so ganz leicht umsetzen. Die Idee mit der DB ist gut, der Aufwand ist allerdings für meinen Zweck etwas groß. Über eine andere Vorgehensweise nachzudenken, ist hier, glaube ich, das Richtige. Viele Grüße Fränky 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.