mrintranet
Goto Top

delage32 zum loeschen von alten ordnern

hallo,

besteht die möglichkeit, mit delage32 ordner und deren inhalt zu löschen, wenn die ordner vor mehr als 5 tagen angelegt wurden?
delage löscht soweit ich weiss nur die dateien in den ordnern wenn diese älter als 5 tage sind.

wir haben in einem sicherungsordner für jeden tag einen unterordner im format JJJJMMTT.
davon sollen täglich nur die ordner der letzten 5 tage übrig bleiben.

funktioniert das mit delage? mit welchem code?

Content-ID: 94128

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

Ausgedruckt am: 25.11.2024 um 14:11 Uhr

Landstreicher
Landstreicher 11.08.2008 um 14:40:07 Uhr
Goto Top
Hallo,

ich habe selber mal delage32 benutzt und konnte feststellen, das er nur die dateien und nicht die ordner lösch ... wie du schon sagst.
allerdings kann man mit:

C:\Programme\delage32\delage32.exe F:\Sicherung\Logs\*.* 7 /recurse /created /rd

einstellen, das er alle files die älter ist wie 7 tage löscht.

ich hoffe du meinst das so ?

PS: wenn du über CMD, delage ohne angabe von parametern startest, bekommst du folgende hilfe:
DelAge32, ver. 1.8 (c) 2003-2005, Horst Schaeffer
Deletes files (path with file pattern) by age (number of days)
Syntax:
DelAge32 filespec days [/includeRO] [/includeH] [/recurse] [/subonly] ..
.. [/preview] [/created] [/modified] [accessed] [/rd] [/move path] [/quiet]

gruß landstreicher
MrIntranet
MrIntranet 11.08.2008 um 14:58:35 Uhr
Goto Top
danke für die schnelle antwort, aber auch mit /recurse /created /rd werden die verzeichnisse nicht gelöscht. im gegenteil, nicht mal mehr die dateien in den unterordnern werden gelöscht.

beispiel:

c:\backup\20080811\unterordner
c:\backup\20080810\unterordner
c:\backup\20080809\unterordner
c:\backup\20080808\unterordner
c:\backup\20080807\unterordner

etc.

es sollen die ordner 200808xx samt inhalt gelöscht werden, wenn älter als 5 tage.
Landstreicher
Landstreicher 11.08.2008 um 15:23:47 Uhr
Goto Top
komisch, was sagt denn das LOG oder schreibst du keines mit ?

ich lasse bei mir delage vorgweg laufen und anschließend noch mal folgendes
(ich weiss sieht doppelt gemoppelt aus ... hält aber besser ;) )

title loeschen von Ordnern aelter als 7 Tage
@echo off & setlocal
set TDiff=-7
set "gTemp=%Temp%\Gestern.vbs"  
echo g=DateAdd("d",%TDiff%,Date):WScript.Echo Right(g,4)^&"-"^&Mid(g,4,2)^&"-"^&Left(g,2)>"%gTemp%"  
for /f %%i in ('cscript //nologo "%gTemp%"') do set G=%%i  
del "%gTemp%"  

if exist F:\Sicherung\SAP_DEL_4\%G% echo veraltete Sicherung vom %G% vorhanden. loesche nun %G%
if exist F:\Sicherung\SAP_DEL_4\%G% rd /s /q F:\Sicherung\SAP_DEL_4\%G%

goto :next

:next
@echo off & setlocal
set TDiff=-8
set "gTemp=%Temp%\Gestern.vbs"  
echo g=DateAdd("d",%TDiff%,Date):WScript.Echo Right(g,4)^&"-"^&Mid(g,4,2)^&"-"^&Left(g,2)>"%gTemp%"  
for /f %%i in ('cscript //nologo "%gTemp%"') do set G=%%i  
del "%gTemp%"  

if exist F:\Sicherung\SAP_DEL_4\%G% echo veraltete Sicherung vom %G% vorhanden. loesche nun %G%
if exist F:\Sicherung\SAP_DEL_4\%G% rd /s /q F:\Sicherung\SAP_DEL_4\%G%

goto :next2

