Ungewollte automatische Namensumbenennung

  • VBScript

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

    Ungewollte automatische Namensumbenennung

    Hallo Liebe Community,

    ich arbeite momentan an einem Script das mir meine Worddokumente sammelt. Das funktioniert auch alles einwandfrei und in der hinsicht gibt es keinerlei Probleme. Allerdings bennent das Script die .doc Datein entsprechend dem Counter(denke ich) um. Die gefundenen WordDokumente heißen dann im Ausgabeordner immer Word01, Word02 usw.

    Ich hoffe mir kann da jemand helfen. Ich stelle mal meinen Code hier rein.

    Visual Basic-Quellcode

    1. Set iFileSystem3 = CreateObject("Scripting.FileSystemObject")
    2. prefix = "Word"
    3. counter = 0
    4. Set IShellDispatch = CreateObject("Shell.Application")
    5. 'Zu durchsuchende Ordner
    6. titel = "Wo wollen Sie nach .doc Datein suchen?"
    7. Set Folder3 = IshellDispatch.BrowseForFolder(0, titel, 0)
    8. If Folder3 is Nothing then
    9. MsgBox "Das Programm wird geschlossen "
    10. WScript.Quit
    11. else
    12. pfad = Folder3.Self.Path
    13. End If
    14. 'Ausgabeordner
    15. titel = "Wo sollen die gefundenen Datein hinkopiert werden?"
    16. Set Folder3 = IshellDispatch.BrowseForFolder(0, titel, 0)
    17. If Folder3 is Nothing then
    18. MsgBox "Das Programm wird geschlossen "
    19. WScript.Quit
    20. else
    21. pfad2 = Folder3.Self.Path
    22. End If
    23. CollectDOC IFileSystem3.GetFolder(pfad)
    24. MsgBox "es wurde(n) " & counter & vbCrLf & "Worddokumente im Ordner " & pfad2 & " gesammelt!"
    25. 'Ordner öffnen
    26. Set iWshShell3 = CreateObject("WScript.Shell")
    27. IWshShell3.Run """" & pfad2 & """"
    28. Sub CollectDOC(Folder3)
    29. On Error Resume Next
    30. For Each IFile in Folder3.Files
    31. ext = LCase(IFileSystem3.GetExtensionName(IFile.Name))
    32. If ext = "doc" then
    33. Do
    34. Zielname = IFileSystem3.BuildPath(pfad2,_
    35. prefix & counter & " .doc")
    36. counter = counter +1
    37. Loop until (not IFileSystem3.FileExists(zielname))
    38. IFile.Copy zielname, true
    39. End If
    40. next
    41. For each Subfolder in Folder3.SubFolders
    42. CollectDOC subfolder
    43. Next
    44. On error Goto 0
    45. End Sub


    EDIT: Ich glaube ich habe den Fehler soeben selbergefunden, es lag wohl an dem Prefix = "Word".

    EDIT2: Allerdings werden jetzt alle Worddokumente die gefunden werden, durchnummeriert, also besteht mein Problem immer noch das ich der Name ändert.



    lg ApreX

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ApreX“ ()

    EDIT2: Allerdings werden jetzt alle Worddokumente die gefunden werden, durchnummeriert, also besteht mein Problem immer noch das ich der Name ändert.
    Versuch's mal damit:

    ...
    ext = LCase(IFileSystem3.GetExtensionName(IFile.Name))
    If ext = "doc" then
    Do
    Zielname = IFileSystem3.BuildPath(pfad2,_
    prefix & counter & " .doc"
    IFile.Name )
    ....

    Die Dateien werden jetzt mit dem richtigen Namen kopiert.
    Allerdings kommt die MSGBOX sehr verzögert mit falscher Zähler-Meldung
    Hallo Eierlein,

    vielen Dank für deine Antwort. Habe das jetzt mal in meinem Script übernommen, und es funktioniert. Der Counter funktioniert auch noch und die MsgBox kam bei meinen bisherigen Test´s auch nicht Zeitverzögert.

    Vielen Dank
    lg ApreX

    PS: Wann kam den bei dir die MsgBox Zeitverzögert?

    EDIT: Setzte das Thema noch nicht "als erledigt", da ich gerne noch wissen würde wieso bei Ihm eine Zeitverzögerung der MsgBox autritt.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ApreX“ ()


    PS: Wann kam den bei dir die MsgBox Zeitverzögert?

    Ich habe jetzt genauer getestet.

    Wenn das Startverzeichnis ""Wo wollen Sie nach .doc Datein suchen?" kein Unterverzeichnis hat ist alles OK.

    Wenn ich im Ordner 'Eigene Dateien' starte, werden zwar alle Dateien in allen Unterverzeichnissen gefunden und in den Zielordner kopiert, aber ...

    1. Problem: Nach seeehr langer Zeit kommt die Meldung 'es wurde(n) xxx Worddokumente im Ordner XY gesammelt!
    Laut Meldung wurden bis über 2 Millionen Worddokumente gefunden!
    (Auch bei einem Testordner mit jeweils einer Doc-Datei in zwei Unterverzeichnissen)

    2. Problem: Dateien mit gleichem Namen (aus verschiedenen Ordnern) werden überschrieben.

    Lösung für Problem 1: Do Loop Schleife entfernen. Zeit- und Anzeigeproblem beseitigt.
    (Die fehlerhafte Schleife war wohl wegen Problem 2 vorgesehen, spielte bei dem Ursprungsscript aber keine Rolle)

    For Each IFile in Folder3.Files
    ext = LCase(IFileSystem3.GetExtensionName(IFile.Name))
    If ext = "doc" then
    'Do
    Zielname = IFileSystem3.BuildPath(pfad2, IFile.Name)
    counter = counter +1
    'Loop until (not IFileSystem3.FileExists(zielname))

    Lösung für Problem 2: (Falls es bei dir vorkommen kann) Abfrage ob eine Datei mit gleichem Namen schon im Zielverzeichnis vorhanden ist.
    Bei gleichem Namen bei der zweiten Datei wird aus Test.doc Test-X.doc.
    Falls allerdings die Dateien im Zielverzeichnis durch geänderte Originaldateien ersetzt werden sollen, funktitioniert die Lösung nicht, weil jedesmal ein -X angehängt wird.

    For Each IFile in Folder3.Files
    ext = LCase(IFileSystem3.GetExtensionName(IFile.Name))
    If ext = "doc" then

    Zielname = IFileSystem3.BuildPath(pfad2, IFile.Name)
    counter = counter +1

    if IFileSystem3.FileExists(zielname) then
    zielname = mid(zielname, 1, len(zielname)-4) _
    & "-X" & right(zielname, 4)
    end if


    IFile.Copy zielname, true
    End If
    next
    Hi,
    erstmal vielen Dank für deine Antwort und deine Mühe es zu testen. Hab das Programm jetzt auch mal bei mir zuhause ausgeführt(sonst immer nur auf der arbeit) und hatte auch das Problem mit der Zeitverzögerung.(Warum ich das auf der arbeit nicht hatte weiß ich net).

    Mit deinen Änderungsvorschlägen, klappt das Programm jetzt super. Habe jetzt auch mal eig alles getestet was du getestet hattest, und es klappt. Das mit der Überschreibung war mir noch nie aufgefallen, hatte diesen fall nicht in betrachtgezogen, da ich eig nie 2 Worddokumente mit gleichen namem hab ;) ist aber jetzt recht elegant gelöst.

    Vielen Dank für deine Hilfe, denke das das Programm jetzt fertig ist, falls nicht nochein Fehler auftreten sollte.

    mfg ApreX