voxi
Goto Top

älteste Dateien aus Verzeichnis löschen

@echo off & setlocal Call GetAllDateTimeInfos /s :: (alle Variablen wie JJ, MM, TT etc sind gesetzt sind gesetzt) Set "LogFile=BatchSicherung\vogg_%JJ%%MM%%TT%_%hh%%min%.log" Set "NewBackup=BatchSicherung\vogg_%JJ%%MM%%TT%_%hh%%min%.db" echo %logfile%echo %newbackup%Call GetAllDateTimeInfos /u echo Datumswerte erstelltcd d:\AmicDB\Vogg\echo Ins Verzeichnis AmicDB Vogg gewechseltcopy vogg.db %NewBackup% >>%LogFile%IF ERRORLEVEL 1 goto FEHLER_beim_Copy echo DatenbankDatei korrekt kopiertFC /b vogg.db %NewBackup% >>%LogFile%IF ERRORLEVEL 1 goto FEHLER_beim_Vergleich :: wenn ok, dann Rechner runterfahren...echo DatenbankDatei korrekt verglichen::CALL C:\AMIC\Aeins\batch\Sichern_VOGG.bat ::echo Sicherungsdatei ausgeführtecho jetzt wird heruntergefahrenshutdown -s -f -t 05goto :eof :FEHLER_Beim_Copy ::evtl Blat.exe (Freewaretool zum Versenden von einfachen Mails vom CMD-Prompt aus) bitte Forumssuche benutzen oder eine Suchmaschine. echo "Fehler beim Kopieren..." >>%LogFile%goto :eof :FEHLER_Beim_Vergleich ::evtl Blat.exe (Freewaretool zum Versenden von einfachen Mails vom CMD-Prompt aus) bitte Forumssuche benutzen oder eine Suchmaschine. echo "Fehler beim Vergleich..." >>%LogFile%goto :eof

hi profis!!!

will zu dieser datei noch hinzufügen, dass die ältesten dateien aus diesem verzeichnis (zb älter als 50 tage) automatisch gelöscht werden sollen und auch aus dem papierkorb entfernt werden, um speicherplatz zu sparen

kann mir dabei irgendwer helfen?
vielen dank im voraus!!!!

lg silvia

Content-Key: 45513

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

Printed on: April 23, 2024 at 10:04 o'clock

Member: y3k
y3k Nov 28, 2006 at 12:38:42 (UTC)
Goto Top
Hi,

google mal nach "delage" - ist ein Kommandozeilentool, das genau das kann

greetz
stephan
Member: Biber
Biber Nov 28, 2006 at 18:58:15 (UTC)
Goto Top
Moin voxi,

grundsätzlich kann ich nur zu dem wirklich praktischen Tool DelAge32.exe raten,
das ich ich auch schon ein paar mal bei ähnlichen Fragestellungen hier im Forum empfohlen habe.

Wie ich grad gelesen habe, hat Horst Schaeffer auch gerade eine neue Version DelAge32.exe 2.0 bereitgestellt.
Obwohl schon ganz viele Nutzer auch an der bisherigen Version 1.5 nichts vermissen. face-wink


Der Vorteil gegenüber einer Batch-(im Sinne von *.bat-Datei)Verarbeitung ist eben die rekursive Verarbeitung, die in einem, noch dazu kompilierten Tool stattfindet.

In native Batch ist keine (schmerzfreie) Verarbeitung von Datumswerten machbar.. Hier muss man/frau mindestens auf die vorhandenen DateAdd()/DateDiff() der Light-Skriptsprachen zurückgreifen.
Davon die beliebteste ist sicherlich VBSkript.

Ein Beispiel (bzw. der erste Schritt) wäre ein kleiner VBS-Schnipsel zum Zusammenspiel mit einem Batch dieser Art:
'----GetFileAge.vbs  
Set fso = CreateObject ("Scripting.FileSystemObject")   
Set f = fso.getfile(wscript.arguments(0)) 
WScript.echo DateDiff("d", f.DateLastModified, now())  
Set fso = nothing

