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.