Sonstiges > Offtopic

Mit VBScript Filenames ergänzen bzw ändern

<< < (3/3)

adminnaddel:
Moin liebe Gemeinde,

ich habe das Script noch um eine LogDatei erweitert!
Was ich aber dazu bräucht, wo ich derzeit aber den Wald vor Bäumen nicht sehe, ist ein ErrorHandling! Mit

On Error Resume Next
 möchte ich vermeiden, das ich ein Laufzeitfehler, bzw Zugriffverletzung bekomme, wie es leider nach 20% der Dateien passiert ist!

Jedoch soll, wenn das Script aufgrund des Errors ins nächste File springt, das mir die übersprungende Datei ins Log geschrieben wird, so kann ich später sehen, welche Datei nicht unbenamst wurde!

Script:

Option Explicit
Dim oFso, oFolder, oShell, objFile, objShell, objFolder, objFolderItem
Dim sPfad, NewFileName, MyFile, strNewName, objPath, intValue
Dim SearchString, SearchChar, Pos, ReplaceWith, oFolderSub, OnlyPath
Call FolderAuswahl

Sub FolderAuswahl
  Const WINDOW_HANDLE = 0
  Const NO_OPTIONS = 0
  Const OverWriteFiles = True
  Set objShell = CreateObject("Shell.Application")
  Set objFolder = objShell.BrowseForFolder (WINDOW_HANDLE, "", NO_OPTIONS, "H:\")
  Set objFolderItem = objFolder.Self
  sPfad = objFolderItem.Path
End Sub

Call Main

Sub Main
   Set oFso = WScript.CreateObject("Scripting.FileSystemObject")
   Set oShell = WScript.CreateObject("WScript.Shell")
   SearchChar = " "   ' Search for " ".
   Set oFolder = oFso.GetFolder(sPfad)
   ReplaceFileName oFolder
   WScript.Echo "Auftrag ausgeführt!"
End Sub

Call ReplaceFileName (oFolder)

Sub ReplaceFileName(oFolder)
   For Each objFile In oFolder.Files
      SearchString = objFile.Name
      ReplaceWith = "_"
      Pos = Instr(1, SearchString, SearchChar)
      If Len(Pos) > 0 Then

         NewFileName = Replace(SearchString, SearchChar, ReplaceWith)
         OnlyPath = Left(objFile.Path,InStrRev(objFile.Path, "\"))
         Set MyFile = oFso.GetFile(OnlyPath & SearchString)
         MyFile.Move OnlyPath & "\" & NewFileName
      End If
   Next
   For Each oFolderSub In oFolder.SubFolders
        ReplaceFileName oFolderSub
   Next
End Sub

Call LogDatei
Sub LogDatei

lg
Andy

sloe:
Error-Handling im WSH kann ganz prickelnd werden...
Könnte aber so gehen:

' *************************************
' C:\KillSpace3.vbs
' Ersetze Leer-Zeichen in Dateinamen und in den Unterordnern
' mit Log für Fehler
' 25.01.05 11:24
' Version 3
' (C) by Sloe 2005
' *************************************

Option Explicit

Const ForWriting = 2
Dim PathLogErrorFiles, ErrorFileName, ErrorReport
PathLogErrorFiles = "E:\TestKillSpace\ErrorFiles.txt"

Dim oFso, oFolder, oShell, objFile, objShell, objFolder, objFolderItem
Dim sPfad, NewFileName, MyFile, strNewName, objPath, intValue
Dim SearchString, SearchChar, Pos, ReplaceWith, oFolderSub, OnlyPath
Call FolderAuswahl

Sub FolderAuswahl
  Const WINDOW_HANDLE = 0
  Const NO_OPTIONS = 0
  Const OverWriteFiles = True
  Set objShell = CreateObject("Shell.Application")
  Set objFolder = objShell.BrowseForFolder (WINDOW_HANDLE, "", NO_OPTIONS, "H:\")
  Set objFolderItem = objFolder.Self
  sPfad = objFolderItem.Path
End Sub

Call Main

Sub Main
   Set oFso = WScript.CreateObject("Scripting.FileSystemObject")
   Set oShell = WScript.CreateObject("WScript.Shell")

   Set ErrorReport = oFso.OpenTextFile(PathLogErrorFiles, ForWriting, true)
   
   SearchChar = " "   ' Search for " ".
   Set oFolder = oFso.GetFolder(sPfad)
   ReplaceFileName oFolder
   WScript.Echo "Auftrag ausgeführt!"
End Sub

Call ReplaceFileName (oFolder)

Sub ReplaceFileName(oFolder)
   For Each objFile In oFolder.Files
      SearchString = objFile.Name
      ReplaceWith = "_"
      Pos = Instr(1, SearchString, SearchChar)
      If Len(Pos) > 0 Then

         NewFileName = Replace(SearchString, SearchChar, ReplaceWith)
         OnlyPath = Left(objFile.Path,InStrRev(objFile.Path, "\"))
         Set MyFile = oFso.GetFile(OnlyPath & SearchString)
         On Error Resume Next
         MyFile.Move OnlyPath & "\" & NewFileName
    If Err.Number <> 0 Then
      Call LogDatei(SearchString)       
      Err.Clear
    End If
      End If
   Next
   For Each oFolderSub In oFolder.SubFolders
        ReplaceFileName oFolderSub
   Next
End Sub

Sub LogDatei(ErrorFileName)
   ErrorReport.WriteLine(ErrorFileName & " Grund: " & Err.Description & vbCrLf)
End Sub

Gruß
Sloe

adminnaddel:
Hey .. vielen Dank! Lasse ich heute Nacht mal laufen! Ich weiß, das an einigen Dateien das Script sich schwer tut, dann mal schauen, ob es was schreibt!

Nochmals Danke

lg Andy

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln