TIA Dateien auf Panel in Abhängigkeit des Erstelldatums löschen

FabianSPS

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Ich verwende eine 1513F CPU und das TP 1500 comfort.

Aktuell erstelle ich über den Aufgabenplaner automatisch stündlich eine csv-Datei, die ich auf dem Touchpanel speichere. Das soll auch so bleiben.

Ich möchte gerne nur die Dateien auf dem Panel behalten, die nicht älter als z.B. 4 Wochen sind. Alle anderen sollen gelöscht werden, da sonst die SD-Karte vollläuft und das Panel beginnt langsamer zu werden.

Hat da jemand ne Idee, wie man das per Skript umsetzen kann? Auch andere Umsetzungsmöglichkeiten sind gerne gesehen.

Vielen Dank im Voraus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für den Hinweis, jedoch klappt da irgendwas nicht richtig beim Heraussuchen der Dateien.

Es wird keine Datei gefunden und dies wird als Meldung in der HMI angezeigt.

Die CSV-Dateien liegen auf der SD-Karte im Ordner ProzessKopie. In diversen anderen Ordner auf der SD-Karte liegen ebenfalls csv-Dateien, die nicht gelöscht werden sollen.

Vorraussetzugen sind: TP1500 comfort

Code:
Call ShowSystemAlarm("Delete old Prozessfiles is started.")

Dim fso, file, killDate

Datensicherung_Datum = Date                        'DEBUG: aktuelles Datum

killDate = DateAdd("d", -30, Date)              'Stichdatum: Datum 30 Tage vor heute

Datensicherung_Datum_1 = killDate                'DEBUG: Datum vor dem gelöscht werden muss

Set fso = CreateObject("FileCtl.FileSystem")

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

Datensicherung_name = file                        'DEBUG: Anzeige welchen File er löscht

Do While file <> ""                             'wenn mindestens 1 Datei gefunden
    
    If fso.FileDateTime(file) < killDate Then   'und Dateizeitstempel älter als Stichdatum
       fso.Kill file                            'dann Datei löschen
    End If
    file = fso.Dir()                             'weitere Datei vorhanden?
Loop

Call ShowSystemAlarm("Delete old Prozessfiles is finished.")

Findet jemand den Fehler?
 
Zuletzt bearbeitet:
Der Slot, wo Deine Speicherkarte drin steckt, heißt der "Storage Card SD"?
Wird die SD-Karte erkannt? Ist sie vielleicht zu groß (zu viele GB)?
Heißt der Ordner wirklich "ProzessKopie"? Ist er wirklich "ganz oben" im Hauptverzeichnis der SD-Karte?
Wird überhaupt eine Datei oder Ordner auf der SD-Karte erkannt? Probiere mal das Skript so:
Code:
[COLOR="#FF0000"]Call[/COLOR] ShowSystemAlarm[COLOR="#FF0000"]([/COLOR]"Delete old Prozessfiles is started."[COLOR="#FF0000"]) 'ShowSystemAlarm besser ohne Call und ohne Klammern[/COLOR]

Dim fso, file, killDate

Datensicherung_Datum = Date                        'DEBUG: aktuelles Datum

killDate = DateAdd("d", -30, Date)              'Stichdatum: Datum 30 Tage vor heute

Datensicherung_Datum_1 = killDate                'DEBUG: Datum vor dem gelöscht werden muss

Set fso = CreateObject("FileCtl.FileSystem")

[COLOR="#0000FF"]file = fso.Dir("\Storage Card SD\*.*")[/COLOR]
[COLOR="#0000FF"]ShowSystemAlarm "Erste Datei: '" & file & "' gefunden"[/COLOR]

Datensicherung_name = file                        'DEBUG: Anzeige welchen File er löscht [COLOR="#FF0000"](zeigt hier nur den ersten Dateiname an)[/COLOR]

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

