schully
Goto Top

Mit Batch Datei Verzeichnis auslesen

Hallo Forum,
ich möchte per Batch Datei ein bestimmtes Verzeichnis auf meinem PC auslesen und alle Dateien bis auf die drei jüngsten löschen.

Ich mache täglich eine Sicherung meines Webservers als Datum.zip Datei.
Jetzt möchte ich das eine Batch-Datei ein mal die Woche per Task gestartet wird
und dieses Verzeichnis ausliest und alles löscht was älter ist als drei Tage.

Ich bin für jede Hilfe Dankbar.
Gruß
Jürgen

Content-ID: 109082

Url: https://administrator.de/contentid/109082

Ausgedruckt am: 13.11.2024 um 00:11 Uhr

Biber
Biber 17.02.2009 um 19:53:22 Uhr
Goto Top
Moin Schully,

über die Forumssuche nach "die ältesten x Dateien löschen" oder ähnlich müsstest Du auf vorsichtig ausgedrückt mehrere Batch-Beispiele für diese thematik kommen.

Die Strategie ist auch recht simpel:
  • lass dir über den DIR-Befehl mit Schalter /b wie billich und /o-d wie absteigend nach Datum eine Liste aller Dateien ausgeben
  • überspringe die ersten 3 Zeilen (die jüngsten Dateien)
  • hau wech den Rest.
Demo am CMD-Prompt:
for /f "skip=3 delims=" %i in ('dir d:\temp\*.* /a-d /b /o-d') do @echo del "d:\temp\%~i"  
Dient nur zu Demo, d.h. diese Zeile macht ein "@echo del [dateiname]" statt des "echten" DEL-Befehls.

Wie Du diese eine Zeile per Taskplaner startest, findest Du -vorsichtig ausgedrückt MEHRFACH mit einer Forumssuche über "Batch Taskplaner".

Grüße
Biber
P.S. Nicht böse sein für die Nicht-Rundum-sorglos-Fertiglösung, aber...
wer seine alle-bis-auf-die-jüngsten-drei-Dateien per taskplanergesteuertem Batch automatisch wegschrubbeln will, der sollte sich diese Zeile auch zusammenbraten und ggf. warten/anpassen können.
Schully
Schully 18.02.2009 um 07:50:33 Uhr
Goto Top
Hallo Biber,

selbstverständlich bin ich nicht böse. Warum auch.
Selbstverständlich kann ich die Batch per Taskplaner aufrufen. Das ist doch klar.
Ich hatte halt keinen Ansatz wie ich an die zu löschenden Dateien komme.

Ich habe mit Batch-Programmierung so gut wie nie zu tun deshalb frage ich ja in einem Forum. Das Suchen brachte mich halt auch nicht weiter so stellte ich mal meine Frage allgemein.

Jetzt zu Deinem Ansatz mit der For-Schleife.
Skip=3 gibt an wie viele Dateien nicht gelöscht werden sollen aus dem Suchergebnis ('dir d:\temp\*.* /a-d /b /o-d') welches in %i steht.

Ich habe Das Skript (loeschen.bat) so angepasst. Es tut sich nichts! Die Datei startet und schließt sich sofort wieder. Nichts passiert.

@echo off

for /f "skip=3 delims=" %i in ('dir G:\A\*.* /a-d /b /o-d') do @echo del "G:\A\%~i"
:: Erst mal sehen was gelöscht werden würde
pause
:: Dann löschen
for /f "skip=3 delims=" %i in ('dir G:\A\*.* /a-d /b /o-d') do del "G:\A\%~i"
pause
Biber
Biber 18.02.2009 um 10:08:02 Uhr
Goto Top
Moin Schully,

bitte taste Dich in folgenden drei Schritten an das Wunschergebnis heran.

1) Starte die Batchdatei bis zum letzten erfolgreichen Test vom CMD-Prompt und nicht via Doppelklick. Wie Du ja selbst festgestellt hast, kommst Du nie zu Ansätzen bei der Fehlerlokalisierung bei "Die Datei startet und schließt sich sofort wieder"
2) Ändere die "einfachen" Prozentzeichen vor den FOR-Laufvariablen (%i) in doppelte Prozentzeichen (%%i).
for /f "skip=3 delims=" %%i in ('dir G:\A\*.* /a-d /b /o-d') do (  
                 echo del "G:\A\%%~i"  
                 REM  Erst mal sehen was gelöscht werden würde
                 REM uncomment nach Test:: Dann löschen
                 REM uncomment nach Test:: del "G:\A\%%~i" 
)
pause
3) wenn Du mit dieser Datei sinnvolle Ergebnisse bekommst, dann mach die beiden Zeilen "REM uncomment nach Test:" scharf, indem Du genau diesen Text herauslöscht, lösche die beiden Zeilen darüber und das "Pause" am Ende und gut.

Die Codeformatierung ist u.a. in unseren FAQ beschrieben.

Grüße
Biber
Schully
Schully 18.02.2009 um 12:32:44 Uhr
Goto Top
Hallo Biber,

vielen Dank für Deine Hilfe. Es funktioniert.
Ich bekomme nicht nur sinnvolle Ergebnisse sondern genau das was ich wollte.

Also noch mal vielen vielen Dank.

Gruß
Jürgen