:next2
@echo off & setlocal
set TDiff=-9
set "gTemp=%Temp%\Gestern.vbs"  
echo g=DateAdd("d",%TDiff%,Date):WScript.Echo Right(g,4)^&"-"^&Mid(g,4,2)^&"-"^&Left(g,2)>"%gTemp%"  
for /f %%i in ('cscript //nologo "%gTemp%"') do set G=%%i  
del "%gTemp%"  

if exist F:\Sicherung\SAP_DEL_4\%G% echo veraltete Sicherung vom %G% vorhanden. loesche nun %G%
if exist F:\Sicherung\SAP_DEL_4\%G% rd /s /q F:\Sicherung\SAP_DEL_4\%G%

goto :next3

:next3
@echo off & setlocal
set TDiff=-10
set "gTemp=%Temp%\Gestern.vbs"  
echo g=DateAdd("d",%TDiff%,Date):WScript.Echo Right(g,4)^&"-"^&Mid(g,4,2)^&"-"^&Left(g,2)>"%gTemp%"  
for /f %%i in ('cscript //nologo "%gTemp%"') do set G=%%i  
del "%gTemp%"  

if exist F:\Sicherung\SAP_DEL_4\%G% echo veraltete Sicherung vom %G% vorhanden. loesche nun %G%
if exist F:\Sicherung\SAP_DEL_4\%G% rd /s /q F:\Sicherung\SAP_DEL_4\%G%

goto :next4

:next4
@echo off & setlocal
set TDiff=-11
set "gTemp=%Temp%\Gestern.vbs"  
echo g=DateAdd("d",%TDiff%,Date):WScript.Echo Right(g,4)^&"-"^&Mid(g,4,2)^&"-"^&Left(g,2)>"%gTemp%"  
for /f %%i in ('cscript //nologo "%gTemp%"') do set G=%%i  
del "%gTemp%"  

if exist F:\Sicherung\SAP_DEL_4\%G% echo veraltete Sicherung vom %G% vorhanden. loesche nun %G%
if exist F:\Sicherung\SAP_DEL_4\%G% rd /s /q F:\Sicherung\SAP_DEL_4\%G%

hier löscht er alles was älter als 7 - 11 tage ist.

Gruß Landstreicher
bastla
bastla 11.08.2008 um 15:49:01 Uhr
Goto Top
@Landstreicher

[OT]
Die Zeilen
@echo off & setlocal
set "gTemp=%Temp%\Gestern.vbs"  
echo g=DateAdd("d",%TDiff%,Date):WScript.Echo Right(g,4)^&"-"^&Mid(g,4,2)^&"-"^&Left(g,2)>"%gTemp%"  
for /f %%i in ('cscript //nologo "%gTemp%"') do set G=%%i  
brauchst Du nur einmal am Anfang, und
del "%gTemp%"  
(zum Löschen des temporären VBScripts) eigentlich gar nicht, und wenn, dann nur ganz am Ende.

Ebenfalls überflüssig: Ein "goto" zur nächsten Zeile (zB "goto :next") - da die Labels ":next" bis ":next4" auch (anscheinend) von keiner anderen Stelle im Batch angesprungen werden, könntest Du auch diese entsorgen ...
[/OT]

Grüße
bastla

P.S.: Und wenn Du zum Posten -Tags verwendet, wird vom Batch auch nix kursiv dargestelt. face-wink
Landstreicher
Landstreicher 11.08.2008 um 16:06:30 Uhr
Goto Top
hehe merci bastla ... ich habs gleich formatiert ;)

ok einige zeilen sind überflüssig, aber es läuft und sollte ja nur als kleiner denkanstoß für MrIntranet dienen
Intranet erinnert mich so an die telekom ... da gibt es sowas auch ;)
bastla
bastla 11.08.2008 um 16:24:00 Uhr
Goto Top
@Landstreicher

Bist Du eigentlich extra nett zu MrIntranet? face-wink

Grüße
bastla
Landstreicher
Landstreicher 12.08.2008 um 11:33:15 Uhr
Goto Top
@bastla, nö zu dir war ich ja auch immer nett ;)

wenn ich extra nett bin kann man das auch als sarkasmus bezeichnen, also bin ich nur nett ;)

mich würde nun interessieren ob er es gelöst hat oder nicht und wenn ja wie.
bastla
bastla 12.08.2008 um 11:56:12 Uhr
Goto Top
@Landstreicher

