vbs: nur neueste dateien behalten

Diskutiere vbs: nur neueste dateien behalten im Developer Network Forum im Bereich Hardware & Software Forum; ich hab mal ne kleine frage, die einige von euch wahrscheinlich in nullkommanix beantworten können: ich habe folgende vbs: Option Explicit...
  • vbs: nur neueste dateien behalten Beitrag #1
haiko

haiko

Bekanntes Mitglied
Dabei seit
09.01.2003
Beiträge
4.727
Reaktionspunkte
1
Ort
Kempten
ich hab mal ne kleine frage, die einige von euch wahrscheinlich in nullkommanix beantworten können:

ich habe folgende vbs:
Code:
Option Explicit
Dim intZahl 
Dim strExtension 
Dim intTage 
Dim objDatei  
Dim objFSO  
Dim objOrdner  
Dim strOrdner 
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
strOrdner = "\\MyBookLive\Acronis"
strExtension = "TIB"
intTage = 3
 
Set objOrdner = objFSO.GetFolder(strOrdner)
intZahl = 0
For Each objDatei In objOrdner.Files
    If LCase(Right(objDatei.name, Len(strExtension))) = LCase(strExtension) _
        And DateDiff("d", objDatei.DateCreated, Now) > intTage Then
        objDatei.Delete
        intZahl = intZahl + 1
    End If
Next

objFSO.MoveFile "E:\AcronisBackupTemp\*.TIB", "\\MyBookLive\Acronis"

das ganze funktioniert soweit ganz gut (löscht dateien im zielverzeichnis, die älter als 3 tage sind und verschiebt neue dateien in das zielverzeichnis).

jetzt würde ich aber gern das löschen nicht auf das absolute alter beziehen (älter als 3 tage), sondern es sollen immer die drei neuesten dateien behalten werden unabhängig vom dateialter.

hat jemand eine ahnung wie ich das am besten lösen kann?
 
  • vbs: nur neueste dateien behalten Beitrag #2
counterstrike17

counterstrike17

Bekanntes Mitglied
Dabei seit
29.05.2010
Beiträge
720
Reaktionspunkte
0
Ort
Bayern
ich kann jetz kein vb würde aber sagen dass du intTage = 3
durch etwas wie intLetzteDrei = "Definition der 3 letzten" ersetzen muss.
Hoffe du konntest folgen
 
  • vbs: nur neueste dateien behalten Beitrag #3
haiko

haiko

Bekanntes Mitglied
Dabei seit
09.01.2003
Beiträge
4.727
Reaktionspunkte
1
Ort
Kempten
ich kann jetz kein vb würde aber sagen dass du intTage = 3
durch etwas wie intLetzteDrei = "Definition der 3 letzten" ersetzen muss.
Hoffe du konntest folgen

schon klar, aber das ist ja die frage. wie geht das unter vb? wie lass ich alles löschen ausser den 3 aktuellsten?
hab schon überlegt das irgendwie mit nem array zu lösen, aber dazu müßt ich mich dann erst mehr mit vbs beschäftigen
 
  • vbs: nur neueste dateien behalten Beitrag #4
the ubm

the ubm

Senior Moderator
Dabei seit
29.05.2005
Beiträge
9.464
Reaktionspunkte
1
Wenn du weißt wie Arrays gehen, machst du einfach ein Array, schreibst in dieses die Datums + Dateiname, sortierst dieses nach Dateidatum absteigend und beginnst mit dem Löschen des 3. Elements im Array.
 
  • vbs: nur neueste dateien behalten Beitrag #5
haiko

haiko

Bekanntes Mitglied
Dabei seit
09.01.2003
Beiträge
4.727
Reaktionspunkte
1
Ort
Kempten
noch weiß ich nicht wie arrays in vb gehn oder wie man das dann sortiert, aber das finde ich auch noch raus :)

hatte halt gehofft, irgendjemand hier hat ahnung von vbs und ich kann mir das suchen und rumprobieren ersparen ;)
 
  • vbs: nur neueste dateien behalten Beitrag #6
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Hab kurz nachgesehen; VBScript hat offenbar keine eingebaute Funktion zum Sortieren. Du könntest dir aber natürlich einen einfachen Sortieralgorithmus für Arrays besorgen, oder das ganze auch ohne Arrays direkt hier einbauen.

Eine Möglichkeit wäre, zuerst die drei neuesten Dateien zu suchen, und dann alle anderen zu löschen.
D.h. einfach eine Liste (drei Variablen) für die drei neuesten Dateien. Die Schleife läuft durch und fügt den Namen der aktuellen Datei an passender Stelle in die Liste ein, wobei sie ggfs. die existierenden Felder (also das zu ersetzende und die älteren) nach hinten verschiebt. Das passiert dann, wenn das Datum der aktuellen Datei neuer ist als das der Datei an der besagten Stelle in der Liste, oder der Listenplatz noch frei ist.
Dann einfach nochmal die Liste durchgehen und die Dateien löschen, wenn sie nicht in der Liste stehen.
Weniger elegant aber einfacher: Du kannst natürlich auch einfach dreimal alle Dateien durchgehen. Zuerst findest du die neueste Datei (einfach mit der ersten initialisieren und updaten wenn die aktuelle Datei neuer ist). Beim zweiten Durchlauf machst du das gleiche, aber lässt die vorher gefundene Datei aus; damit kriegst du die zweit-neueste. Dritter Schritt dann analog (erste und zweite auslassen).

Sinnvollerweise sollte die Suche natürlich ausgiebigst getestet werden, bevor man den Teil mit der Löschung implementiert. ;)
 
Thema:

vbs: nur neueste dateien behalten

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.171
Mitglieder
55.876
Neuestes Mitglied
RamiroGarn
Oben