Dateinamen auf enthaltene Versionsnummer vergleichen und kopieren

  • VBScript

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    Dateinamen auf enthaltene Versionsnummer vergleichen und kopieren

    Hallo!
    ich benötige ein Script (VBS/WSH), welches den Dateinamen einer lokal z.B. auf "C:\Texte" vorhandenen Datei, in dem die Versionsnummer nach dem Muster z.B. "Name123.txt" enthalten ist, mit dem der auf einer Freigabe z.B. "\\server\freigabe" liegenden Dateien vergleicht und falls dort eine Datei z.B. "Name124.txt", also mit höhere Versionsnummer vorhanden ist, diese vom Netz auf das lokale Verzeichnis kopiert. Das ganze soll bei jedem BS-Start aufgerufen werden, um jeweils die aktuelle Datei lokal vorzuhalten. Die Datei mit der niedrigeren Versionsnummer soll dann vom lokalen Verzeichnis gelöscht werden.

    ich such mir schon seit Stunden einen Wolf im Web, aber finde nix Passendes, vielleicht habt Ihr eine Lösung?
    Vielen Dank im Voraus!

    Dateiname mit 3 Ziffern plus Endung

    Hi,

    ja, der Dateiname ist immer der gleiche, bis auf die drei Ziffern der Versionsnummer vor der Endung.

    vanGoo schrieb:

    Hi,

    ist der Name der Datei bis auf die Versionsnummer IMMER eindeutig?

    greez
    vanGoo
    im Netzordner ist nicht nur die aktuelle Datei abgelegt, sondern auch alle Vorversionen. Im lokalen Ordner soll immer nur die aktuelle Version liegen.

    Gruß und vielen Dank für Antwort
    Hi. Ich habe mal ein script geschrieben, was eventuell zu deinem Problem passt

    Quellcode

    1. Function Vgl(Pfad,SrvPfad)
    2. Set fso = CreateObject("Scripting.FilesystemObject")
    3. Set Folder = fso.GetFolder(Pfad)
    4. For Each Fil In folder.Files
    5. ort = 0
    6. ort = RAT("[0-9]", Fil.name)
    7. If ort <> 0 Then
    8. Set SrvFolder = fso.GetFolder(SrvPfad)
    9. For Each File In SrvFolder.Files
    10. ort2 = 0
    11. ort2 = RAT("[0-9]", File.name)
    12. If ort2 <> 0 Then
    13. 'LCase entfernen wenn der Dateinamenvergleich Casesensitive sein soll, im moment wird nicht auf groß/kleinschreibung geachtet! Lcase = alles klein gemacht
    14. If LCase(Mid(File.name,1,ort2)) = LCase(Mid(Fil.name,1,ort)) And Right(Fil.name,4) = Right(File.name,4) Then 'Wenn Zahlen in Dateinamen vorhanden UND dateiname VOR den Zahlen identisch und DATEIENDUNG identisch
    15. lenS = Len(File.name)-4
    16. lenL = Len(Fil.name)-4
    17. If Mid(File.name,ort2,LenS) > Mid(Fil.name,ort2,LenL) Then
    18. fso.DeleteFile(fil.path)
    19. fso.CopyFile File.path, Pfad
    20. Set fil = fso.getfile(Pfad & File.name)
    21. End If
    22. End If
    23. End If
    24. Next
    25. End If
    26. Next
    27. End Function
    28. Call Vgl("D:\TEST\","\\SERVER1\TEST") 'HIER WERDEN DIE BEIDEN ORDNER ANGEGEBEN(erster is local, zweiter Server)
    29. Function RAT(Suchmuster, Zeichenfolge)
    30. Dim regAusdr, Uebereinstimmung, Uebereinstimmungen ' Variablen erstellen.
    31. Set regAusdr = New RegExp ' Erstellt einen regulären Ausdruck.
    32. regAusdr.Pattern = Suchmuster ' Legt das Suchmuster fest.
    33. regAusdr.IgnoreCase = True ' Ignoriert die Schreibweise.
    34. regAusdr.Global = True ' Legt globales Anwenden fest.
    35. Set Uebereinstimmungen = regAusdr.Execute(Zeichenfolge) ' Führt die Suche aus.
    36. RAT = 0
    37. For Each Uebereinstimmung in Uebereinstimmungen ' Durchläuft die Auflistung der Übereinstimmungen.
    38. RAT = Uebereinstimmung.FirstIndex
    39. If RAT <> "" Then
    40. Exit For
    41. End If
    42. Next
    43. End Function


    'ACHTUNG, war noch ein kleiner Fehler DRIN, SOLLTE JETZT 100% KLAPPEN :)'

    Ich hoffe das ist das was du suchtest, ich habe es getestet, bisher hats geklappt, übernehme aber keine Garantie :D
    gruss Mono
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Mono“ ()

    Oh, hab deine Zusatz INfo eben erst gelesen, das würde den Code erheblich vereinfachen :D
    Mein Script sucht nach allen möglichen Dateien im lokalen Ordner. Vergleicht die Dateiendungen , die Dateinamen bis zur Versionsnummer und dann die Versionsnummer mit jeder Datei im ServerOrdner, und kopiert wenn die Serverdatei eine höhere VNummer hat die Datei in den lokalen Ordner :)
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mono“ ()