Hilfe bei Movefile/Copyfile

  • VBScript

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Hilfe bei Movefile/Copyfile

    Hallo,

    eins Vorweg...ich habe von VBS bisher keine Erfahrung gehabt und fange gerade erst an ein wenig dazu zu lernen. Also habt bitte ein wenig Nachsicht bei meinem folgenden Script.

    Worum gehts? Also ich habe auf der Arbeit ein Programm welches Logdatein lokal auf dem PC ablegt. Da wir mehrere Kollegen sind die dies nutzen und es immer Blöd ist nach den Logs zu fragen ob diese aktuell auf dem Serve rliegen habe ich ein kleines VBS geschrieben welches bei Anmeldung am System die Datein automatisch auf den Server in den jeweiligen Ordner legen soll. Dies Funktioniert auch bisher. Allerdings kommen jetzt grenzen auf wenn die Datei schon mit dem gleichen Namen auf dem Server liegt. Hier zeigt er mir dann die Fehlermeldung "Datei schon vorhanden" an.

    Jetzt ist die Frag wie ich das in den Griff bekommen kann. Kann mir da einer bei helfen?

    Grüße
    Jascha

    VB.NET-Quellcode

    1. Option Explicit
    2. ' Variablen setzen
    3. Dim strLogPath
    4. Dim strLogJupesPath1
    5. Dim strLogJupesPath2
    6. Dim strLogJupesPath3
    7. Dim objNetwork
    8. Dim strHostname
    9. Dim objFileSystem
    10. Dim objWScriptShell
    11. ' Dateisystemobjekte setzen
    12. Set objFileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    13. Set objWScriptShell = WScript.CreateObject("WScript.Shell")
    14. Set objNetwork = WScript.CreateObject("WScript.Network")
    15. ' Variablen
    16. strLogPath = "\\servername\Reparaturdaten\Logbuecher\"
    17. strHostname = objNetwork.ComputerName
    18. strLogJupesPath1 = objWScriptShell.ExpandEnvironmentStrings("%JUPESDIR%") + "\Fahrzeug Protokolle\"
    19. strLogJupesPath2 = objWScriptShell.ExpandEnvironmentStrings("%Systemdrive%") + "\Batterie\Fahrzeug Protokolle\"
    20. 'strLogJupesPath3 = ""
    21. ' Lobuchverzeichnis pruefen
    22. If (objFileSystem.FolderExists(strLogPath)) then
    23. ' Ordner %Computername% prüfen sonst erstellen
    24. elseIf (objFileSystem.FolderExists(strLogPath+strHostname)) = false then
    25. ' Ordner strLogPath+strHostname erstellen
    26. objFileSystem.CreateFolder(strLogPath+strHostname)
    27. ' Logbuchdatein von Lokal auf den Server kopieren
    28. else
    29. WScript.Echo("Netzlaufwerk nicht verfuegbar. Bitte mit dem Netzwerk verbinden oder Ordnerberechtigung ueberpuefen.")
    30. WScript.Quit()
    31. End If
    32. If (objFileSystem.FolderExists(strLogJupesPath1)) then
    33. objFileSystem.MoveFile strLogJupesPath1 + "*.*", strLogPath + strHostname
    34. End If
    35. If (objFileSystem.FolderExists(strLogJupesPath2)) then
    36. objFileSystem.MoveFile strLogJupesPath2 + "*.*" , strLogPath + strHostname
    37. End If
    38. ' Deallocate filesystem object
    39. Set objFileSystem = Nothing
    40. Set objWScriptShell = Nothing
    41. Set objNetwork = Nothing
    42. ' Beende Script
    43. WScript.Quit()
    Häng halt nen TimeStamp an den Dateinamen an oder lösche vorher die vorhandene Datei.

    Im übrigen würde ich beim Arbeiten im Dateisystem nur den IO Namespace und die Klassen DirectoryInfo und FileInfo nutzen. Damit kannste schon extrem viel sehr komfortabel machen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Im übrigen würde ich beim Arbeiten im Dateisystem nur den IO Namespace und die Klassen DirectoryInfo und FileInfo nutzen.
    Das würde ich auch gern. Nur leider sind wir hier bei VBScript, nicht bei VB.Net :(


    @mukku:

    Visual Basic-Quellcode

    1. Date
    gibt Dir das heutige Datum ("11.04.2019") wieder.

    Visual Basic-Quellcode

    1. Now
    ergibt Datum und Zeit ("11.04.2019 23:12:30"). Mit der Mid-Funktion kannst Du Teilstrings erhalten. Wenn Du also schreiben würdest:

    Visual Basic-Quellcode

    1. MsgBox Mid(Date, 9, 4) & Mid(Date, 4, 2) & Mid(Date, 1, 2)
    erhieltest Du eine aufploppende MessageBox, die anzeigt: "190411", also Kurzjahr-Monat-Tag. Bastel Dir also mit Mid und Date, Now oder Time einen String zusammen, der Dir zusagt und Deine Log-Dateinamen ergänzt, sodass es keine Dateinamenkonflikte mehr gibt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    . Nur leider sind wir hier bei VBScript, nicht bei VB.Net :(

    Achso, da hab ich noch wohl von den Code-Tags irritieren lassen...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hi,

    so ich gebs auf. Hab den halben Tag damit verbracht in irgendeiner Form irgendwas sinnvolles zu finden. Gerade als Anfänger ist das bestimmt nicht gerade einfach. Bin mittlerweile schon bei Copyfile angekommen und lass den Ordner hinterher leeren. Ändert aber leider nichts an dem Problem das ich bevor ich kopiere abfragen muss ob es die Datei mit dem gleichen Namen auf dem Server schon gibt. Hier müsste halt der Zeitstempel der Dati oder der aktuelle Zeitstempel mit angehangen werden. Könnte mir da jemand soweit unter die Arme greifen das ich das in das obige Script einbauen kann?

    Grüße
    Ok. Was siehst Du selber als Zeitstempel? Nur Datum? Nur Zeit? Beides? Das musst Du entscheiden. Dann musst Du entscheiden, in welcher Form dieser Stempel angezeigt werden soll. Als Beispiel bei Datum für den 12. April 2019: 120419, 190412, 12042019, 19-04-12, 04-12-19 usw. Leg mal bitte was fest und sag uns bescheid, wofür Du Dich entschieden hast. Und dann schau nochmal Post#4 an und sag uns, ob Du aus Date, Time oder Now Deinen Zeitstempel basteln kannst. Sobald Du das kannst, benennst Du Deine Dateien nicht mehr z.B. Alpha.txt, Mitarbeiter.zip oder Test.bin, sondern eben Alpha-DeinZeitstempel.txt, Mitarbeiter-DeinZeitstempel.zip und Test-DeinZeitstempel.bin mithilfe des Scripts. Dadurch ist nahezu ausgeschlossen, dass Duplikate entstehen. Ist das ein gangbarer Weg für Dich?
    Alternativ schau einfach nach, ob die Datei bereits vorhanden ist. Dafür gibt es:

    Visual Basic-Quellcode

    1. Set fso = CreateObject("Scripting.FileSystemObject")
    2. If fso.FileExists(FilePath) Then MachWasImmerDuDannFürRichtigHältst

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.