Verwenden Sie forfiles löschen Sie einen Ordner und seinen Inhalt
Ich bin versucht zu reinigen, die ein öffentliches Verzeichnis, so dass, wenn ein Artikel älter als 30 Tage gelöscht werden sollen. Ich habe eine batch-Datei, die setup mit dem folgenden Befehl:
forfiles /p "C:\PATH\USERS\PATH\" /s /m *.* /c "cmd /c Del @path /q" /d -30
Diese funktioniert Super. Aber das Problem ist, dass es löscht nur die Elemente innerhalb der Ordner im Pfad.
Beispiel: C:\PATH\USERS\PATH\HelloWorld\file.text
ist über 30 Tage alt. Aber der Befehl löscht nur file.text
, nicht den Ordner.
Würde ich überprüfen, um zu sehen, wenn der Ordner leer ist, und löschen Sie dann den Ordner mit dem anderen Befehl?
- rd um einen Ordner zu entfernen. Es wird nicht entfernen Sie eine nicht-emty-Ordner, es sei denn, Sie geben es eine
/s /q
- Sind Sie wollen, um zu überprüfen, ob der Ordner ist 30 Tage alt? Wenn dem so ist, dann verwenden Sie die
@isdir
variable zu prüfen, Verzeichnisse und löschen Sie dann das Verzeichnis.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Befehlszeile, die Sie verwenden, ist sehr gefährlich (ich habe gerade kopiert es hier und neu angeordnet, die Schalter):
Weil
forfiles
gibt die beiden Dateien und Verzeichnisse. Angenommen, es gibt ein Verzeichnis namenscontainer
, die den Suchkriterien entsprechen (zuletzt geändert 30 Tagen oder früher), die ausgeführtdel
Befehlszeile istdel "C:\PATH\USERS\PATH\container" /Q
, die löscht alle Dateien, auch diejenigen, die nicht der Erfüllung der Suchkriterien (beachten Sie, dassdel \folder
verhält sich wiedel \folder\*
).Um dieses Problem zu lösen, müssen Sie filtern für die Datei oder Verzeichnisse, wie zum Beispiel diese:
Ich habe auch die Datei-Maske von
*.*
zu*
, weilforfiles
ist, im Gegensatz zu allen internen Befehlen, nicht mit Dateien ohne Endung im Falle*.*
gegeben ist. Zusätzlich habe ich entfernt, die nachfolgende\
aus dem Weg, weil sonstforfiles
löst einen Fehler aus:ERROR: The directory name is invalid.
.Aber nun zu etwas völlig anderem-die Antwort auf Ihre eigentliche Frage:
Seit
forfiles /S
zurück zum Verzeichnis vor es gibt die sub-Elemente, ist es nicht sinnvoll Sie überprüfen, ob das Verzeichnis leer ist oder nicht in der gleichen Befehlszeile, die Sie benötigen, zu tun, später.Zu diesem Zweck können Sie entweder einen zweiten
forfiles
- Schleife wie diese (auch die überprüfung Ihrer letzten änderung Termine, wenn Sie möchten; andernfalls entfernen Sie die/D -30
Teil):Oder alternativ, wenn die directory-änderung Termine nicht relevant sind, können Sie eine
for /D
loop, der ist auch schneller: