Jump to content

Nowe101

Members
  • Gesamte Inhalte

    3
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von Nowe101

  1. Hallo Zusammen,

     

    Ich habe mir ein VB-Script aus mehreren Schnippseln zusammen gebastelt das soweit auch ohne Probleme funktioniert.

     

    Nun habe ich in dem Ordner wo die betreffenden XML-Dateien liegen auch andere Auch andere XML-Dateien die nicht bearbeitet werden sollen.

     

    Wie kann ich es bewerkstelligen das nur XML-Dateien bearbeitet werden die einen bestimmten Text im Dateinamen haben?

     

    Die Dateien sind immer so benannt:

     

    7542_PAUFTRAG.XML

    7542_PM.XML

    7542_PM_HISTORIE.XML

    7542_PM_HISTORIE_DOKUMENTE.XML

     

    Die Zahl vor dem Unterstrich ist eine Fortlaufende Nummer die beim erstellen der Datei automatisch generiert wird.

     

    In meinem VB-Script möchte ich nur Dateien bearbeiten die mit _PM.XML enden (Also diese Dateien wie die zweite in der Auflistung oben).

     

    Das Script selbst wird über einen Batch aufgerufen.

     

    If WScript.Arguments.Count < 1 Then
      WScript.Echo "Syntax:" & _
        vbLf & """" & WScript.ScriptName & """ ""Pfad"" [""FixerWert""]" & _
        vbLf & vbLF & "Returncodes:" & _
        vbLf & "3  zu wenig Argumente" & _
        vbLf & "2  Verzeichnis nicht gefunden" & _
        vbLf & "1  eine oder Mehrere Dateien konnten nicht verarbeitet werden" & _
        vbLf & "0  alle gefundenen Dateien erfolgreich verarbeitet" & vbLf
      WScript.Quit 3
    End If
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    strSrcDir = objFSO.GetAbsolutePathName(WScript.Arguments(0))
    If Not objFSO.FolderExists(strSrcDir) Then WScript.Quit 2
    
    strLogPath = objFSO.GetParentFolderName(WScript.ScriptFullName)
    strLogName = objFSO.GetBaseName(WScript.ScriptName) & " " & _
                 Year(Now) & "-" & Right("0" & Month(Now), 2) & "-" & Right("0" & Day(Now), 2) & " " & _
                 Right("0" & Hour(Now), 2) & "-" & Right("0" & Minute(Now), 2) & "-" & Right("0" & Second(Now), 2) & _
                 ".log"
    
    Set objLogFile = objFSO.CreateTextFile(objFSO.BuildPath(strLogPath, strLogName), True)
    
    iSucc = 0
    iErr = 0
    
    For Each objFile In objFSO.GetFolder(strSrcDir).Files
      If LCase(objFSO.GetExtensionName(objFile.Name)) = "xml" Then
        iRet = Process_XML(objFile.Path)
        If iRet > 0 Then
          objLogFile.WriteLine """" & objFile.Name & """ - " & iRet & " Knoten verarbeitet."
          iSucc = iSucc + 1
        Else
          objLogFile.WriteLine """" & objFile.Name & """ - Verarbeitung fehlgeschlagen."
          iErr = iErr + 1
        End If
      End If
    Next
    
    objLogFile.Close
    
    strMessage = iSucc + iErr & " Dateien verarbeitet." & _
      vbLf & iSucc & " erfolreich" & _
      vbLf & iErr & " fehlgeschlagen" & _
      vbLf & _
      vbLf & "Möchten Sie sich die Log-Datei anschauen?"
    
    If iErr = 0 Then
      cButtons = vbQuestion
    Else
      cButtons = vbCritical
    End If
    
    If MsgBox(strMessage, cButtons + vbYesNo, WScript.ScriptName) = vbYes Then
      Set objShell = CreateObject("WScript.Shell")
      objShell.Run "notepad.exe """ & objFSO.BuildPath(strLogPath, strLogName) & """"
    End If
    
    If iErr > 0 Then WScript.Quit 1
    
    Function Process_XML(ByRef strXmlDoc)
    
    	Dim objxmlDoc, objNodes, objNodes1, xmlNode, xmlNode1
    
        Set objXmlDoc = CreateObject("Microsoft.XMLDOM")
    	objXmlDoc.async = False
    	objXmlDoc.load(strXmlDoc)
        iCounter = 0
    
    Set parentNode = objXmlDoc.documentElement.SelectSingleNode("//KOSTEN")
    Set objNodes = objXmlDoc.documentElement.SelectNodes("//KOSTEN/KOST_BETRAG")
    Set objNodes1 = objXmlDoc.documentElement.SelectNodes("//KOSTEN/KOST_BASIS")
    
    IF ParentNode Is Nothing Then
      MsgBox "Der Knoten ""KOSTEN"" wurde nicht gefunden!", vbCritical, "Fehler"
      iCounter = iCounter + 0
    Else
    
    For Each xmlNode in objNodes
    xmlNode.text = ""
    iCounter = iCounter + 1
    Next
    
    For Each xmlNode1 in objNodes1
    xmlNode1.text = ""
    iCounter = iCounter + 1
    Next
    
    End If
    
    If iCounter > 0 Then objXmlDoc.save(strXmlDoc)
    
    objXmlDoc.save(strXmlDoc)
    Set objXmlDoc = Nothing
    
    Process_XML = iCounter
    
    End Function

     

    Würde mich sehr über Anregungen und Lösungen freuen.

     

    Vielen Dank.

×
×
  • Neu erstellen...