Erlaubnisfehler beim Erstellen einer Log-Datei

  • VBScript

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Sachsenbauch.

    Erlaubnisfehler beim Erstellen einer Log-Datei

    Hallo Gemeinde,
    bei meinen Script, das Dateien entsprechend deren Vorbau in (zu erstellende) Unterordner verschiebt, tritt in Zeile 31 immer ein "Erlaubnisfehler" auf. Das Scipt läuft zwar trotzdem "ungestört" ab, aber irgendwie nervt die Fehlermeldung bei der Erstellung der Logdatei. Ich hab schon fast alles ausprobiert und die Zeile logfile.close an alle mögliche Stellen gesetzt, es geht einfach nicht weg...
    Im übrigen verschiebt das Script Dateien aus dem aktuellen Ordner in die Unterordner Jahr\Monat\Tag. Dies geschieht anhand eines "Vorbaus" (JJJJMMTT) der durch ein Gleichheitszeichen vom Dateinamen getrennt wird. Der Orignaldateiname wird durch das Verschieben wiederhergestellt. So lassen sich Dateien mit alphanumerischen Namen sehr gut nach Jahren und darin nach Monaten und darin wiederum nach Tagen trennen.
    Wäre schön, wenn ich die Fehlermeldung "Erlaubnis verweigert" (Zeile 18) wegkäme. Hier der Code:

    Visual Basic-Quellcode

    1. ' Beginn Hauptprogramm
    2. Dim objFso, strFolder
    3. Set objFso = CreateObject("Scripting.FileSystemObject")
    4. strFolder = objFso.GetParentFolderName(WScript.ScriptFullName)
    5. ' strFolder=".\" ' der aktuelle Ordner
    6. If objFso.FolderExists(strFolder) Then
    7. Call Umwandeln(objFso.GetFolder(strFolder))
    8. End If
    9. Set objFso = Nothing
    10. 'Hauptprogramm Ende
    11. Sub Umwandeln(ByRef objFolder)
    12. Dim objFile, objSubFolder, logfile, Protokoll
    13. Dim Ordnerpfad, Datum
    14. Protokoll="Dateien.log"
    15. set logfile = objFso.CreateTextFile(Protokoll,2) ' 2 Überschreiben ' Erlaubnis verweigert
    16. For Each objFile In objFolder.Files
    17. ' If LCase(objFso.GetExtensionName(objFile.Name)) = "jpg" Then
    18. If Instr(1,objFile.Name,"=",1) Then
    19. arrFeld=Split(objfile.Name,"=")
    20. OrgDatei=arrFeld(1)
    21. Datum=arrFeld(0)
    22. If IsNumeric(Datum) Then 'IsDate wäre besser..
    23. DD=Right(Datum,2)
    24. MM=Mid(Datum,5,2)
    25. YYYY=Left(Datum, 4)
    26. Ordnerpfad=strFolder & "\" & YYYY & "\" & MM & "\" & DD & "\"
    27. logfile.writeline ArrFeld(0) & " || " & OrgDatei
    28. If Not objFso.FolderExists(Ordnerpfad) Then ' Ordner erstellen falls noch nicht vorhanden
    29. CreateFolderRecursive(Ordnerpfad) ' Funktion zum rekursiven Ordnererstellen
    30. End If
    31. objFso.Movefile objFile, Ordnerpfad & OrgDatei
    32. End if
    33. End if ' von Numeric
    34. ' End If ' für die Extension: jpg
    35. Next
    36. For Each objSubFolder In objFolder.SubFolders ' für Unterordner
    37. Call Umwandeln(objSubFolder)
    38. Next
    39. logfile.close
    40. End Sub
    41. Function CreateFolderRecursive(FullPath)
    42. ' rekursives Ordneranlegen
    43. Dim arr, dir, path
    44. Dim oFs
    45. Set oFs = WScript.CreateObject("Scripting.FileSystemObject")
    46. arr = split(FullPath, "\")
    47. path = ""
    48. For Each dir In arr
    49. If path <> "" Then path = path & "\"
    50. path = path & dir
    51. If oFs.FolderExists(path) = False Then oFs.CreateFolder(path)
    52. Next
    53. End Function


    Danke im voraus
    M.
    Der Aufruf ist schlampig.
    Schau dir die Parameter bei CreateTextFile an, der Overwrite-Parameter erwartet ein Boolean.

    Allerdings wird es an deinem Problem nichts ändern, da 2 intern in True gewandelt wird, aber es ist unschön zu lesen.

    Dein eigentliches Problem ist, dass du Umwandeln rekursiv aufrufst und damit nochmals CreateTextFile während die Datei bereits offen ist.
    Öffne und schliesse die Datei ausserhalb der Routine.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --