52106
Goto Top

Script zum löschen von Ordnern im Format jjjjttmmstdstdminmin, die älter als 14 Tage sind

Guten Tag,

ich benötige folgendes Script: Script zum löschen von Ordnern im Format jjjjttmmstdstdminmin, die älter als 14 Tage sind. Kann mir dazu jemand eine Vorlage schreiben? Danke

Content-Key: 159470

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

Printed on: April 26, 2024 at 22:04 o'clock

Member: bastla
bastla Jan 26, 2011 at 12:50:02 (UTC)
Goto Top
Hallo SBong1!

Das Namensformat enthält tatsächlich den Tag vor dem Monat?

Grüße
bastla
Mitglied: 60730
60730 Jan 26, 2011, updated at Oct 18, 2012 at 16:45:38 (UTC)
Goto Top
Servus,

warum sollen wir dir eine Vorlage schreiben?
Pass dir doch eine von an face-wink
@bastla: Ich bewundere deine Geduld - oder ist dein Lieblingsfilm der mit dem Murmeltier tanzt? *duck*

Gruß
Member: bastla
bastla Jan 26, 2011, updated at Oct 18, 2012 at 16:45:38 (UTC)
Goto Top
@t-mo
Soferne die Antwort auf meine obige Frage "ja" ist und der Name als Kriterium dienen soll, wird's etwas knifflig (und das war der für mich interessante Teil face-wink) ...

... ansonsten hast du allerdings recht mit Deinem Vorschlag (dem ich noch, für den Fall dass doch nicht anhand des Dateinamens gelöscht werden soll, einen Tipp sowie den ergänzenden Hinweis auf "WasFile 2.2" - gleichfalls auf der verlinkten Seite zu finden - hinzufüge).

Grüße
bastla
Mitglied: 52106
52106 Jan 26, 2011 at 13:59:58 (UTC)
Goto Top
Also, ich schildere euch mein Problem mal Detail. Ich habe zwei Buffalo NAS GEräte im Einsatz. NAS1 macht um 20.00 auf NAS2 ein Backup über die integrierte Backup funktion der Linux Distri, welche auf den NAS-Station installiert ist. Wenn ich mir nun die BAckup Freigabe als Netzlaufwerk in meinem Windows PC mappe, dann ist der TimeStamp der autom. angelegten Backup Ordner (Format: jjjjttmmstdstdminmin) nicht aktuell sondern er steht bei jedem Ordner "geändert am 11.08.2009". Buffalo Support kann mir auch keinen Lösung nenne, da es meiner Meinung nach an der Inkompatibälität Linux-Windows liegt.
Ich habe es zuvor schon mit delage32 etc. probier, was aber aufgrund des falschen Timestamp nicht funktioniert.

Nun brauche ich ein Script/.bat Datei um eine Vernünftige Lösung und ein autom. Löschen durchführen zu können.
Ich frage auch nur, da ich der Anwendungsentwicklung nicht so mächtig bin und ich mir selber mit zusammen gebastelten Lösungen nicht mehr helfen kann. Brauche dies aber dringend für 3 Standorte.
Vielen dank im Voraus.
Mitglied: 60730
60730 Jan 26, 2011 at 14:19:20 (UTC)
Goto Top
Zitat von @52106:
Also, ich schildere euch mein Problem mal Detail.iert?

  • wenn du jeden Tag einen neuen Ordner anlegst und du willst nur die Ordner (Bäckubz) der letzten 14 Tage behalten, dann wäre es doch logisch, alle Ordner - bis auf die 14 letzten in den Orkus zu kicken.
(Wobei sich da schon meine Nackenhaare sträuben, Bäckubz auf Büffaloh und dann alles älter als 14 Tage in den Orkus jagen - das ist ja Beihilfe)

Brauche dies aber dringend für 3 Standorte.