Keinerlei Beschwerde meinerseits face-smile - ich konnte nur nicht an "Intranet / Extranet(t)" vorbei ... face-wink

Grüße
bastla
MrIntranet
MrIntranet 14.08.2008 um 08:08:18 Uhr
Goto Top
so ihr spassvögel, da bin ich wieder ;)

ehrlich gesagt ist mir der gepostete code etwas zu hoch. was batch-dateien angeht, bin ich insofern fit, dass ich mit xcopy etwas von A nach B kopieren kann face-smile

wenn ich mir den code von Landstreicher ansehe: i understand only railstation (ich versteh nur bahnhof).

danke für die hinweise... aber ich hoffe noch auf eine einfache lösung mit weniger code oder ein anderes tool wie delage.
bastla
bastla 14.08.2008 um 17:01:51 Uhr
Goto Top
Hallo MrIntranet!

Nach Deinem Ordnungsruf face-wink ein anderer Ansatz: Soferne sich in dem Sicherungsordner tatsächlich nur Unterordner mit dem angegebenen Namensformat befinden, sollte eigentlich folgender Batch genügen:
@echo off & setlocal
set "Basis=D:\Sicherungsordner"  
set Anzahl=5

for /f "skip=%Anzahl%" %%i in ('dir /b /o-n /ad "%Basis%\20*"') do echo rd /s /q "%Basis%\%%i"  
pause
Das "echo" vor dem Löschbefehl dient dem Testen - so wird nur angezeigt, welche Ordner entsorgt würden. Auch "pause" hat nur während der Testphase eine Daseinsberechtigung.

Grüße
bastla
MrIntranet
MrIntranet 15.08.2008 um 14:03:40 Uhr
Goto Top
wow bastla, machst deinem namen auch alle ehre.

welch ein service, funktioniert einwandfrei. vielen vielen dank!
anfaenger500
anfaenger500 22.01.2009 um 19:00:22 Uhr
Goto Top
Hallo bastla,
mich interessiert das Thema auch und ich bin genauso ein Typ wie MrIntranet der es gerne ohne grossartige Software und Scriptkenntnisse via Batchdatei erledigt haben möchte.

Wenn ich deine Vorgaben bei mir austeste dann bekomme ich die Meldung Dateien nicht gefunden.

Den Basispfad habe ich angepasst.

Könntest du mir vielleicht erklären was die Zeile über pause bedeutet, vielleicht weiss ich dann wo mein Fehler liegt!

Vielen Dank schonmal im voraus.

Grüße
anfaenger500
bastla
bastla 22.01.2009 um 19:14:24 Uhr
Goto Top
Hallo anfaenger500 und willkommen im Forum!

Ich teile die entsprechende Zeile etwa auf:
for /f "skip=%Anzahl%" %%i in ...
Mit %Anzahl% ist hier die Zahl der nicht zu löschenden Ordner gemeint (es sollen also zB immer die letzten 5 bleiben).
... ('dir /b /o-n /ad "%Basis%\20*"') do ...
der "dir"-Befehl listet in dieser Schreibweise nur die Namen (/b) aller unterhalb des Ordners "%Basis%" liegenden Ordner (/ad), deren Name mit "20" beginnt, absteigend sortiert (/o-n) auf - dadurch stehen die Ordner mit dem neuesten Datum oben in der Liste und werden durch das "skip" (s. o.) übersprungen und somit durch den weiter unten beschriebenen Befehl (= Rest der Zeile) nicht gelöscht.

(Den "dir"-Befehl (ohne die umgebenden Apostrophe und mit dem tatsächlichen Pfad anstelle von %Basis%) kannst Du testweise auch an der Kommandozeile eingeben, um Dir die komplette Liste der berücksichtigten Unterordneranzeigen zu lassen.)

... echo rd /s /q "%Basis%\%%i"
Dieser Teil der Zeile ist für das rück- (samt aller Unterordner) und umstandslose (da ohne Rückfrage) Löschen der Ordner zuständig (allerdings erst, wenn das "echo" entfernt wird - solange es da ist, wird nur angezeigt, welche Ordner gelöscht würden).

Grüße
bastla
anfaenger500
anfaenger500 23.01.2009 um 00:22:50 Uhr
Goto Top
Hallo bastla,

