Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: VB Script - Unterordner und Datei erstellen

  1. #1
    Registriert seit
    26.04.2011
    Beiträge
    37
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich möchte einen Ordner mit Unterordner erstellen und dort Eine CSV Datei. Es klappt auch fast. Beim ausführen des Scriptes erstellt er die Ordner aber es kommt der Fehler " Fehler 53 die Datei wurde nicht gefunden". Wenn ich das Script das zweite mal ausführe ist alles in Ordnung.

    Code:

    Code:
    jahr = Year(Now)
    monat = MonthName(Month(Now))
    
    ordner = "C:\Users\HundH\Documents\Tagesverbrauch" & jahr & "" & monat 
    datei="C:\Users\HundH\Documents\Tagesverbrauch" & jahr & "" & monat & "" & Date & ".csv"
    
    
        'Catch errors -- Fehler abfangen
        On Error Resume Next
    
        'Create object -- Objekt erstellen
        Set fso = CreateObject("Scripting.FileSystemObject")
    
            If Err.Number <> 0 Then
                ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
                Err.Clear
                Exit Sub
        End If
        
        ' If no Folder exists, create a new one -– Ordner erstellen, wenn keines vorhanden
        If Not fso.FolderExists(ordner) Then
            'fso.CreateFolder ordner
            Set objShell = CreateObject("WScript.Shell") 
            objShell.Run("cmd.exe /C mkdir " & ordner )
        End If
        
        ' If no file exists, create a new one -– Datei erstellen, wenn keine vorhanden
        If Not fso.FileExists(datei) Then
            fso.CreateTextFile datei
        End If
    
        Set f = fso.GetFile(datei)
        If Err.Number <> 0 Then
            ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
            Err.Clear
            Exit Sub
        End If
    
        Set ts = f.OpenAsTextStream(2, -2)
        ' mode "8" to append to file
        If Err.Number <> 0 Then
            ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
            Err.Clear
            Exit Sub
        End If
    Wo ist der Fehler?

    Danke für die Hilfe
    Geändert von aleXandroW (29.01.2016 um 09:28 Uhr)
    Zitieren Zitieren VB Script - Unterordner und Datei erstellen  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.207
    Danke
    927
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Vermutlich mußt Du zwischen dem Aufruf des cmd.exe und dem nachfolgenden fso.FileExists ein Weilchen (~ 1s) warten.
    Warum erstellst Du den Ordner nicht mit fso.CreateFolder?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    Registriert seit
    26.04.2011
    Beiträge
    37
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Mit fso.CreateFolder spuckt er Fehler aus wegen den Unterordnern. Kenne die Synthax dafür nicht.

    Wie kann ich da eine Wartezeit einbauen?

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Du kannst mit CreateFolder nicht eine ganze Ordnerstruktur auf einen Schlag erstellen (das kann nur .Net in seinem Framework) sondern erst Haupt-Ordner, dann Unter-Ordner im Haupt-Ordner und dann Unter-Unter-Ordner in Haupt-Ordner\Unter-Ordner.
    Den CMD-Befehl solltest du dir verkneifen wo immer du es kannst. Immer am Besten mit eingelagerten befehlen arbeiten ...

    Gruß
    Larry

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.207
    Danke
    927
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Zitat Zitat von aleXandroW Beitrag anzeigen
    Mit fso.CreateFolder spuckt er Fehler aus wegen den Unterordnern. Kenne die Synthax dafür nicht.
    Unterordner müssen Schritt für Schritt erzeugt werden, z.B.
    Code:
    fso.CreateFolder "C:\Users"
    fso.CreateFolder "C:\Users\HundH"
    fso.CreateFolder "C:\Users\HundH\Documents"
    fso.CreateFolder "C:\Users\HundH\Documents\Tagesverbrauch"

    Zitat Zitat von aleXandroW Beitrag anzeigen
    Wie kann ich da eine Wartezeit einbauen?
    Code:
    ' If no Folder exists, create a new one -– Ordner erstellen, wenn keines vorhanden
    If Not fso.FolderExists(ordner) Then
      'fso.CreateFolder ordner
      Set objShell = CreateObject("WScript.Shell")
      objShell.Run("cmd.exe /C mkdir " & ordner )
    
      breaktime = Now + #00:00:02#  'TimeSerial(0, 0, 2) 'max bis Jetzt+2 Sekunden warten
      Do While Not fso.FolderExists(ordner)
        If (Now > breaktime) Then Exit Sub  'Notausgang bei Überschreitung Wartezeit
      Loop
    End If
    PS: kann es sein, daß man bei dem Aufruf des CMD ganz kurz das CMD-Fenster aufflackern sieht? Unschön.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    Registriert seit
    26.04.2011
    Beiträge
    37
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja man sieht das CMD-Fenster aufflackern. Ich probiere es mal mit Schritt für Schritt Erstellung

  7. #7
    Registriert seit
    26.04.2011
    Beiträge
    37
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok. Das funktioniert jetzt mit Ordner nacheinander erstellen.

    Jetzt habe ich noch ein kleines Problem. Ich möchte gerne in der CSV Datei die Überschriften erstellen und danach die Werte nacheinander einfügen. Sprich die Überschrift bleibt immer bestehen und die Werte werden hinzugefügt.
    Ich arbeite mit einer PC Runtime. Mein Code klappt noch nicht ganz.

    Code:
    Code:
    If Not fso.FileExists(datei) Then
            fso.CreateTextFile datei
            
            breaktime = Now + #00:00:02#
            
            Do While Not fso.FolderExists(ordner)
                If (Now > breaktime) Then Exit Sub  'Notausgang bei Überschreitung Wartezeit
            Loop
            
            Set f = fso.GetFile(datei)
            If Err.Number <> 0 Then
                ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
                Err.Clear
                Exit Sub
            End If
    
            Set ts = f.OpenAsTextStream(8, -2)
            ' mode "8" to append to file
            ' mode "2" to overwriting file
            If Err.Number <> 0 Then
                ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
                Err.Clear
                Exit Sub
            End If
            
            ts.WriteLine "Datum: " & Date
            ts.WriteLine
            ts.WriteLine "Zeit" & semi & "Rezept" & semi & "Menge"
            ts.WriteLine
             ts.WriteLine uhrzeit_start & " - " & uhrzeit_ende &  semi & SmartTags("DB_HMI_STRING_BEARBEITETES_REZEPT") & semi  & SmartTags("m_formzaehler")
            f.Close
        End If
        
        
        If  fso.FileExists(datei) Then
            Set f = fso.GetFile(datei)
            If Err.Number <> 0 Then
                ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
                Err.Clear
                Exit Sub
            End If
    
            Set ts = f.OpenAsTextStream(8, -2)
            ' mode "8" to append to file
            ' mode "2" to overwriting file
            If Err.Number <> 0 Then
                ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
                Err.Clear
                Exit Sub
            End If
            
            ts.WriteLine "test"
        End If    
        
        
        'Tidy up -- Aufraeumen
        f.Close
        Set ts = Nothing
        Set f = Nothing
        Set fso = Nothing
        ShowSystemAlarm "Storage of the data was successful!"
    Geändert von aleXandroW (29.01.2016 um 09:29 Uhr)

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.207
    Danke
    927
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Zitat Zitat von aleXandroW Beitrag anzeigen
    Mein Code klappt noch nicht ganz.
    Dein Code sieht so aus als würdest Du das allererste Mal mit VBS Dateien schreiben.
    Halte Dich mal an folgendes Grundgerüst:
    Code:
    'VBS für Windows
    'Grundgerüst Datensätze schreiben in csv-Datei
    
    Dim fso, f, t, jahr, monat, datum, cdatum, cuhrzeit, ordner, datei
    
    t = Now  'Uhrzeit einmalig erfragen
    jahr  = DatePart("yyyy", t)  ' "2016"
    monat = Right("0" & DatePart("m", t), 2) & "_" & MonthName(Month(t))  ' "01_Januar"
    datum = DatePart("yyyy", t) & Right("0" & DatePart("m", t), 2) & Right("0" & DatePart("d", t), 2)  ' "20160128"
    
    cdatum   = Right("0" & DatePart("d", t), 2) & "." & Right("0" & DatePart("m", t), 2) & "." & DatePart("yyyy", t)  ' "28.01.2016"
    cuhrzeit = Right("0" & DatePart("h", t), 2) & ":" & Right("0" & DatePart("n", t), 2) & ":" & Right("0" & DatePart("s", t), 2)  ' "17:06:00"
    
    ordner = "C:\TEMP\Tagesverbrauch_" & jahr & "_" & monat  ' "...\Tagesverbrauch_2016_01_Januar"
    datei  = ordner & "\" & datum & ".csv"
    
    '*** Catch errors -- Fehler abfangen
    On Error Resume Next
    
    '*** Create object -- Filesystemobjekt erstellen
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If Err.Number <> 0 Then
      ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
      Err.Clear
      Exit Sub
    End If
    
    
    '*** Ordner erstellen, wenn noch nicht vorhanden
    If Not fso.FolderExists(ordner) Then
      fso.CreateFolder ordner  'Unterordner ggf in mehreren Schritten
    End If
    
    If Err.Number <> 0 Then
      ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
      Err.Clear
      Exit Sub
    End If
    
    
    '*** Wenn Datei noch nicht vorhanden, dann neu anlegen und Kopfzeile schreiben
    If Not fso.FileExists (datei) Then 
      Set f = fso.CreateTextFile(datei, True)
      f.WriteLine "Datum;Uhrzeit;MyVar_1;MyVar_2" 'Kopfzeile
      f.Close
    End If
    
    If Err.Number <> 0 Then
      ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
      Err.Clear
      Exit Sub
    End If
    
    '*** csv-Datenzeile in Datei schreiben
    ' mode "8": append to file
    If fso.FileExists (datei) Then
      Set f = fso.OpenTextFile(datei, 8)
      f.WriteLine Chr(34) & cdatum & Chr(34) & ";" & Chr(34) & cuhrzeit & Chr(34) & ";" _
                  & SmartTags("MyVar_1") & ";" & SmartTags("MyVar_2")
      f.Close
    End If
    
    If Err.Number <> 0 Then
      ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
      Err.Clear
      Exit Sub
    End If
    
    ShowSystemAlarm "csv-Daten erfolgreich geschrieben!"
    Siehe auch mal FAQ: Protool/WinCCflex Daten lesen / schreiben mit VB-Script
    und WinCC flexible Skript Daten archivieren: Aktualisierungszeit der Variablen

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 920 Danke für 740 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @aleXandroW
    In der unteren Icon-Reihe des Beitrageditors gibt's ganz rechts den Button #. Der erstellt die Code-Tags.
    Wenn Du Deinen Programmauszug darin einbettest, wird er so besser hervorgehoben, wie Du es in Haralds Beitrag sehen kannst.

    Wäre gut, wenn Du das auch noch in Deinen obigen Beiträgen nachholst, weil sie dann besser lesbar werden.
    Einfach den Programmauszug markieren, Button drücken - fertig.

Ähnliche Themen

  1. Step 7 Wincc Flex Datei erstellen und schreiben
    Von Junge im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 15.09.2015, 20:31
  2. WCf: per script neuesten order und datei finden
    Von Manfred Stangl im Forum HMI
    Antworten: 1
    Letzter Beitrag: 01.07.2015, 06:52
  3. Antworten: 15
    Letzter Beitrag: 14.04.2015, 20:58
  4. WinCC v13 Unterordner erstellen bei HMI-Meldungen
    Von themenstarter234 im Forum HMI
    Antworten: 2
    Letzter Beitrag: 31.07.2014, 18:23
  5. Script erstellen und projektieren
    Von bra_elo im Forum HMI
    Antworten: 6
    Letzter Beitrag: 16.07.2010, 16:11

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •