Batch-Datei zum löschen von Unterordnern im Verzeichnis, wenn alle Dateien älter als 3 Tage
Muss ich meine komplette batch-Skript.
Ich habe einen Pfad C:\Users\Mahmo03S\Shaban. In diesem Pfad gibt es mehrere Unterordner, zB. Ansys.
In den Unterordner Ansys gibt es sogar mehrere Unterordner = seine ein foldertree.
Mein batch-Skript muss zum löschen der Ansys-Ordner, wenn alle Dateien in dem Ordner und in den Unterordnern, die älter als 3 Tage. Wenn nur eine Datei in Ansyn geändert in den letzten 3 Tagen, dann sollte nix passieren mit Ansys.
Ich habe versucht, eine solide Lösung, aber:
Die batch Datei löscht eine subsubfolder in Ansys-Verzeichnis, da die Dateien in der subsubfolder nicht verändert seit 3 Tagen.
Bekam ich 3 batch-Dateien zu tun die Aufgabe.
Skript.bat
@echo off
setlocal enableextensions
pushd C:\Users\Mahmo03S\Desktop\Shaban
set /p check="Select a date:"
Rem When prompted with above line type the date 3 days ago.
forfiles /c "cmd /c (IF @isdir==TRUE call C:\Users\Mahmo03S\Desktop\Search.bat "@path" "%check%")"
popd
Suchen.bat
set del=TRUE
forfiles /p %1 /d -%2 /s /m * /c "cmd /c (IF @isdir ==TRUE call C:\Users\Mahmo03S\Desktop\DeleteFolders.bat "@path" "%check%" "%del%")"
DeleteFolders.bat
set del=FALSE
if %del%==FALSE (rmdir /S /Q %1)
Das problem ist:
Ich habe eine subsubfolder (z.B. Hallo) in den Ordner Ansys. In der hello-Ordner jede Datei, die älter ist als 3 Tage. Das Skript löscht die Ordner Hallo, die er nicht tun sollte. Es sollte nur löschen, Ansys wenn JEDE Datei im Ordner, die älter als 3 Tage. Wenn nur eine Datei verändert wird, Ansys Ordner für die letzten 3 Tage nichts in der Ansys-Ordner gelöscht werden sollten.
Machte ich die batch-Datei, so löscht Sie die Ansys-Ordner, wenn jede Datei, die älter ist als 3 Tage. Es sollte aber nicht löschen subsubfolder nur weil die Dateien älter als 3 Tage.
Wie kann ich das tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funktionierende Lösung gemacht werden kann, viel einfacher 😉
Können Sie erkennen, wenn FORFILES gedruckt zu keinem Ergebnis, und Maßnahmen ergreifen, wenn nichts gedruckt wurde.
Verwendung FÜR /D die Iteration der direkt untergeordneten Ordner. Für jeden Ordner, führen Sie FORFILES auf der Suche für Dateien, die an oder später als das Enddatum. Wenn Sie nicht haben, um über sorgen zu ignorieren Ordner, dann könnte man einfach handeln, basierend auf der FORFILES return-code. Aber Sie wollen nicht, dass man eine false-positive-basierend auf einer neuen, aber leeren Ordner. Sie können erkennen, wenn FORFILES gedruckt beliebigen Dateinamen mit FINDSTR, und löschen Sie die Ordner-Struktur, wenn keine gedruckt wurden. FORFILES noch druckt eine leere Zeile, wenn es feststellt, dass Sie einen neuen Ordner, so müssen Sie nach einem Zeichen suchen mit
.
statt der Suche nach einer Zeile, die mit"^"
.Es gibt mehrere Methoden, geschrieben am StackOverflow und anderswo, die zeigen, wie zu tun, Datums-Arithmetik in batch. Ich bin teilweise zu einer hybrid-JScript - /batch-Programm mit dem Namen
getTimestamp.bat
. Es ist Reine Skript, das läuft auf jedem modernen Windows-Rechner ab XP weiter - keine 3rd-party-ausführbare Datei erforderlich. Es ist voll von Optionen, die es Ihnen erlaubt, nahezu jedes Datum der Berechnung, die Sie sich jemals vorstellen konnte.Vorausgesetzt
getTimestamp.bat
wird in Ihrem aktuellen Verzeichnis, oder besser noch, irgendwo in Ihrem PFAD, dann die folgende Zeile kann verwendet werden, um berechnen Sie Ihre cutoff-Datum anstelle der Abfrage für das Datum:Diese verwendet ein VBS-Skript zu berechnen das Datum 3 Tage vor, und dann überprüft, ob alle Dateien die jünger sind als, die, mit xcopy, und wenn keine Dateien angezeigt werden, die jünger als 3 Tage sollte es dann entfernen Sie die
"C:\Users\Mahmo03S\Shaban\Ansys"
Ordner und Unterverzeichnisse.3 Tagen ist ein Datum, Berechnung und nicht exakt 72 Stunden.
Es ist nicht getestet.