TIA TIA 17 TP1500 Comfort Pro Ordner mit VB Skript löschen

Plox

Level-2
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

auf einem TP1500 Comfort Pro wird jeden Monat ein Ordner auf der intere Speicherkarte erstellt. Nach x Jahren sollen die Ordner gelöscht werden. Hierfür habe ich im Forum auch schon hilfreiche Beiträge gefunden, aber bei mir funktioniert das Löschen nicht.
Wenn ich die Zeile mit dem Löschen auskommentiere, wird die Schleife normal durchlaufen und wenn "Löschen Jahr_Monat" ausgegeben wird, müsste der Löschbefehl greifen.
ohne_Löschen.png

Wenn die Zeile mit dem Löschen des Ordners aktiv ist, bleibt das Skript hängen weil der Ordnerpfad nicht gefunden werden kann. Das verstehe ich aber nicht, weil die "FolderExist"-Funktion davor mit dem gleichen Ordnerpfad arbeitet und auch ein korrektes Ergebnis zurückgibt.
mit_Löschen.png

Hier mal ein Auszug aus meinem Code:
Code:
    JJJJ = CStr(JOrdner)
    'Ordner Monat 2-Zeichen
    If (MOrdner <10) Then
        MMOrdner = CStr("0" & MOrdner)
    Else
        MMOrdner = CStr(MOrdner)
    End If
   
    Ordnerpfad = "\Storage Card SD\" & JJJJ & "_" & MMOrdner & "\"
    ShowSystemAlarm Ordnerpfad
   
    Set fso = CreateObject("Scripting.FileSystemObject")
   
    'Wenn Ordner existiert
    If fso.FolderExists(Ordnerpfad) Then
        ShowSystemAlarm Ordnerpfad & "existiert"
        'Löschbedingung
        If JAkt > JOrdner + 2 Or (JAkt = JOrdner + 2 And MAkt >= MOrdner) Then
            ShowSystemAlarm "Löschen" & JOrdner & "_" & MMOrdner
            ShowSystemAlarm Ordnerpfad
            fso.DeleteFolder(Ordnerpfad)
        End If
    Else
    ShowSystemAlarm Ordnerpfad & "existiert nicht"      
    End If

Ich habe auch bereits versucht den Ordnerpfad fest vorzugeben, aber mit dem gleichen Ergebnis...
Ordnerpfad = "\Storage Card SD\2021_01\"

Kann mir jemand einen Tipp geben wo ich noch einen Fehler habe?
Danke schonmal im Voraus!

Grüße!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist so ein Windows <-> Windows CE Ding. Das Kill gibt es bei diesem Objekt nicht, bzw. im TIA auch nicht angeboten.

Da kommt dann folgende Meldung:
1705063740612.png
Nicht wundern wegen file oder fso, wie im Startbeitrag. Hatte zwischendurch versucht ein extra Obejekt "file" anzulegen...
 
Zuletzt bearbeitet:
Hier der komplette Code

Code:
Dim JAkt, MAkt, MMAkt, JOrdner, JJJJ, MOrdner, MMOrdner, Ordnerpfad, fso, file

'Aktuelles Jahr
JAkt = Year(Now)
MAkt = Month(Now)
'Aktueller Monat 2-Zeichen
MAkt = (DatePart("m",Now()))
If (MAkt <10) Then
    MMAkt = CStr("0" & MAkt)
Else
    MMAkt = CStr(MAkt)
End If

JOrdner = 2020
MOrdner = 1

Do While JAkt > JOrdner Or (JAkt = JOrdner And MAkt >= MOrdner)
    JJJJ = CStr(JOrdner)
    'Ordner Monat 2-Zeichen
    If (MOrdner <10) Then
        MMOrdner = CStr("0" & MOrdner)
    Else
        MMOrdner = CStr(MOrdner)
    End If
   
    Ordnerpfad = "\Storage Card SD\" & JJJJ & "_" & MMOrdner & "\"
    ShowSystemAlarm Ordnerpfad
   
    Set fso = CreateObject("Scripting.FileSystemObject")
       
    'Wenn Ordner existiert
    If fso.FolderExists(Ordnerpfad) Then
        ShowSystemAlarm Ordnerpfad & "existiert"
        'Löschbedingung
        If JAkt > JOrdner + 2 Or (JAkt = JOrdner + 2 And MAkt >= MOrdner) Then
            ShowSystemAlarm "Löschen" & JOrdner & "_" & MMOrdner
            ShowSystemAlarm Ordnerpfad
            fso.DeleteFolder(Ordnerpfad)
            'fso.kill(Ordnerpfad)
        End If
    Else
    ShowSystemAlarm Ordnerpfad & "existiert nicht"      
    End If
   
    'Jahr/Monat erhöhen
    If MOrdner >= 12 Then
        MOrdner = 1
        JOrdner = JOrdner + 1
    Else
        MOrdner = MOrdner + 1
    End If
   
ShowSystemAlarm JOrdner & "_" & MOrdner
   
Loop

Ich arbeite nur mit der PC-Runtime weil wir noch in der Offline-Programmierung sind und die Hardware noch nicht da ist.
Mit fso.Kill geht das Kompilieren und die Runtime wird auch normal gestartet. Bei Ausführung des Skripts kommt dann aber der Fehler wie im Beitrag 3 beschrieben.
Danke aber für deine Hilfe
 
