Nowe101 2 Geschrieben 8. September 2021 Melden Teilen Geschrieben 8. September 2021 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. Zitieren Link zu diesem Kommentar
Beste Lösung NilsK 2.940 Geschrieben 8. September 2021 Beste Lösung Melden Teilen Geschrieben 8. September 2021 Moin, ui, sowas heute noch in VBS zu machen ... ich sage mal voraus, dass dir hier einige zur PowerShell raten werden. Ich hab's nicht mehr genau im Kopf, aber es kann sein, dass das FileSystemObject keine Filter bei der Dateiauswahl kennt. Du müsstest das also selbst prüfen. Dazu hast du ja auch schon eine Zeile in deinem Code: If LCase(objFSO.GetExtensionName(objFile.Name)) = "xml" Then Hier könntest du die Bedingung mit AND um deine zweite Vorgabe zum Dateinamen ergänzen, vermutlich mit Instr(objFile.Name, "deine-Zeichenkette") > 0 Ist ungeprüft, versuch damit mal rum. Puh, VBS war schon gruselig. Gruß, Nils 2 Zitieren Link zu diesem Kommentar
Nowe101 2 Geschrieben 8. September 2021 Autor Melden Teilen Geschrieben 8. September 2021 vor 44 Minuten schrieb NilsK: Hier könntest du die Bedingung mit AND um deine zweite Vorgabe zum Dateinamen ergänzen, vermutlich mit Instr(objFile.Name, "deine-Zeichenkette") > 0 Vielen Dank Nils, Das hat einwandfrei funktioniert. Vielen Lieben Dank Grüße, Andreas Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 8. September 2021 Melden Teilen Geschrieben 8. September 2021 (bearbeitet) Andreas, markier doch bitte seine Antwort als die Beste Lösung - nicht Deine Eigene, die die Lösung gar nicht enthält! Danke schon mal im Voraus. bearbeitet 8. September 2021 von BOfH_666 1 Zitieren Link zu diesem Kommentar
Nowe101 2 Geschrieben 8. September 2021 Autor Melden Teilen Geschrieben 8. September 2021 Ist erledigt danke für eure Hilfe! 1 1 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.