Nee sorry - aber das trinkende Reizwort in Verbindung mit so einer (Bastla möge mir verzeihen) Banalfrage "skip=14" - da tick ich aus .-(

Warum denken so viele eigentlich - wenn schon nicht richtig, dann per Batch und am besten schnell von anderen bauen lassen, weil man brauchst ja dringend für 3 Standorte oder 1000 Rechner...
Mit Batch kan man selber so schöne Sachen machen, aber diese Würgarounds da mach ich nicht mit
Member: bastla
bastla Jan 26, 2011 at 15:01:08 (UTC)
Goto Top
Hallo SBong1!

Das folgende VBScript simuliert den Löschvorgang nur - zumindest, solange der Löschbefehl in Zeile 13 durch das davor gestellte Kommentarzeichen ' deaktiviert ist:
Basis = "D:\Backup"  
Alter = 14

Behalten = "#"  
For i = Date To Date - Alter Step -1
    Behalten = Behalten & Year(i) & Right("0" & Day(i), 2) & Right("0" & Month(i), 2) & "#"  
Next
Entfernen = "Gelöscht würden:" & vbCrLf  
Set fso = CreateObject("Scripting.FileSystemObject")  
For Each Folder In fso.GetFolder(Basis).SubFolders
    If Instr(Behalten, "#" & Left(Folder.Name, 8) & "#") = 0 Then  
        Entfernen = Entfernen & vbCrLf & Folder.Path
        'Folder.Delete  
    End If
Next
WScript.Echo Entfernen
Die Zeilen 8, 12 und 16 sind im "Ernstfall" nicht erforderlich.

Kurz zum Ablauf: Da eine gewöhnliche Sortierung (wegen der umgekehrten Reihenfolge von Tag und Monat) nicht zielführend ist, wird in den Zeilen 5 bis 7 eine "Whitelist" (lässt sich mit einem zusätzlichen
WScript.Echo Behalten
nach Zeile 7 auch anzeigen) für die nicht zu löschenden Datumswerte (in der Schreibweise "jjjjttmm", wobei als Begrenzung jeweils ein "#" vor und nach dem Datum steht) erzeugt - jeder Ordner, dessen erste 8 Zeichen des Namens nicht einem Listeneintrag entsprechen, wird gelöscht (siehe Zeile 11).

Grüße
bastla

P.S.: @t-mo
Ich verzeihe umstandslos face-wink, allerdings: Ein "skip=14" setzt eine passende Sortierung voraus ...
Mitglied: 52106
52106 Jan 26, 2011 at 15:04:15 (UTC)
Goto Top
Sehr gut TimoBeil,

du scheinst meine Frage ja kompl. verstanden zu haben. Ich werde es mal in einem anderen Forum probieren.
Nur zur Info: Der Timestamp des NTFS Dateisystems wird nicht aktuell angezeigt, so dass ich mir leider mit einem Script, was alles älter als oder wie du es schreibst:
"wenn du jeden Tag einen neuen Ordner anlegst und du willst nur die Ordner (Bäckubz) der letzten 14 Tage behalten, dann wäre es doch logisch, alle Ordner - bis auf die 14 letzten in den Orkus zu kicken." nicht helfen kann.

Zudem weis ich nicht was an einem Backup von NAS zu NAS, die auch noch in unterschiedlichen Brandabschnitten stehen, jeweils mit einem RAID1 konfiguriert sind und eine versionierte Sicherung anlegen, falsch ist, aber du scheinst es ja zu wissen.
Respekt!!!
Mitglied: 52106
52106 Jan 26, 2011 at 15:42:42 (UTC)
Goto Top
Danke an \"bastla\" du hattest mit dem Format recht. Monat muss vor Tag. Habe alles angepasst und getestet. hat super funktioniert. Danke schön.
Mitglied: 60730
60730 Jan 26, 2011 at 16:42:49 (UTC)
Goto Top
Moin,
Zitat von @52106:
Sehr gut TimoBeil,

du scheinst meine Frage ja kompl. verstanden zu haben. Ich werde es mal in einem anderen Forum probieren.
Zum ersteren Ja habe ich - soweit man eine Frage, die in eine Zeile gepresst wurde - als Aussenstehender verstehen kann.
Zum zweiten: Solche "Erpressungsversuche" mag ich ja noch weniger, als das Wort Dringend.

Nur zur Info: Der Timestamp des NTFS Dateisystems wird nicht aktuell angezeigt, so dass ich mir leider mit einem Script, was
alles älter als oder wie du es schreibst:
Und da sehe ich den Unterschied zwischen diesem Forum und jenen Foren, wo man Haischecklogs postet.

Nix gegen Bastla und seine Lösung, aber das ist Works as Designed und ich behaupte, die Designvorgabe ist bescheiden.
Ich rsynce auch zwischen NASsen und da stimmt das Dateidatum - ob es an Buffalo oder an deinem Script oder an dem fehlenden NTP Server liegt - ich weiß es nicht und will es auch nicht wissen.

Denk mal drüber nach und wenn Bastlas Lösung deinen Ansprüchen genügt - bitte einen grünen Haken drankleben und mal ne Nacht über das Design schlafen.

Gruß