# Files löschen älter als 30 tage mit VB Script



## spsbändiger (28 April 2008)

Hallo,
möchte in einem Verzeichnis alle Dateien löschen die älter als z.b. 30 tage
sind.Ich benutze VB script unter WinCe.Mir fallen da im Moment nur sehr aufwendige Lösungen ein.Gibts da nicht einen einfachen Befehl(e)?
Dank Euch!


----------



## vierlagig (1 Mai 2008)

geklaut


```
*
Sub Main()
    Dim iTage As Integer
    'wieviele Tage die Datei alt sein muss
    iTage = 30
    LoescheDateien iTage
End Sub


Private Sub LoescheDateien(ByVal Tage As Integer)
    'Diese Routine löscht alle Text-Dateien die sich
    'im aktuellen Programmverzeichnis befinden und älter
    'als x Tage sind
    'Parameter: Tage    wieviele Tage die Datei alt sein muss
    
    Dim FSO As Object
    Dim Datei As File
    Dim Dateien As Files
    Dim Ordner As Folder
    Dim sDateiName As String
    Dim sPfad As String
    Dim DateiDatum As Date

    Set FSO = CreateObject("Scripting.FileSystemObject")
    'zum aktuellen Datum Tage addieren
    DateiDatum = DateAdd("D", -Tage, Format(Now, "dd.mm.yyyy"))
    sPfad = App.Path
    'Ordner festlegen
    Set Ordner = FSO.GetFolder(sPfad)
    Set Dateien = Ordner.Files
    'Pfad ohne Backslash am Ende formatieren
    If Right(sPfad, 1) = "\" Then sPfad = Left(sPfad, Len(sPfad) - 1)
    'Dateien im aktuellen Programmverzeichnis durchlaufen
    For Each Datei In Dateien
        'Dateipfad zusammensetzen
        sDateiName = sPfad + "\" + Datei.Name
        'nach Text-Dateien filtern
        If UCase(FSO.GetExtensionName(sDateiName)) = "TXT" Then
            'Dateien älter als Tage löschen
            If DateDiff("d", FileDateTime(sDateiName), Now) > Tage Then
                'löschen erzwingen
                FSO.DeleteFile sDateiName, True
            End If
        End If
    Next
    'Objekte zerstören
    Set Ordner = Nothing
    Set Dateien = Nothing
    Set FSO = Nothing
End Sub
```


----------



## spsbändiger (7 Mai 2008)

Ja,danke für deine Mühe!
Der Haken an der Sache ist nur das,das ja auf Win CE laufen soll!
Leider werden die von dir aufgezeigten Operationen da nicht unterstützt.
Soweit war ich nämlich auch schon.


----------



## vierlagig (8 Mai 2008)

spsbändiger schrieb:


> Leider werden die von dir aufgezeigten Operationen da nicht unterstützt.



hab kein CE zur Hand, welche Operationen werden denn nicht unterstützt?


----------



## strix.aluco (4 April 2016)

Hallo zusammen,

ich habe genau das selbe vor, wie spsbändiger. Will auf einem TP700 alte csv Dateien automatisch löschen.
Hab auch den Beitrag von Volker schon durch, aber komme da mit meinem Skript nicht recht voran. 
Bin soweit, dass ich eine einzelne Datei mit "kill" ablösche...

http://www.sps-forum.de/faq/15348-protool-winccflex-daten-lesen-schreiben-mit-vb-script.html

Ich hoffe mir kann jemand helfen


----------



## pvbrowser (19 Mai 2016)

Versucht es doch mal mit C bzw. C++

Hier 2 Links zu dem Thema:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365200(v=vs.85).aspx
http://stackoverflow.com/questions/9342789/how-to-get-file-modification-time-in-c-under-multiple-os


----------



## PN/DP (19 Mai 2016)

*WinCE: alte csv-Dateien löschen*


```
[COLOR="#008000"]'WinCE: alle csv-Dateien löschen, welche älter als 30 Tage sind[/COLOR]
[COLOR="#008000"]'(es wird nicht geprüft, ob ein Directory-Eintrag ein Ordner ist!)[/COLOR]
Dim fso, file, killDate

killDate = DateAdd("d", -30, Date)             [COLOR="#008000"]'Stichdatum: Datum 30 Tage vor heute[/COLOR]

Set fso = CreateObject("FileCtl.FileSystem")

file = fso.Dir("\Storage Card\*.csv")
Do While file <> ""                            [COLOR="#008000"]'wenn mindestens 1 Datei gefunden[/COLOR]
    If fso.FileDateTime(file) < killDate Then  [COLOR="#008000"]'und Dateizeitstempel älter als Stichdatum[/COLOR]
       fso.Kill file                           [COLOR="#008000"]'dann Datei löschen[/COLOR]
    End If
    file = fso.Dir()                           [COLOR="#008000"]'weitere Datei vorhanden?[/COLOR]
Loop
```

PS: das Skript funktioniert so noch nicht. Verbesserte Version siehe Beitrag #15

Harald


----------



## Tiamic (26 September 2018)

Hallo,

Ich möchte auch ältere Dateien auf einem USB-Stick (am Win CE Panel) löschen, aber leider werden die Befehle "FileDateTime" und "DateLastModified" nicht mehr unterstützt. :sad::sad:
Hat jemand einen Denkanstoß für mich. (Tia V15 ; TP1500 Comfort)
Danke


----------



## PN/DP (26 September 2018)

Tiamic schrieb:


> leider werden die Befehle "FileDateTime" und "DateLastModified" nicht mehr unterstützt. :sad::sad:


Wie kommst Du da drauf, wo steht das?

Harald


----------



## Tiamic (26 September 2018)

Hallo,
Das TP 1500 hatte eine entsprechende Systemmeldung ausgegeben. Auch der Editor im TIA stellte diese Befehle nicht zur Verfügung. Ich hatte mir auch Variablen angelegt, das Vergleichsdatum wurde gelesen aber nichts von den Dateien? 








Gruß Michael


----------



## Tiamic (9 Oktober 2018)

Hallo,
 leider hatte sich bei mir ein Schreibfehler eingeschlichen. Das "FileDateTime"-Objekt wird natürlich unterstützt.
Allerdings findet das Script aus Beitrag 7 keine Dateien (siehe Bild). 
Die Dateien auf meinem USB-Stick zeigen auf dem Webserver des Panels das Attribut "Read-only" an. Müsste ich dieses erst entfernen?
Danke.

Grüsse Michael

[FONT=&quot]
	

		
			
		

		
	



	

		
			
		

		
	
[/FONT]


----------



## PN/DP (9 Oktober 2018)

Werden denn Dateien angezeigt, wenn Du auf dem Stick bei einer Datei das Attribut "Read-only" entfernst? (oder Dateien ohne Schreibschutz drauf kopierst)
Kann es sein, daß die Pfadangabe zum USB-Stick beim TP1500 anders heißen muß? (z.B. "\Storage Card USB\*.csv" )
Oder probiere mal, gezielt Dateien mit Read-only Attribut anzuzeigen:

```
file = fso.Dir("\Storage Card\*.csv"[COLOR="#0000FF"][B], 1[/B][/COLOR]) [COLOR="#008000"]'Read-only-Dateien anzeigen[/COLOR]
```

Wenn Du eine schreibgeschützte Datei löschen willst, dann mußt Du (ziemlich sicher) das Read-only Attribut erst entfernen, siehe die Methoden GetAttr und SetAttr

Harald


----------



## Tiamic (9 Oktober 2018)

Jetzt habe ich festgestellt, das alle Dateien ( auch alle Archive auf der SD-Karte) in diesem Mini-Webbrowser, das Attribut "R" haben.:shock:
Beim Kunden ( TP1500er Panel mit V13) ist das nicht so! Auch auf meinem PG ( ist auch von "S....") wird kein Schreibschutz angezeigt !
Keine Ahnung was in der V15 anders ist, ich habe jedenfalls nirgendwo einen Schreibschutz eingestellt.:twisted:
Da ich im Moment kein weiteres Panel zum testen habe, war's das erst mal.:sad::sad:
Melde mich sobald ich weiter testen kann.
____________________________
Nachtrag:
Endlich fand ich Zeit um an meinem Problem der Dateilöschung weiter zu "testen". Ich beziehe mich auf das Script in Beitrag 7 !


Folgendes: 
Wenn ich die Zeile:  "file = fso.Dir("\Storage Card USB\*.csv")" so benutze, wird file gleich dem "tiefsten Pfad" auf meinem USB-Stick.
Und das ist bei mir ein vorhandenes Unterverzeichnis "SMARTSERVER" (dieses generiert sich selbständig).

Wenn ich die Zeile ändere in: "file = speicherort & "*.csv""  dann bleibe ich in dem richtigen Verzeichnis, mit den csv-Dateien und das Löschen funktioniert.
Danke Harald für die Denkanstöße!


Grüße Micha


----------



## FabianSPS (11 September 2019)

Hey Micha,

ich erhalte die gleiche Fehlermeldung wie du in Beitrag 11. Allerdings will ich nicht von einem USB-Stick sondern von der SD-Karte aus dem Unterordner "ProzessKopie" die alten CSV-Dateien löschen.

Wenn ich eine bestimmte Datei als Pfad angebe, wird diese auch gelöscht.

Benutze ich allerdings *.csv klappt das leider nicht mehr.

Kannst du mir mal deinen Pfad so wie du im Skript in Klartext angegeben hast, hier posten.

Danke im Voraus


----------



## PN/DP (19 September 2019)

```
[COLOR="#008000"]'WinCE: alle csv-Dateien löschen, welche älter als 30 Tage sind[/COLOR]
[COLOR="#008000"]'(es wird nicht geprüft, ob ein Directory-Eintrag ein Ordner ist!)[/COLOR]
[COLOR="#008000"]'(die Dateien dürfen nicht schreibgeschützt sein)[/COLOR]
Dim fso, file, killDate, path

killDate = DateAdd("d", -30, Date)             [COLOR="#008000"]'Stichdatum: Datum 30 Tage vor heute[/COLOR]

Set fso = CreateObject("FileCtl.FileSystem")

path = "\Storage Card SD\ProzessKopie\"
file = fso.Dir(path & "*.csv")

Do While file <> ""                            [COLOR="#008000"]'wenn mindestens 1 Datei gefunden[/COLOR]
    file = path & file                         [COLOR="#008000"]'dann Dateiname auf vollständigen Pfad erweitern[/COLOR]
    If fso.FileDateTime(file) < killDate Then  [COLOR="#008000"]'wenn Dateizeitstempel älter als Stichdatum[/COLOR]
       fso.Kill file                           [COLOR="#008000"]'dann Datei löschen[/COLOR]
    End If
    file = fso.Dir()                           [COLOR="#008000"]'weitere Datei vorhanden?[/COLOR]
Loop
```

Harald


----------

