for /f "skip=100 delims=" %%F in ('dir *.xml /B /O-D /A-D') do del "%%F"

Thanatos_71

Newbie
Registriert
Nov. 2021
Beiträge
7
Hallo zusammen

Ich überwache mehrere Verzeichnisse im System mit Batchdateien mit dem folgenden Befehl. Da werden im Verzeichnis die letzten 100 XML Files stehen gelassen und die restlichen gelöscht.

cd D:\OUT\Verzeichniss1
for /f "skip=100 delims=" %%F in ('dir *.xml /B /O-D /A-D') do del "%%F"

Jetzt ist neu das es im Verzeichniss1 mehrere Unterverzeichnise geben kann. Wie baue ich den Befehl jetzt so um, das im Verzeichniss1 und allen Unterverzeichnisen, je 100 Files stehen gelassen werden?
Also im Verzeichniss1 100Files. Im Unterverzeichniss1 100Files. Im Unterverzeichniss2 100Files. Im Unterverzeichniss3 100Files. usw!
 
forfiles /s
"Durchsucht Unterverzeichnisse rekursiv, wie z. B. "DIR /S""

So hab ichs mal gemacht
 
Wie wärs damit:
Bash:
cd D:\OUT\Verzeichniss1

for /F "delims=*" %%a in ('dir /B /AD') do (

    for /f "skip=100 delims=" %%F in ('dir "%%a\*.xml" /B /O-D /A-D') do del "%%F"

)
PS: braucht noch n bischen Feintuning.. aber von der Idee her sollte es so gehen.
 
Das geht so nicht mit Batch, auch nicht mit Forfiles. Damit kann man die LETZTEN x (zB halt 100) der GESAMTliste fressen. Aber nicht JEWEILS.

Powershell wäre eine Option. Aber auch da muß man etwas geschickter rangehen.

Letztlich ist das ein Aggregat, also wäre mein erster Ansatz GROUP-OBJECT in Powershell.
Da wäre dann aber zu gucken, wie man sich seinen Gruppierungs-Ausdruck passend stricken könnte.

Alternativ, und das ginge auch in Batch, daß man hergeht und sich sein Script rekursiv aufrufen läßt: für jeden Ordner, den ich finde, das Script mit diesem Ordner als Parameter aufrufen; und für den Ordner selber die 100 neuesten Dateien auflisten (wie bisher).

Dann aber penibel auf Abbruchbedingungen achten.
 
RalphS schrieb:
Das geht so nicht mit Batch, auch nicht mit Forfiles. Damit kann man die LETZTEN x (zB halt 100) der GESAMTliste fressen. Aber nicht JEWEILS.
Klar geht das mit Batch.. siehe mein Beispiel oben.. das Skript löscht in allen Unterverzeichnissen alle XMLs bis auf die ersten 100...

Es war noch ein kleiner Fehler drin beim del, hier ist der richtige Code:
Bash:
cd D:\OUT\Verzeichniss1
for /F "delims=*" %%A in ('dir /B /AD') do (
    for /f "skip=100 delims=" %%F in ('dir "%%A\*.xml" /B /O-D /A-D') do del "%%A\%%F"
)

Für Verzeichnis1 selber kann man dann einfach nochmal die del-Schleife aus dem Ursprünglichen Skript laufen lassen.
 
  • Gefällt mir
Reaktionen: Thanatos_71
Korben2206 schrieb:
Klar geht das mit Batch.. siehe mein Beispiel oben.. das Skript löscht in allen Unterverzeichnissen alle XMLs bis auf die ersten 100...

Es war noch ein kleiner Fehler drin beim del, hier ist der richtige Code:
Bash:
cd D:\OUT\Verzeichniss1
for /F "delims=*" %%A in ('dir /B /AD') do (
    for /f "skip=100 delims=" %%F in ('dir "%%A\*.xml" /B /O-D /A-D') do del "%%A\%%F"
)

Für Verzeichnis1 selber kann man dann einfach nochmal die del-Schleife aus dem Ursprünglichen Skript laufen lassen.
Geht so!! Vielen Dank
Erledigt
 
Zurück
Oben