Fraenky 10 Posted December 10, 2019 Report Share Posted December 10, 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 Quote Link to comment
Gulp 143 Posted December 10, 2019 Report Share Posted December 10, 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 Quote Link to comment
Fraenky 10 Posted December 10, 2019 Author Report Share Posted December 10, 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 Quote Link to comment
NilsK 1,822 Posted December 10, 2019 Report Share Posted December 10, 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 Quote Link to comment
Gulp 143 Posted December 10, 2019 Report Share Posted December 10, 2019 (edited) 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 Edited December 10, 2019 by Gulp Korrektur Quote Link to comment
testperson 893 Posted December 10, 2019 Report Share Posted December 10, 2019 (edited) 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 Edited December 10, 2019 by testperson Quote Link to comment
Fraenky 10 Posted December 11, 2019 Author Report Share Posted December 11, 2019 (edited) 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 Edited December 11, 2019 by Fraenky Quote Link to comment
Gulp 143 Posted December 11, 2019 Report Share Posted December 11, 2019 Je nach Ordnerstruktur kann das schwierig werden und mehrere nacheinander oder gleichzeitig gestartete Instanzen notwendig machen ........ Grüsse Gulp Quote Link to comment
NilsK 1,822 Posted December 11, 2019 Report Share Posted December 11, 2019 Moin, ich erwähne noch mal robocopy und dessen Auswahl-Syntax ... Gruß, Nils 1 Quote Link to comment
Fraenky 10 Posted December 12, 2019 Author Report Share Posted December 12, 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 Quote Link to comment
speer 14 Posted December 12, 2019 Report Share Posted December 12, 2019 (edited) 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 ;) Edited December 12, 2019 by speer Quote Link to comment
Fraenky 10 Posted December 16, 2019 Author Report Share Posted December 16, 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 Quote Link to comment
NilsK 1,822 Posted December 16, 2019 Report Share Posted December 16, 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 Quote Link to comment
mwiederkehr 182 Posted December 16, 2019 Report Share Posted December 16, 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. Quote Link to comment
Fraenky 10 Posted December 18, 2019 Author Report Share Posted December 18, 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 Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.