vielen Dank für die gute Erklärung.
Jetzt weiss ich auch wie das Script aufgebaut ist.

Ich kenne mich nicht aus mit der Batchprogrammierung und würde gern noch etwas darüber lernen.
Kannst du mir sagen, welche Seiten da in Ordnung sind?

Zum Bsp.:
FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a

Das Ergebnis kenne ich, aber bedeutet das alles.

Vielen Dank.

Grüße
anfaenger500
bastla
bastla 23.01.2009, aktualisiert am 18.10.2012 um 18:37:39 Uhr
Goto Top
Hallo anfaenger500!

Kannst du mir sagen, welche Seiten da in Ordnung sind?
Eigentlich kenne ich nur eine - und da bist Du ja schon ... face-wink

Konkret würde ich Dir zu Bibers Workshops (nicht nur für "Runaways" face-wink empfehlenswert) raten.

Außerdem gibt es in "Batch & Shell" jede Menge Lösungen für kleinere und größere Aufgabenstellungen, oft (auch hier sei Biber benannt) recht gut und ausführlich erklärt, sodass Du versuchen kannnst, diese nachzuvollziehen - auch für Batch ist "learning by doing" ein guter Ansatz.
Zu Deiner Beispielzeile:
Jede "for"-Schleife solltest Du "von innen" lesen - hier geht es also um den Befehl "date /t". Wenn Du diesen ausführst, erhältst Du (je nach Betriebssystem, Sprache und Einstellungen) etwa folgendes Ergebnis:
23.01.2009
Da Du die Einzelteile des Datums benötigst, muss es zerlegt werden - hier bietet sich natürlich der "." als Trennzeichen ("delimiter") an, während in einem engl. geschriebenen Datum mit "/" getrennt wird - es schadet nicht, beide Möglichkeiten zu berücksichtigen, und auch ev vorhandenes Leerzeichen für das Aufteilen heranzuziehen - daher
delims=/. 
Die durch das Zerlegen entstehenden Teile ("tokens") werden alphabetischen aufsteigenden Variablen (%a, %b, ...) zugewiesen, wobei das Prozentzeichen bei einer Verwendung innerhalb eines Batches (so ist Dein Beispiel oben gemeint) verdoppelt werden muss.

Mit
tokens=1,2,3,4
(könnte auch als "tokens=1-4" geschrieben werden) wird angegeben, dass die ersten 4 Teile (falls es so viele werden sollten) den angesprochenen Variablen zugeordnet werden sollen (wobei in diesem konkreten Fall ein ev 4. Teil = %%d) ohnehin nicht verwendet würde.

Nach dem "do" stehen dann diese Variablen zur Verfügung und werden hier dazu genutzt, in einer neuen Variable %CDATE% das Datum im Format "JJJJMMTT" zusammen zu setzen.

Eine Alternative zu dieser Zeile wäre
set "CDATE=%date:~-4%%date:~-7,2%%date:~-10,2%"
was bedeutet: Entnehme dem Datum die letzten 4 Stellen, danach 2 Stellen ab der Position 7 von hinten (= rechts) gezählt und dann nochmals 2 Stellen ab Position 10 (von hinten). Warum nicht das Ganze von vorne (von links) her? Unter Windows 2000 lautet die Datumsschreibweise oft
Fr 23.01.2009
Mit der gezeigten Variante wird sowohl aus dieser, als auch aus der oben dargestellten Form (von einem XP-System) das richtige Ergebnis ermittelt.

Problematisch wäre in beiden Fällen natürlich das kurze Datumsformat mit nur zweistelliger Jahreszahl - aber mehr dazu findest Du in einem der angesprochen Workshops: Batch for Runaways Part III Datums- und Zeitvariablen im Batch.

Ansonsten noch der allgemeine Hinweis: Mit "date /?", "for /?", "set /?", etc erhältst Du zum jeweilgen Befehl einen Hilfetext.

Na dann: Viel Spaß beim Batchen ...

Grüße
bastla
anfaenger500
anfaenger500 23.01.2009 um 09:02:49 Uhr
Goto Top
Guten Morgen basta,

vielen Dank für deine ausführliche und gute Erklärung.

Anhand der Erklärung komme ich schon ein ganzes Stück weiter.