Dieser VBS-Schnipsel würde für eine einzelne Datei das Alter in Tagen ausgeben.
Beispiel für eine Datei bzw für eine Liste von Dateien rekursiv unterhalb eines Verzeichnisses:
[Am CMD-Prompt]
>for /f %f in ('cscript //nologo GetFileAge.vbs "datetime.txt"') do @echo %f  
239
>for /r "d:\temp" %i in (*.txt) do @for /f %f in ('cscript //nologo GetfileAge.vbs "%i" ') do @echo %f %i  
13 d:\temp\Beispiel.txt
69 d:\temp\benutzer1.txt
147 d:\temp\benutzer2.txt
239 d:\temp\datetime.txt
50 d:\temp\logfile.txt
258 d:\temp\MessSub.txt
62 d:\temp\$home\logs\log.txt
586 d:\temp\Backup1\Admincopy\Anwendungsdaten\Microsoft\Internet Explorer\brndlog.txt
586 d:\temp\Backup1\Admincopy\Anwendungsdaten\Microsoft\Internet Explorer\rsoplog.txt
....

Theoretisch ließe sich so ein Konstrukt im Batch nutzen:

[..im Batch...]
...

for /r "%SicherungsRoot%" %%i in (*.*) do (  
    for /f %%f in ('cscript //nologo GetFileAge.vbs "%%i" ') do If %%f GTR 50 del /q "%%i" >nul  
)    

...dann würden alle Dateien älter als 50 Tage in allen Unterverzeichnissen unterhalb %SicherungsRoot% gelöscht.

Allerdings würde dann auch der Batch bei 10000 Dateien zu prüfenden Dateien im Verzeichnis auch 10000 Mal das VBS-Skript aufrufen.

Das ist Bullshit suboptimal und stinkelangsam ineffizient.

Der nächste Schritt wäre folgerichtig, dem VBSkript nicht einzelne Dateinamen zu übergeben, sondern einen Verzeichnisnamen, in dem dann alle Dateien mit mehr als 50 Nächten auf dem Buckel gefälligst gelöscht werden.
Der übernächste Schritt wäre, das Ganze eben auch rekursiv zu machen.
Alles kein Hexenwerk...aber eben auch schon ein oder zweimal erfunden worden im Lauf der Jahrhunderte.

Womit ich wieder bei meiner Empfehlung DelAge32.exe wäre. face-wink

Liebe Grüße
Biber
Member: voxi
voxi Dec 02, 2006 at 10:00:16 (UTC)
Goto Top
Danke euch recht herzlich.
habs jetzt mit delage probiert und es dürft passen.
danke und lg silvia
@echo off & setlocal Call GetAllDateTimeInfos /s :: (alle Variablen wie JJ, MM, TT etc sind gesetzt sind gesetzt) Set "LogFile=BatchSicherung\vogg_%JJ%%MM%%TT%_%hh%%min%.log" Set "NewBackup=BatchSicherung\vogg_%JJ%%MM%%TT%_%hh%%min%.db" echo %logfile%echo %newbackup%Call GetAllDateTimeInfos /u echo Datumswerte erstelltcd d:\AmicDB\Vogg\echo Ins Verzeichnis AmicDB Vogg gewechselt:: Datei kopierencopy vogg.db %NewBackup% >>%LogFile%IF ERRORLEVEL 1 goto FEHLER_beim_Copy echo DatenbankDatei korrekt kopiert:: Datei vergleichenFC /b vogg.db %NewBackup% >>%LogFile%IF ERRORLEVEL 1 goto FEHLER_beim_Vergleich ::alte Dateien löschenecho Alte Dateien werden gelöschtCall Delage32 d:\AmicDB\Vogg\BatchSicherung\*.db 60:: wenn ok, dann Rechner runterfahren...echo DatenbankDatei korrekt verglichenecho jetzt wird heruntergefahrenshutdown -s -f -t 05goto :eof :FEHLER_Beim_Copy ::evtl Blat.exe (Freewaretool zum Versenden von einfachen Mails vom CMD-Prompt aus) bitte Forumssuche benutzen oder eine Suchmaschine. echo "Fehler beim Kopieren..." >>%LogFile%goto :eof :FEHLER_Beim_Vergleich ::evtl Blat.exe (Freewaretool zum Versenden von einfachen Mails vom CMD-Prompt aus) bitte Forumssuche benutzen oder eine Suchmaschine. echo "Fehler beim Vergleich..." >>%LogFile%goto :eof