Dateien löschen, wenn bestimmte Datei älter als x Tage ist
Wenn eine Hauptdatei (xyz_001.log) älter als 30 Tage ist sollen alle Dateien gelöscht werden die mit xyz_001 anfangen, auch wenn sie andere Dateiendungen haben (zum Beispiel: xyz_001-1.zip, xyz_001-bsp.log usw)
Hallo,
Ich habe das Problem das ich ein Reihe von Dateien habe die ich löschen will sobald die Hauptdatei älter als 30 Tage ist.
Hier das Beispiel zur Veranschaulichung:
Verzeichnis test
- xyz_001.zip 01.06.2006
- xyz_001.z01 01.06.2006
- xyz_001.z02 01.06.2006
- xyz_001-001.zip 10.06.2006
- xyz_001-001.z01 10.06.2006
- xyz_001.log 10.06.2006
- xyz_002.zip 01.07.2006
- xyz_002.z01 01.07.2006
- xyz_002.z02 01.07.2006
- xyz_002-001.zip 10.07.2006
- xyz_002-001.z01 10.07.2006
- xyz_002.log 10.07.2006
In diesem Beispiel sollen die Dateien xyz_001.zip und xyz_002.zip überprüft werden ob sie älter als 30 tage sind. xyz_001.zip ist älter als 30 Tage, darum sollen alle Dateien die mit xyz_001* anfangen gelöscht werden. Auch die Dateien vom 10.06, da ich mit diesen Dateien ohne die Hauptdatei nichts anfangen kann. Die Dateien haben alle (abgesehen von der Hauptdatei) unterschiedliche Datei Endungen.
Ich kenne das tool "delage", es bringt mich aber in diesem Fall auch nicht weiter. Ich habe schon gegoogelt und auch in diesem Forum gesucht, aber nichts gefunden was mich wirklich weiter bringt.
Vielen Dank im Voraus
BlaBlup
Hallo,
Ich habe das Problem das ich ein Reihe von Dateien habe die ich löschen will sobald die Hauptdatei älter als 30 Tage ist.
Hier das Beispiel zur Veranschaulichung:
Verzeichnis test
- xyz_001.zip 01.06.2006
- xyz_001.z01 01.06.2006
- xyz_001.z02 01.06.2006
- xyz_001-001.zip 10.06.2006
- xyz_001-001.z01 10.06.2006
- xyz_001.log 10.06.2006
- xyz_002.zip 01.07.2006
- xyz_002.z01 01.07.2006
- xyz_002.z02 01.07.2006
- xyz_002-001.zip 10.07.2006
- xyz_002-001.z01 10.07.2006
- xyz_002.log 10.07.2006
In diesem Beispiel sollen die Dateien xyz_001.zip und xyz_002.zip überprüft werden ob sie älter als 30 tage sind. xyz_001.zip ist älter als 30 Tage, darum sollen alle Dateien die mit xyz_001* anfangen gelöscht werden. Auch die Dateien vom 10.06, da ich mit diesen Dateien ohne die Hauptdatei nichts anfangen kann. Die Dateien haben alle (abgesehen von der Hauptdatei) unterschiedliche Datei Endungen.
Ich kenne das tool "delage", es bringt mich aber in diesem Fall auch nicht weiter. Ich habe schon gegoogelt und auch in diesem Forum gesucht, aber nichts gefunden was mich wirklich weiter bringt.
Vielen Dank im Voraus
BlaBlup
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 35724
Url: https://administrator.de/contentid/35724
Ausgedruckt am: 23.11.2024 um 08:11 Uhr
6 Kommentare
Neuester Kommentar
Warum so Kompliziert.
Sortiere doch einfach in einem Explorer Fenster die Datein nach Datum. Makiere die erste bis letzte löschbare Datei -> Fertig. das jeden Tag.
So wie ich das erkenne, kannst du noch niemals am Dateianfang oder Ende etwas festmachen. Welche Datein gelöscht werden können, ausser Datum.
Schaue mal nach einer Batchdatei !
Mfg Metzger
Sortiere doch einfach in einem Explorer Fenster die Datein nach Datum. Makiere die erste bis letzte löschbare Datei -> Fertig. das jeden Tag.
So wie ich das erkenne, kannst du noch niemals am Dateianfang oder Ende etwas festmachen. Welche Datein gelöscht werden können, ausser Datum.
Schaue mal nach einer Batchdatei !
Mfg Metzger
Moin BlaBlub,
Auf meinem Rechner würde ich es wahrscheinlich mit einem Oneliner vom CMD-Prompt aus machen...
...der würde als Bätch und auf ein paar Zeilen gestreckt so aussehen
...aber ich gebe zu, erst der Output hilft, den Source nachzuvollziehen.
Output vom CMD-Oneliner oben:
das heißt, ich rechne einfach (überschlägig) die Datumswerte von Datei- und heutigen Datum [= ("%%~ti %date%") ] um in Tage und bilde die Differenz.
Wenn größer als 30 [Tage], wird Parent-Logdatei und alle Child-Logdateien gelöscht.
Nein, komm zurück, sollte ein Spaß sein...
So etwas würde ich auch keinem Kollegen anbieten...
... das funktioniert zwar, aber ist natürlich so nicht wartbar oder in meinen drei Tagen Jahresurlaubs von irgendwem anpassbar.
Solche Codeschnipsel, zumindest ohne Dokumentation, auf Produktivmaschinen wäre IMHO ein Kündigungsgrund.
Hab ich nur aus educational purposes zusammengebraten.
Wieder im Ernst:
Erste Option wäre für mich, den VBS-Schnipsel fertig zu stellen.
Da ist ja nichts mehr so buggy daran, dass Du es nicht mit zwei Tassen Tee hinbekommst.
Zweite Variante:
- native batch: entfällt. Da Batch NICHT in der Lage ist, mit Datumswerten zu rechnen/ Datumswerte zu vergleichen.
ABER: ich habe schon in einigen ähnlichen Batch-Fragen hier gepostet, wie Batch mit einem kleinen JS- oder VBS-Codefetzen mit der DateDiff()-Funktion zusammenspielen kann.
Such bitte über Forumssuche nach "yesterdate" ... da ist so ein Beispiel.
Wenn Du dieses Beispiel nachvollziehst und leicht variierst (als Parameter das FileDate der *.log-Datei rein, als Ausgabe Differenz in Tagen bis Heute), dann kannst Du es auch LESbar per Batch machen.
Machbare Variante Drei (die ich aus ästhetischen Aspekten ausschließen würde) wäre ein Einzeiler mit der M$-Nobelpreis-Nominierung "ForFiles.exe", die wie für Deinen Fall gemacht ist.
Link zu ForFiles.exe habe ich gestern gepostet.
Gruß
Biber
Auf meinem Rechner würde ich es wahrscheinlich mit einem Oneliner vom CMD-Prompt aus machen...
>for %i in (*.log) do @for /f "tokens=1-3,5-7 delims=. " %a in ("%~ti %date%") do @ECHO set /a "datediff= %f*365 + %e*30 + %d - %c*365 - %b*30 -%a" && if !datediff! GEQ 30 del /Y "%~dpn*.*">nul
@echo Off & setlocal EnableDelayedExpansion
PushD "x:\mein\LogVerzeichzeichnis"
for %%i in (*.log) do (
for /f "tokens=1-3,5-7 delims=. " %%a in ("%%~ti %date%") do (
ECHO set /a "datediff= %%f*365 + %%e*30 + %%d - %%c*365 - %%b*30 -%%a" && if !datediff! GEQ 30 del /Y "%%~dpn*.*">nul
))
PopD
...aber ich gebe zu, erst der Output hilft, den Source nachzuvollziehen.
Output vom CMD-Oneliner oben:
set /a "datediff= 2006*365 + 07*30 + 10 - 2006*365 - 01*30 -12"
set /a "datediff= 2006*365 + 07*30 + 10 - 2006*365 - 07*30 -06"
set /a "datediff= 2006*365 + 07*30 + 10 - 2006*365 - 07*30 -03"
set /a "datediff= 2006*365 + 07*30 + 10 - 2006*365 - 07*30 -05"
set /a "datediff= 2006*365 + 07*30 + 10 - 2004*365 - 03*30 -18"
set /a "datediff= 2006*365 + 07*30 + 10 - 2003*365 - 11*30 -10"
Wenn größer als 30 [Tage], wird Parent-Logdatei und alle Child-Logdateien gelöscht.
Nein, komm zurück, sollte ein Spaß sein...
So etwas würde ich auch keinem Kollegen anbieten...
... das funktioniert zwar, aber ist natürlich so nicht wartbar oder in meinen drei Tagen Jahresurlaubs von irgendwem anpassbar.
Solche Codeschnipsel, zumindest ohne Dokumentation, auf Produktivmaschinen wäre IMHO ein Kündigungsgrund.
Hab ich nur aus educational purposes zusammengebraten.
Wieder im Ernst:
Erste Option wäre für mich, den VBS-Schnipsel fertig zu stellen.
Da ist ja nichts mehr so buggy daran, dass Du es nicht mit zwei Tassen Tee hinbekommst.
Zweite Variante:
- native batch: entfällt. Da Batch NICHT in der Lage ist, mit Datumswerten zu rechnen/ Datumswerte zu vergleichen.
ABER: ich habe schon in einigen ähnlichen Batch-Fragen hier gepostet, wie Batch mit einem kleinen JS- oder VBS-Codefetzen mit der DateDiff()-Funktion zusammenspielen kann.
Such bitte über Forumssuche nach "yesterdate" ... da ist so ein Beispiel.
Wenn Du dieses Beispiel nachvollziehst und leicht variierst (als Parameter das FileDate der *.log-Datei rein, als Ausgabe Differenz in Tagen bis Heute), dann kannst Du es auch LESbar per Batch machen.
Machbare Variante Drei (die ich aus ästhetischen Aspekten ausschließen würde) wäre ein Einzeiler mit der M$-Nobelpreis-Nominierung "ForFiles.exe", die wie für Deinen Fall gemacht ist.
Link zu ForFiles.exe habe ich gestern gepostet.
Gruß
Biber
Schliesse Mich da Biber an.
Ich habe bis jetzt eine ganz wilde Batchdatei zusammen gestrickt.
Die zwa ein bissel aufgebläht ist, aber doch um so einfacher zu verstehen ist.
Leider scheitere ich aber bei dem vergleich 2er Variablen.
Aber vielleicht kann Biber mir da weiter helfen um meine Datei vertig zu stellen.
MFg Metzger
Ich habe bis jetzt eine ganz wilde Batchdatei zusammen gestrickt.
Die zwa ein bissel aufgebläht ist, aber doch um so einfacher zu verstehen ist.
Leider scheitere ich aber bei dem vergleich 2er Variablen.
Aber vielleicht kann Biber mir da weiter helfen um meine Datei vertig zu stellen.
MFg Metzger