Grüße
anfaenger500
anfaenger500
anfaenger500 25.01.2009 um 19:28:47 Uhr
Goto Top
Guten Abend hier im Forum,

ich habe eine Frage zum Thema löschen von Dateien und Ordner via Batch.

Unter Angabe von Bsp "20*" kann ich alles löschen was mit 20 anfängt oder "*txt" kann ich alles löschen was eine Textdatei darstellt.
Wie kann ich aber Dateien oder Ordner löschen die eine Kombination aus Datum und Zeit Bsp. "25.01.2009-19.00.00Uhr" oder Zahlen und Wörtern Bsp. "2009_abend" darstellen.

Unter Google oder in der Hilfe habe ich keine passende Antwort gefunden und daher habe ich mich wieder an das Forum gewendet.

Vielen Dank schonmal im voraus.

Grüsse
anfaenger500
bastla
bastla 25.01.2009 um 19:39:28 Uhr
Goto Top
Hallo anfaenger500!

Deinen Beispielen würde ich als minimales gemeinsames Kriterium den Namensbestandteil "2009" entnehmen - dann:
del *2009*.*
Wenn Du natürlich genauer einschränken willst (und kannst), dann zB
del ??.??.2009-*.*
wobei zusätzlich natürlich auch noch der Dateityp mit angegeben werden kann, also
del ??.??.2009-*.log

Zu klären ist immer vorrangig, woran die zu löschenden Dateien möglichst eindeutig zu erkennen sind ...

Grüße
bastla
anfaenger500
anfaenger500 25.01.2009 um 19:55:34 Uhr
Goto Top
Hallo bastla,

meine Zeile bezieht sich auf folgenfden Batchcode:
for /f "skip=%Anzahl%" %%i in ('dir /b /o-n /ad "%Basis%\20*"') do rd /s /q "%Basis%\%%i"

Hier werden ja alle Verzeichnisse die mit 20... anfangen gelöscht.
Bei mir habe ich ein anderes Verzeichnismuster.

Werde dich in Kenntnis setzen was rausgekommen ist.

Vielen Dank schonmal.

Schönen Abend noch.

Grüße
anfaenger500
bastla
bastla 25.01.2009 um 20:06:14 Uhr
Goto Top
Hallo anfaenger500!

Bei mir habe ich ein anderes Verzeichnismuster.
Dann wäre aber der "dir"-Befehl zu überdenken - derzeit wird nach Namen sortiert, es gäbe aber auch die Möglichkeit, das Änderungsdatum als Kriterium zu verwenden - um dann die jüngsten Ordner zu behalten, müsstest Du "/o-n" durch "/o-d" ersetzen. Mit einem zusätzlichen "/tc" könntest Du anstelle des Änderungsdatums auch das Erstellungsdatum berücksichtigen.

Grüße
bastla
timmix
timmix 18.03.2009 um 14:30:13 Uhr
Goto Top
Was du suchst ist der Paramter: /rd

z.B.:
delage32.exe <PfadZuDeinemOrdner>\*.* 5 /recurse /rd
eduardp
eduardp 12.02.2010 um 19:37:28 Uhr
Goto Top
Nabend,

Kennt immer noch niemand ein Tool mit GUI das so mächtig ist um die o.g Anforderungen zu erfüllen?

- löschen von Dateien und Ordner nach einer bestimmten Zeit und der möglichkeitn ein Protokoll mit den gelöschten Dateien zu erstellen.

Gruß
TxWcA
TxWcA 26.08.2010 um 08:49:55 Uhr
Goto Top
Hallo

Wie lösche ich folgende Dateien die älter sind als 30 Tage.

Es gibt logs welche nach 30 Tagen automatisch gelöscht werden können.

Diese Logs liegen C:\Archiv\Log_A und in C:\Archiv\Log_B

In diesen Ordnern möchte ich dass die Logs welche älter als 30 Tage sind automatisch täglich gelöscht werden.
Wer kann mir da helfen ?

Danke
es grüßt
txwca
bastla
bastla 27.08.2010, aktualisiert am 18.10.2012 um 18:43:16 Uhr
Goto Top
Hallo TxWcA!