[COLOR="#FF0000"]Call[/COLOR] ShowSystemAlarm[COLOR="#FF0000"]([/COLOR]"Delete old Prozessfiles is finished."[COLOR="#FF0000"]) 'ShowSystemAlarm besser ohne Call und ohne Klammern[/COLOR]
Ich habe kein Comfort Panel. Haben die Comfort Panels wirklich keinen "Windows Explorer" an Bord? Damit könnte man sehen (und browsen), ob die Speicherkarte erkannt wird und was drauf ist.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die SD-Karte ist von Siemens und hat 512 MB.

Code:
ShowSystemAlarm("Delete old Prozessfiles is started.") 'ShowSystemAlarm besser ohne Call und ohne Klammern

Dim fso, file, killDate

Datensicherung_Datum = Date                        'DEBUG: aktuelles Datum

killDate = DateAdd("d", -30, Date)              'Stichdatum: Datum 30 Tage vor heute

Datensicherung_Datum_1 = killDate                'DEBUG: Datum vor dem gelöscht werden muss

Set fso = CreateObject("FileCtl.FileSystem")

file = fso.Dir("\Storage Card SD\ProzessKopie\*.*")
Call ShowSystemAlarm ("Erste Datei: '" & file & "' gefunden")

Datensicherung_name  = file                        'DEBUG: Anzeige welchen File er löscht  (zeigt hier nur den ersten Dateiname an)

Do While file <> ""                             'wenn mindestens 1 Datei gefunden
    
    If fso.FileDateTime(file) < killDate Then   'und Dateizeitstempel älter als Stichdatum
       fso.Kill file                            'dann Datei löschen
       Datensicherung_Test = 666
    End If
    file = fso.Dir()                             'weitere Datei vorhanden?
Datensicherung_name = file                        'DEBUG: Anzeige  welchen File er löscht (zeigt hier nur den ersten Dateiname an)   

Loop

ShowSystemAlarm("Delete old Prozessfiles is finished.") 'ShowSystemAlarm besser ohne Call und ohne Klammern


Habe deinen Code jetzt übernommen und dann wurde mir als Ergebnis der Ordner "SmartServer" angezeigt. Danach habe ich die Defintion von "file" angepasst. Wenn ich das Skript nun ausführe und die if-Verzweigung auskommentiere, werden mir der Reihe nach alle Dateien im Ordner angezeigt. Soweit ist also denke ich alles super.

Sobald ich jedoch die if-Verzweigung wieder durchlaufen will, kommt folgende Meldung:

Anhang_4.jpg
Zeile 56: " If fso.FileDateTime(file) < killDate Then "

Es wurde keine Datei gelöscht.
 
Zuletzt bearbeitet:
Lies mal in dem Thread weiter, wo Du meinen Skript-Entwurf her hast: Files löschen älter als 30 tage mit VB Script
Ab Beitrag #11 beschreibt der User Tiamic quasi das gleiche Problem wie bei Dir, im Beitrag #13 berichtet er, daß er das Problem gelöst hat - ich verstehe allerdings seine Erklärung nicht so ganz ...

Ich vermute: file = fso.Dir("\Storage Card SD\ProzessKopie\*.csv") liefert bei WinCE nicht den kompletten Pfad der Dateien sonder nur den Dateiname (Dein Test mit der Dateinamen-Auflistung müsste Dir das eigentlich gezeigt haben), FileDateTime und Kill benötigen aber den kompletten Pfad. Versuche mal so:
Code:
[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
 
Ich vermute: file = fso.Dir("\Storage Card SD\ProzessKopie\*.csv") liefert bei WinCE nicht den kompletten Pfad der Dateien sonder nur den Dateiname (Dein Test mit der Dateinamen-Auflistung müsste Dir das eigentlich gezeigt haben)
ja, jetzt sehe ich das auf Deinem Bild: es wird nur der Dateiname ohne Pfad geliefert

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Harald. Das probiere ich morgen direkt aus.

Hatte den anderen Beitrag auch gelesen und dort nach der genauen Syntax gefragt, weil ich nicht das gewünschte Ziel erreicht hatte. Hatte seine Angabe, wie der file gebildet wird, allerdings nicht verstanden; daher hier nochmal nachgefragt.

EDIT: KLAPPT PERFEKT!!!! Danke
 
Zuletzt bearbeitet:
Zurück
Oben