TIA Datei umbennen

TMaroni

Level-2
Beiträge
129
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte eine exportierte Datei (Protokoll), die mit dem PDF-Drucker ausgedruckt wurde umbennen.
Die Datei befindet sich auf einem PC (\\PCName\Ordner) und die Datei sieht so aus „Export_DD_MM_YYYY“. Die Datei soll nach dem Umbennen so aussehen „Anlage1_DD_MM_YYYY.
Hat jemand ein Beispiel wie man dies mit einem Skript machen kann?
Gruss
TMaroni
 
Auf welchem Gerät läuft Deine WinCC Runtime?

Idee, nicht getestet:
Code:
[COLOR="#008000"]' VBS Skript für TIA WinCC Advanced PC Runtime[/COLOR]
[COLOR="#008000"]' Datei umbenennen: "Export*" ---> "Anlage1*"[/COLOR]
[COLOR="#008000"]' z.B.: "Export_DD_MM_YYYY" ---> "Anlage1_DD_MM_YYYY"[/COLOR]
Dim fso, o, da, d, dd, f, fname, dateipfad
dateipfad = "\\PCName\Ordner"

Set fso = CreateObject("Scripting.FileSystemObject")
Set o = fso.GetFolder(dateipfad)
Set da = o.Files
For Each d in da
  fname = d.name  [COLOR="#008000"]' "Export_DD_MM_YYYY" ?[/COLOR]
  If Left(fname, 6) = "Export" Then
    dd = Mid(fname, 7)  [COLOR="#008000"]' "_DD_MM_YYYY"[/COLOR]
    Set f = fso.GetFile(dateipfad & "\" & fname)
    f.name = "Anlage1" & dd  [COLOR="#008000"]' "Anlage1" & "_DD_MM_YYYY"[/COLOR]
    [COLOR="#008000"]'Exit For[/COLOR]
  End If
Next

Harald
 
Wenn es nicht \\PCName sein muss . . . In Excel-VBA funktioniert z.B.
Code:
'D:\Festplatte_C\Export_DD_MM_YYYY.TST' umbenennen in 'D:\Festplatte_C\Anlage1_DD_MM_YYYY.TST'
    xPfad$ = "D:\Festplatte_C\"
    xName$ = "Export_DD_MM_YYYY.TST"
    Name xPfad$ & xName$ As xPfad$ & Replace(xName$, "Export_", "Anlage1_")
Anm.: "Festplatte_C" ist blödsinnigerweise bei mir ein OrdnerName auf Laufwerk D:
Wer kann mich kurz aufklären, was es mit "\\PCName" auf sich hat? Wo versteckt sich der PC-Name? Wie kommt man dran?
Hab's ersatzweise mit LaufwerksNamen probiert, aber das funktioniert nicht.

Gruss, Heinileini
 
' VBS Skript für TIA WinCC Advanced Comfort TP1500
' Datei umbenennen: "Export*" ---> "Anlage1*"
' z.B.: "Export_DD_MM_YYYY.PDF" ---> "Anlage1_DD_MM_YYYY.PDF" => Text geändert
Dim fso, o, da, d, dd, f, fname, dateipfad
dateipfad = "\\PCName\Ordner"

Set fso = CreateObject("filectl.filesystem") => wurde geändert, stimmt das??
Set o = fso.GetFolder(dateipfad) => bleibt der fso.GetFolder?
Set da = o.Files
For Each d in da
fname = d.name ' "Export_DD_MM_YYYY" ?
If Left(fname, 6) = "Export" Then
dd = Mid(fname, 7) ' "_DD_MM_YYYY"
Set f = fso.GetFile(dateipfad & "" & fname) => bleibt der fso.GetFolder?
f.name = "Anlage1" & dd ' "Anlage1" & "_DD_MM_YYYY" => wird ihr die Umbenennung gemacht?
fso.MoveFile "alter Name", "f.name" => Funktion für Umbenennung, ist dies brauchbar?
'Exit For => Warum wird Exit For nicht gebraucht
End If
Next

Danke für Unterstützung!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Lösungsweg: erstmal in dem angegebenen Ordner eine Datei finden die auf das Dateinamens-Muster passt (z.B. "Export*"). Dazu in einer Schleife mit der DIR-Methode die Namen aller Dateien des Ordners auflisten lassen, auf die das Muster passt.
Dann von der gefundenen Datei den Anfang des Dateinamens hinter dem Pfadname finden (oder fest mit Right/Left/Mid() ausschneiden, evtl. mit Replace() "von hinten"), und dann umbennen mit der MoveFile-Methode. Eventuell nach der ersten umbenannten Datei die Suche beenden.

Für Win CE Panel, nicht getestet:
Code:
[COLOR="#008000"]' VBS Skript für TIA WinCC Advanced Windows CE Runtime[/COLOR]
[COLOR="#008000"]' Datei umbenennen: "Export*" ---> "Anlage1*"[/COLOR]
[COLOR="#008000"]' z.B.: "Export_DD_MM_YYYY.pdf" ---> "Anlage1_DD_MM_YYYY.pdf"[/COLOR]
Dim fso, dd, fname, dateipfad, ddpos, suchname, newname

dateipfad = "\\PCName\Ordner\"     [COLOR="#008000"]' mit "\" am Ende![/COLOR]
suchname  = dateipfad & "Export*"  [COLOR="#008000"]' "\\PCName\Ordner\Export*"[/COLOR]
ddpos = Len(suchname)              [COLOR="#008000"]' Position des "_DD_MM_YYYY.pdf"[/COLOR]

Set fso = CreateObject("FileCtl.FileSystem")
fname = fso.Dir(suchname)               [COLOR="#008000"]' "\\PCName\Ordner\Export*"[/COLOR]
Do While fname <> ""                    [COLOR="#008000"]' wenn mindestens 1 Datei gefunden[/COLOR]
  dd = Mid(fname, ddpos)                [COLOR="#008000"]' das "_DD_MM_YYYY.pdf" herauskopieren[/COLOR]
  newname = dateipfad & "Anlage1" & dd  [COLOR="#008000"]' "\\PCName\Ordner\" & "Anlage1" & "_DD_MM_YYYY.pdf"[/COLOR]
  fso.MoveFile fname, newname           [COLOR="#008000"]' Datei umbenennen[/COLOR]
  [COLOR="#008000"]'Exit Do[/COLOR]
  fname = fso.Dir()  [COLOR="#008000"]' weitere Datei vorhanden?[/COLOR]
Loop

Harald
 
Zuletzt bearbeitet:
fso.MoveFile fname, newname ' Datei umbenennen
'Exit Do
End If
fname = fso.Dir() ' weitere Datei vorhanden?
Loop

Was passiert wenn mehrere Dateien gefunden werden? Werden dann, in der Loop Schleife, die anderen auch umbenennt?
 
Die Schleife benennt nacheinander alle in dem Ordner gefundenen Dateien um. Wenn nur die erste gefundene Datei umbenannt werden soll, dann die Anweisung "Exit Do" aktivieren durch entfernen des Kommentarzeichens (das Hochkomma ' ).

PS: das "If Mid(fname, pfadlen + 1, 6) = "Export" Then" ist überflüssig, ich habe es im Code in Beitrag #9 entfernt.

Harald
 
Zuletzt bearbeitet:
Schau bitte nochmal in Beitrag #9. Ich habe das überflüssige If entfernt und beim Zusammenbasteln des newname noch den Dateipfad zugefügt (ich meine das muß so bei WinCE).

PS: beim zweiten fso.Dir() darf suchname nicht noch einmal übergeben werden, die leere Klammer ist richtig so. siehe die Hilfe zur Dir-Methode

Harald
 
Zuletzt bearbeitet:
Für was ist der * nach dem Export? Wird das Skript alle Dateien mit "Export_DD_MM_YYYY_HH_MM_SS.pdf" suchen und umbennen?

Skript:

' VBS Skript für TIA WinCC Advanced Windows CE Runtime
' Datei umbenennen: "Export*" ---> "PDF-Export_Audittrail*"
' z.B.: "Export_DD_MM_YYYY_HH_MM_SS.pdf" ---> "Anlage1_DD_MM_YYYY_HH_MM_SS.pdf"

If SmartTags("I_Zustand_Export") = 40 Then
dateipfad = "\Storage Card USB\Export" ' mit "" am Ende!
suchname = dateipfad & "Export*" ' "\\PCName\Ordner\Export*"
ddpos = Len(suchname) ' Länge von Dateipfad ermitteln

Set fso = CreateObject("FileCtl.FileSystem")
fname = fso.Dir(suchname)
Do While fname <> "" ' wenn mindestens 1 Datei gefunden
dd = Mid(fname, ddpos) ' "_DD_MM_YYYY_HH_MM_SS.pdf"
newname = dateipfad & "PDF-Export_Audittrail" & dd ' "PDF-Export_Audittrail" & "_DD_MM_YYYY_HH_MM_SS.pdf"
fso.MoveFile fname, newname ' Datei umbenennen
'Exit Do
fname = fso.Dir() ' weitere Datei vorhanden?
Loop
End If
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für was ist der * nach dem Export?
* ist ein "multiple-character wildcard", steht für eine beliebige Anzahl beliebiger Zeichen ab der angegebenen Position
? ist ein "single-character wildcard", steht für ein beliebiges Zeichen an der angegebenen Position

Grundkurs DOS bzw. Eingabeaufforderung (CMD.exe):
Umbenennen einer Datei:
ren \\PCName\Ordner\Export_DD_MM_YYYY.pdf Anlage_DD_MM_YYYY.pdf

Weil "DD_MM_YYYY" vermutlich dynamisch variiert:
Umbenennen aller Dateien, auf deren Name ein angegebenes Muster (pattern) passt:
ren \\PCName\Ordner\Export_??_??_????.pdf Anlage*

Umbenennen aller Dateien, deren Name mit "Export" anfängt zu "Anlage..." mit Beibehalten der Zeichen nach dem "Export":
ren \\PCName\Ordner\Export* Anlage*

Hilfe zum REN-Befehl:
ren /?

Du möchtest im Name das "Export" durch "Anlage1" ersetzen - das geht nicht mit dem REN-Befehl, weil "Anlage1" nicht genau so viele Zeichen wie "Export" hat --> Den Austausch der Zeichenketten muß ein Skript machen. In meinem Skript für WinCE im Beitrag #9 habe ich quasi den Befehl "ren \\PCName\Ordner\Export* Anlage1*" umgesetzt. Falls bei Dir noch mehr Dateien im Ordner mit "Export" anfangen, dann mußt Du das Skript anpassen, so daß nur die gewünschten Dateien umbenannt werden. Bei der WinCE-Version des Skriptes ist das Anpassen relativ einfach, weil die DIR-Methode mit wildcards (*?) umgehen kann.
Wenn Du den genauen Dateiname schon weißt, dann kannst Du die Schleife mit der Dir-Methode (zum Auflisten der unbekannten Dateinamen) weglassen und direkt nur fso.Movefile mit dem bekannten Dateiname und dem zusammengebastelten neuen Dateiname ausführen.

Im von mir in Beitrag #4 verlinkten FAQ: Protool/WinCCflex/TIA Daten lesen / schreiben mit VB-Script
am ersten Beitrag der Anhang "VBScript_WinCE.pdf" beschreibt die speziellen Datei-Methoden von WinCE
VBScript_WinCE.pdf schrieb:
Dir
This method returns the name of a file, directory, or folder that matches a specified pattern or file attribute.
[...]
Remarks
Dir supports the use of multiple-character (*) and single-character (?) wildcards to specify multiple files. You must specify pathname the first time you call the Dir method. In addition, if you specify file attributes you must include pathname.
The Dir method returns the first file name that matches pathname. To get any additional file names that match pathname, call Dir again with no parameters. When no more file names match, Dir returns a zero-length string ("").

Harald
 
Programmcode posten mache bitte mit [CODE]-Tags - der #-Button im Beitragseditor. Dann bleiben die Einrückungen erhalten und der Code ist allgemein besser lesbar.

Wird das Skript alle Dateien mit "Export_DD_MM_YYYY_HH_MM_SS.pdf" suchen und umbennen?

Code:
' VBS Skript für TIA WinCC Advanced Windows CE Runtime
' Datei umbenennen: "Export*" ---> "PDF-Export_Audittrail*"
' z.B.: "Export_DD_MM_YYYY_HH_MM_SS.pdf" ---> "Anlage1_DD_MM_YYYY_HH_MM_SS.pdf"

If SmartTags("I_Zustand_Export") = 40 Then
    dateipfad = "\Storage Card USB\[COLOR="#FF0000"]Export"     ' mit "" am Ende!   <--- die Pfadangabe muß ein "\" am Ende haben![/COLOR]
    suchname  = dateipfad & "Export*"           ' [COLOR="#FF0000"]"\\PCName\Ordner\Export*"[/COLOR]
    ddpos   = Len(suchname)                    ' [COLOR="#FF0000"]Länge von Dateipfad ermitteln[/COLOR]
 
    Set fso = CreateObject("FileCtl.FileSystem")
    fname = fso.Dir(suchname)
    Do While fname <> ""               ' wenn mindestens 1 Datei gefunden
        dd = Mid(fname, ddpos)   ' "_DD_MM_YYYY_HH_MM_SS.pdf"
        newname = dateipfad & "PDF-Export_Audittrail" & dd       ' "PDF-Export_Audittrail" & "_DD_MM_YYYY_HH_MM_SS.pdf"
        fso.MoveFile fname, newname    ' Datei umbenennen
        'Exit Do
        fname = fso.Dir()  ' weitere Datei vorhanden?
    Loop
End If
Die rot markierten Stellen sind fehlerhaft oder falsch kommentiert. Ansonsten wird das Skript die gewünschten Dateien umbenennen, allerdings auch andere Dateien die mit "Export" anfangen (falls solche Dateien vorhanden sind).

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Den Austausch der Zeichenketten muß ein Skript machen. => Hast du ein Beispiel dazu?

In meinem Skript für WinCE im Beitrag #9 habe ich quasi den Befehl "ren \\PCName\Ordner\Export* Anlage1*" umgesetzt. Falls bei Dir noch mehr Dateien im Ordner mit "Export" anfangen, dann mußt Du das Skript anpassen, so daß nur die gewünschten Dateien umbenannt werden. => Alle Dateien die im Ordner mit "Export" beginnen, sollen umbenannt werden. In wie Fern muss das Skript angepasst werden?
 
Falls bei Dir noch mehr Dateien im Ordner mit "Export" anfangen, dann mußt Du das Skript anpassen, so daß nur die gewünschten Dateien umbenannt werden. => Alle Dateien die im Ordner mit "Export" beginnen, sollen umbenannt werden. In wie Fern muss das Skript angepasst werden?
Wenn der Ordner keine Dateien enthält, deren Namen zwar mit "Export" anfangen, die aber dennoch nicht umbenannt werden sollen, dann passt Haralds Code für Deine Zwecke (ohne "Exit Do" bzw. mit auskommentiertem "Exit Do"). Es werden ALLE Dateien im Ordner umbenannt, deren Namen mit "Export" beginnen (keine Angst - wenn sie schon einmal umbenannt wurden, beginnen sie ja nicht mehr mit "Export" und werden dann auch nicht noch einmal umbenannt!).

Gruss, Heinileini
 
Den Austausch der Zeichenketten muß ein Skript machen. => Hast du ein Beispiel dazu?
Häh, meinst Du das ernst? Ach komm schon, bitte auch mal mitdenken!
Ich meinte genau das Skript in Beitrag #9, über das wir hier die ganze Zeit reden.
In meinem Skript für WinCE im Beitrag #9 habe ich quasi den Befehl "ren \\PCName\Ordner\Export* Anlage1*" umgesetzt.
!


Falls bei Dir noch mehr Dateien im Ordner mit "Export" anfangen, dann mußt Du das Skript anpassen, so daß nur die gewünschten Dateien umbenannt werden. => Alle Dateien die im Ordner mit "Export" beginnen, sollen umbenannt werden. In wie Fern muss das Skript angepasst werden?
Ich meinte: Wenn in dem Ordner weitere Dateien liegen, die mit "Export" anfangen, aber nicht umbenannt werden sollen, dann muß die Suchmaske im Skript genauer formuliert werden (was das Skript allerdings ein wenig aufwendiger und die Dir-Methode ein kleines bisschen langsamer macht). Wenn in dem Ordner ausschließlich Dateien mit "Export" anfangen, die auch umbenannt werden sollen, dann ist es gut, dann muß nichts angepasst werden.

Hier das Skript angepasst auf die genauest-mögliche Suchmaske "\\PCName\Ordner\Export_??_??_????.pdf"
Code:
[COLOR="#008000"]' VBS Skript für TIA WinCC Advanced Windows CE Runtime[/COLOR]
[COLOR="#008000"]' Datei umbenennen: "Export_DD_MM_YYYY.pdf" ---> "Anlage1_DD_MM_YYYY.pdf"[/COLOR]
Dim fso, dd, fname, dateipfad, ddpos, suchname, newname

dateipfad = "\\PCName\Ordner\"          [COLOR="#008000"]' mit "\" am Ende![/COLOR]
[COLOR="#0000FF"]suchname = dateipfad & "Export"[/COLOR]         [COLOR="#008000"]' "\\PCName\Ordner\Export"[/COLOR]
[COLOR="#0000FF"]ddpos = Len(suchname) + 1[/COLOR]               [COLOR="#008000"]' Position des "_DD_MM_YYYY.pdf"[/COLOR]
[COLOR="#0000FF"]suchname = suchname & "_??_??_????.pdf"[/COLOR]

Set fso = CreateObject("FileCtl.FileSystem")
fname = fso.Dir(suchname)               [COLOR="#008000"]' "\\PCName\Ordner\Export_??_??_????.pdf"[/COLOR]
Do While fname <> ""                    [COLOR="#008000"]' wenn mindestens 1 Datei gefunden[/COLOR]
  dd = Mid(fname, ddpos)                [COLOR="#008000"]' das "_DD_MM_YYYY.pdf" herauskopieren[/COLOR]
  newname = dateipfad & "Anlage1" & dd  [COLOR="#008000"]' "\\PCName\Ordner\" & "Anlage1" & "_DD_MM_YYYY.pdf"[/COLOR]
  fso.MoveFile fname, newname           [COLOR="#008000"]' Datei umbenennen[/COLOR]
  [COLOR="#008000"]'Exit Do[/COLOR]
  fname = fso.Dir()  [COLOR="#008000"]' weitere Datei vorhanden?[/COLOR]
Loop

Harald
 
Zuletzt bearbeitet:
Zurück
Oben