Für die "Automatik" kann ein "Geplanter Task" sorgen, und für das Löschen selbst siehe Löschen nach Dateialter (vor kurzem etwas überraschend - da schon seit Jahren hier im Forum "delage32" als "Quasi"-Standard für derartige Aufgabenstellungen genannt wird - geposteten) Tipp ...

Grüße
bastla
eduardp
eduardp 28.10.2010 um 09:52:48 Uhr
Goto Top
Hallo Leute.

Ich habe den Beitrag hier gelesen, konnte das aber für meine Bedürfnisse nicht ganz anpassen.
Wir haben in der Firma eine Transferordner der täglich komplett geleert werden soll. Das bedeutet alle Dateien und Ordner sollen gelöscht werden.


Mein "Skript" sieht momentan so aus - funktioniert aber nur wenn ich es manuell im CMD Modus eingebe. Warum?
For /f "tokens=*" %i in ('dir /ad /b "D:\alluser\transfer\!TempOrdner1Tag\*.*"') do rmdir "D:\alluser\transfer\!TempOrdner1Tag\%i" /s /q

Wenn ich diese Zeile in einer CMD-Box eingebe funktioniert alles. Wenn dies allerdings per Task als Batch-Dateie aufgerufen wird nicht. Was mache ich falsch?

Danke für eure Hilfe
bastla
bastla 28.10.2010 um 12:17:58 Uhr
Goto Top
Hallo eduardp!

In einem Batch sind die Laufvariablen von "for"-Schleifen (in Deinem Fall %i) jeweils mit doppelten Prozentzeichen zu schreiben...
Eine Vereinfachung wäre übrigens (nochmals für die Direkteingabe und mit "echo" zum Testen, damit die Löschbefehle nur angezeigt werden):
for /d %i in ("D:\alluser\transfer\!TempOrdner1Tag\*.*") do @echo rd /s /q "%%i"
Grüße
bastla
eduardp
eduardp 28.10.2010 um 12:58:23 Uhr
Goto Top
Hallo bastla,

funktioniert leider nicht. Das Fenster kommt kurz hoch und verschwindet wieder. Passiert ist aber nichts.
Wenn ich manuell die Eingabeaufforderung gehe und deine Zeile eingebe funktioniert es. Allerdings muss das "%%i" durch "%i" ersetzt werden.

Warum wird nichts ausgeführt wenn ich ein Doppelklick auf die Batch-Datei mache?
Das Skript läuft auf einem Windows Server 2008 R2 - kann es damit zusammenhängen ?

Gruß,
Eduard
bastla
bastla 28.10.2010 um 14:43:31 Uhr
Goto Top
Hallo eduardp!
Allerdings muss das "%%i" durch "%i" ersetzt werden.
Ja, das war zu gut gemeint ... face-wink
Warum wird nichts ausgeführt wenn ich ein Doppelklick auf die Batch-Datei mache?
Soferne Du beide %iauf %%i geändert hast, könnte es eigentlich nur daran liegen, dass nur wenige Ordner betroffen sind und daher der Batch zu schnell durchläuft - Du kannst aber (nur zum Testen) einfach noch eine Zeile
pause
anfügen - dann bleibt das Batchfenster offen, bis Du eine Taste gedrückt hast.

Damit dann, wenn alles soweit passt, tatsächlich gelöscht wird, ist natürlich das "echo" zu entfernen.

Grüße
bastla
eduardp
eduardp 28.10.2010 um 14:53:08 Uhr
Goto Top
Hallo Bastla,

vielen Dank für die Hilfe. Es lag in der Tat jeweils am ersten fehlenden "%%i". Nachdem jetzt beide "%%i" lauten funktioniert es.
Was auch immer das %%i zu bedeuten hat und was auch immer der Unterschied zwischen einem und zwei % bedeutet.

Thx!
bastla
bastla 28.10.2010 um 16:59:45 Uhr
Goto Top
Hallo eduardp!
Was auch immer das %%i zu bedeuten hat und was auch immer der Unterschied zwischen einem und zwei % bedeutet.
Da Du Batches auf Server loslässt, finde ich diese Haltung etwas nonchalant ...

Was %i (= %%i in einem Batch, und nur dort) bedeutet, hast Du ja in der Ausgabe gesehen - ansonsten: "for /?"

Grüße
bastla