Wieviel willst Du da schreiben und wieso löschen? Reicht da keine 2GB Karte für 5 Jahre? Nach 5 Jahren sollte man die eh mal wechseln, wenn da was wichtiges drauf ist...
Und wenn die Uhr vom Panel mal nicht stimmt, wird vielleicht irrtümlich gelöscht...
 
....aber bei mir funktioniert das Löschen nicht.
Wenn ich die Zeile mit dem Löschen auskommentiere, wird die Schleife normal durchlaufen und wenn "Löschen Jahr_Monat" ausgegeben wird, müsste der Löschbefehl greifen.

Wenn die Zeile mit dem Löschen des Ordners aktiv ist, bleibt das Skript hängen weil der Ordnerpfad nicht gefunden werden kann. Das verstehe ich aber nicht, weil die "FolderExist"-Funktion davor mit dem gleichen Ordnerpfad arbeitet und auch ein korrektes Ergebnis zurückgibt.

Code:
    Ordnerpfad = "\Storage Card SD\" & JJJJ & "_" & MMOrdner & "\"

Ich habe auch bereits versucht den Ordnerpfad fest vorzugeben, aber mit dem gleichen Ergebnis...
Ordnerpfad = "\Storage Card SD\2021_01\"

Kann mir jemand einen Tipp geben wo ich noch einen Fehler habe?
:unsure:
Ich würde vermuten, das der letzte Backslash im Ordner-Namen beim Löschen stört.

Vlt. einfach mal das letzte AND auskommentieren:
Code:
 Ordnerpfad = "\Storage Card SD\" & JJJJ & "_" & MMOrdner ' & "\"
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich arbeite nur mit der PC-Runtime
Gib mal im Windows Explorer in der Adresszeile "\Storage Card SD\2021_01\" ein - findet der Explorer den Ordner?
Hat Dein Test-PC evtl. mehrere Laufwerke (C: D: ...)?
Gib mal den Laufwerksbuchstabe mit an im Pfad, z.B. "C:\Storage Card SD\2021_01\" oder "C:\Storage Card SD\2021_01"
 
:unsure:
Ich würde vermuten, das der letzte Backslash im Ordner-Namen beim Löschen stört.

Vlt. einfach mal das letzte AND auskommentieren:
Code:
 Ordnerpfad = "\Storage Card SD\" & JJJJ & "_" & MMOrdner ' & "\"
Das wars! Danke!
Komisch nur, dass die Existiert-Funktion den Ordner gefunden hat...
Wie von PN/DP vorgeschlagen hatte ich auch geschaut ob der Pfad im Explorer gefunden werden kann, was auch der Fall war.

Jetzt muss ich nur noch schauen wie es dann an der richtigen Visu läuft...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen, ich habe jetzt das Skript auf der richtigen Visu ausprobiert und die Befehle auf das Windows CE angepasst.
Auszug:
Code:
Set fso = CreateObject("FileCtl.FileSystem")
        
    'Wenn Ordner existiert
    If Not fso.Dir(Ordnerpfad, 16) = "" Then
        ShowSystemAlarm Ordnerpfad & " existiert"
        'Löschbedingung
        If JAkt > JOrdner + 2 Or (JAkt = JOrdner + 2 And MAkt >= MOrdner) Then
            ShowSystemAlarm "Löschen " & JOrdner & "_" & MMOrdner
            ShowSystemAlarm Ordnerpfad
                        
            fso.setattr Ordnerpfad, 0 ' Quelldatei auf 'Normal' setzen
            
            fso.kill Ordnerpfad
        End If
    Else
        ShowSystemAlarm Ordnerpfad & " existiert nicht"        
    End If
Die If-Schleifen funktionieren, weil mir die entsprechenden Infos als Systemmeldung ausgegeben werden.
Das Skript bleibt beim kill-Befehl hängen mit der Info in der Systemmeldung "Access is denied". Deswegen hatte ich auch die Zeile mit "fso.setattr Ordnerpfad, 0 ' Quelldatei auf 'Normal' setzen" reingebracht weil ich dachte der Ordner wäre schreibgeschützt. Hat aber auch nix gebracht.

Ich habe während die Runtime lief versucht den Ordner im Explorer zu löschen - ging ohne Probleme.
Habt ihr vielleicht noch eine Idee warum ich der Zugriff auf den Ordner verweigert wurde?
 
Hab' mal in mein schlaues "VBScript WinCE FileSystemControls"-pdf geschaut.
Da steht u.a.:
Kill
This method deletes files from a disk.
...
Remarks
The Kill method supports the use of multiple-character (*) and single-character (?) wildcards to specify multiple files.
RmDir
This method deletes an existing empty directory.

Du musst also vermutlich:
erst mit fso.kill Ordnerpfad & "\*.*" den Ordner leeren und
dann mit fso.RmDir Ordnerpfad den Ordner selbst löschen.
 

Anhänge

  • VBScript WinCE FileSystemControls.pdf
    83,5 KB · Aufrufe: 4
Zuletzt bearbeitet:
Zurück
Oben