VBS - Script für alle Dateien eines Ordners ausführen
Ich habe ein Script erstellt, daß bestimmte Textteile (Zeilen) einer .JSP-Datei in eine .HTML-Datei umwandelt, aber ich kann eben immer nur einen Dateinamen über die Inputbox eingeben zur Verarbeitung. Wie lässt sich dies für einen ganzen Ordner bzw. dessen Unterordner automatisieren?
Bisher bin ich bei all meinen Versuchen ziemlich verzweifelt und benötige Eure Hilfe. Zunächst einnmal die Konvertierungsdatei JSPinHTML.VBS:
Nun habe ich diesen Code etwas abgewandelt als Sub-Prozedur in ein neues Script eingefügt, aber es werden mir laufend Fehler präsentiert. Die Zuordnung der Dateien stimmt nicht. Hier der nicht lauffähige Code
Das Script läuft immer im aktuellen Ordner, es erscheint mir günstiger, wenn ich es von Ordner zu Ordner kopiere, als wenn ich jedesmal das Script anpassen muss. Alternativ könnten man aber auch die Verarbeitung in ALLEN UNTERORDNERN vornehmen, denn die JSP-Dateien liegen parallel unter einem Parent Folder.
Ich freu' mich schon auf Antworten und danke im voraus.
Micha:
Bisher bin ich bei all meinen Versuchen ziemlich verzweifelt und benötige Eure Hilfe. Zunächst einnmal die Konvertierungsdatei JSPinHTML.VBS:
Const searchStr = "<tr>"
inPath=Inputbox("Name der Datei","JSP zu HTML konvertieren","410.jsp")
outPath=Left(inPath,3) & ".html" ' im aktuellen Ordner
With CreateObject("Scripting.FileSystemObject")
Set Quelldatei = .OpenTextFile(inPath)
Set Zieldatei = .OpenTextFile(outPath, 2, True)
End With
Zieldatei.WriteLine "<html><body><table border=1><TH colspan=4>"
Do Until Quelldatei.AtEndOfStream
Zeile = Trim(Quelldatei.ReadLine)
If Left(Zeile, 66) = "<tr><td class=firstleft><a class=nowrap name=""zurück1"" href=#" Then
Zieldatei.WriteLine Zeile ' vbNewLine & Zeile
Elseif Instr(1,"Gemeinde*", Zeile) then
Zieldatei.WriteLine Zeile
ElseIf Left(Zeile, 34) = "<b>Gemeindestatistik 2011 für" Then
Zieldatei.WriteLine Zeile
ElseIf Left(Zeile, 30) = "(Amtlicher Gemeindeschlüssel =" Then
Zieldatei.WriteLine Zeile & "</TH>"
' ... es folgen noch einige ElseIf-Blöcke
ElseIf Left(Zeile, 27) = "<tr><td class=firstleft>von" Then
Zieldatei.WriteLine Zeile
End if
End if
Loop
Zieldatei.Writeline "</table></body></html>"
Quelldatei.Close
Zieldatei.Close
Nun habe ich diesen Code etwas abgewandelt als Sub-Prozedur in ein neues Script eingefügt, aber es werden mir laufend Fehler präsentiert. Die Zuordnung der Dateien stimmt nicht. Hier der nicht lauffähige Code
Dim FSO, Ordner, Datei
Dim strFolder
Const ForReading = 1, ForWriting = 2, ForAppending = 8
strFolder = ".\" ' aktueller Ordner
Set FSO = CreateObject("Scripting.FileSystemObject")
set Ordner = FSO.GetFolder(strFolder)
For Each Datei In Ordner.Files
If LCase(FSO.GetExtensionName(Datei.Path)) = "jsp" Then
JSPinHTML(Ordner) ' Subroutine
Else
End If
Next
Set Ordner = Nothing
Set FSO = Nothing
' Liest Textzeilen aus *.jsp-Dateien
Sub JSPinHTML(strOrdner) ' oder als FUNCTION ??
Const searchStr = "<tr>"
inpath=strOrdner
outPath=Left(inpath,3) & ".html" <------- Syntaxfehler
With CreateObject("Scripting.FileSystemObject")
Set Quelldatei = .OpenTextFile(inPath)
Set Zieldatei = .OpenTextFile(outPath, 2, True)
End With
Zieldatei.WriteLine "<html><body><table border=1><TH colspan=4>"
Do Until Quelldatei.AtEndOfStream
Zeile = Trim(Quelldatei.ReadLine)
If Left(Zeile, 66) = "<tr><td class=firstleft><a class=nowrap name=""zurück1"" href=#" Then
Zieldatei.WriteLine Zeile ' vbNewLine & Zeile
Elseif Instr(1,"Gemeinde*", Zeile) then
Zieldatei.WriteLine Zeile
ElseIf Left(Zeile, 34) = "<b>Gemeindestatistik 2011 für" Then
Zieldatei.WriteLine Zeile
ElseIf Left(Zeile, 30) = "(Amtlicher Gemeindeschlüssel =" Then
Zieldatei.WriteLine Zeile & "</TH>"
' ... es folgen noch einige ElseIf-Blöcke
ElseIf Left(Zeile, 27) = "<tr><td class=firstleft>von" Then
Zieldatei.WriteLine Zeile
End if
End if
Loop
Zieldatei.Writeline "</table></body></html>"
Quelldatei.Close
Zieldatei.Close
End Sub
Das Script läuft immer im aktuellen Ordner, es erscheint mir günstiger, wenn ich es von Ordner zu Ordner kopiere, als wenn ich jedesmal das Script anpassen muss. Alternativ könnten man aber auch die Verarbeitung in ALLEN UNTERORDNERN vornehmen, denn die JSP-Dateien liegen parallel unter einem Parent Folder.
Ich freu' mich schon auf Antworten und danke im voraus.
Micha:
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 187869
Url: https://administrator.de/forum/vbs-script-fuer-alle-dateien-eines-ordners-ausfuehren-187869.html
Ausgedruckt am: 06.01.2025 um 23:01 Uhr
21 Kommentare
Neuester Kommentar
Hallo Micha,
so könnte die Routine für das rekursive Durchsuchen nach *.jsp Dateien aussehen:
Grüße
rubberman
so könnte die Routine für das rekursive Durchsuchen nach *.jsp Dateien aussehen:
Set objFSO = CreateObject("Scripting.FileSystemObject")
GetJspFiles(objFSO.GetParentFolderName(WScript.ScriptFullName))
Set objFSO = Nothing
Sub GetJspFiles(strFolderName)
If objFSO.FolderExists(strFolderName) Then
Set objFolder = objFSO.GetFolder(strFolderName)
On Error Resume Next
For Each objFile In objFolder.Files
If LCase(objFSO.GetExtensionName(objFile.Name)) = "jsp" Then
' Statt dem "WScript.Echo" solltest du hier die Subroutine
' für die HTML Dateien aufrufen.
WScript.Echo objFile.Path
End If
Next
For Each objSubFolder In objFolder.SubFolders
GetJspFiles(objSubFolder.Path)
Next
On Error Goto 0
End If
End Sub
Grüße
rubberman
Hallo Micha!
Versuchs mal hiermit:
Gruß Dieter
Versuchs mal hiermit:
Dim objFso, strFolder
'Main Beg
Set objFso = CreateObject("Scripting.FileSystemObject")
strFolder = objFso.GetParentFolderName(WScript.ScriptFullName)
If objFso.FolderExists(strFolder) Then
Call GetJspFiles(objFso.GetFolder(strFolder))
End If
Set objFso = Nothing
'Main End
Sub GetJspFiles(ByRef objFolder)
Dim objFile, objSubFolder
For Each objFile In objFolder.Files
If LCase(objFso.GetExtensionName(objFile.Name)) = "jsp" Then
Call JSPinHTML(objFile.Path, objFolder.Path)
End If
Next
For Each objSubFolder In objFolder.SubFolders
Call GetJspFiles(objSubFolder)
Next
End Sub
Sub JSPinHTML(ByRef strPath, ByRef strFolder)
Dim arrText, strText, strTextLine, strHtmlPath, objJspFile, objHtmlFile
strHtmlPath = objFso.BuildPath(strFolder, objFso.GetBaseName(strPath) & ".html")
Set objJspFile = objFso.OpenTextFile(strPath)
Set objHtmlFile = objFso.CreateTextFile(strHtmlPath)
arrText = Split(objJspFile.ReadAll, vbCrLf)
objHtmlFile.Writeline "<html><body><table border=1><TH colspan=4>"
For Each strTextLine In arrText
If strTextLine <> "" Then
strText = Trim(strTextLine)
With objHtmlFile
If Left(strText, 66) = "<tr><td class=firstleft><a class=nowrap name=""zurück1"" href=#" Then
.Writeline strText
ElseIf InStr(1, "Gemeinde*", strText) Then
.Writeline strText
ElseIf Left(strText, 34) = "<b>Gemeindestatistik 2011 für" Then
.Writeline strText
ElseIf Left(strText, 30) = "(Amtlicher Gemeindeschlüssel =" Then
.Writeline strText & "</TH>"
ElseIf Left(strText, 27) = "<tr><td class=firstleft>von" Then
.Writeline strText
End If
End With
End If
Next
objHtmlFile.Writeline "</table></body></html>"
objJspFile.Close
objHtmlFile.Close
End Sub
Gruß Dieter
Hallo Micha!
Jepp, gern geschehen
Fehlt eigentlich nur noch so'n grüner Haken
Gruß Dieter
Jepp, gern geschehen
Fehlt eigentlich nur noch so'n grüner Haken
Gruß Dieter
Hallo rubberman!
Grüße und gute Nacht
Dieter
Gleich das Folder Objekt zu referenzieren gefällt mir besser. Daumen hoch
Freu mich, dass Dir das gefälltGrüße und gute Nacht
Dieter
Hallo Gurkenhobel!
Also, bitte Codezeile 28 ersatzlos streichen
Da gibt es nichts zum Schließen??????????
Und auf was soll sich die Codezeile 53 beziehen???????
Auf was soll sich das objFile in Deinem unteren Codeteil überhaupt beziehen?????????
Gruß Dieter
Also, bitte Codezeile 28 ersatzlos streichen
Da gibt es nichts zum Schließen??????????
Und auf was soll sich die Codezeile 53 beziehen???????
Auf was soll sich das objFile in Deinem unteren Codeteil überhaupt beziehen?????????
Gruß Dieter
Hallo Micha!
Dann eher so:
Gruß Dieter
Dann eher so:
Sub GetJspFiles(ByRef objFolder)
Dim objFile, objSubFolder
For Each objFile In objFolder.Files
If LCase(objFso.GetExtensionName(objFile.Name)) = "jsp" Then
Call JSPRename(objFile)
End If
Next
For Each objSubFolder In objFolder.SubFolders
Call GetJspFiles(objSubFolder) 'Hier nix verändern!!!
Next
End Sub
Sub JSPRename(ByRef objFile)
Dim arrText, strText, strTextLine, objJspFile, intPosition
Set objJspFile = objFso.OpenTextFile(objFile.Path)
arrText = Split(objJspFile.ReadAll, vbCrLf): objJspFile.Close
For Each strTextLine In arrText
If strTextLine <> "" Then
strText = Trim(strTextLine)
intPosition = InStr(1, strText, "(Amtlicher Gemeindeschlüssel", vbTextCompare) + 31
If intPosition > 31 Then
objFile.Name = Mid(strText, intPosition, 8) & ".jsp"
End If
End If
Next
End Sub
Gruß Dieter
Hallo Micha!
Eine Datei umzubenennen halte ich durchaus für die bessere Lösung und funktioniert bei mir auch einwandfrei.
Hast Du den Code auch komplett kopiert?
Gruß Dieter
Eine Datei umzubenennen halte ich durchaus für die bessere Lösung und funktioniert bei mir auch einwandfrei.
Hast Du den Code auch komplett kopiert?
Gruß Dieter
Hallo Micha!
Hm, hast Du auch den oberen Codeteil mit drinnen?
Gruß Dieter
PS.
Hm, hast Du auch den oberen Codeteil mit drinnen?
Dim objFso, strFolder
' Beginn Hauptprogramm
Set objFso = CreateObject("Scripting.FileSystemObject")
strFolder = objFso.GetParentFolderName(WScript.ScriptFullName) ' nur der Ordnername
If objFso.FolderExists(strFolder) Then
Call GetJspFiles(objFso.GetFolder(strFolder))
End If
Set objFso = Nothing
' Ende Hauptprogramm
Gruß Dieter
PS.
Was ist denn da los. Mein Script läuft komischerweise - auch bei kurzen Test-JSP-Dateien
mit eingefügter Zeile "Amtlicher Gemeindeschlüssel = 14777999" oder "1477888" usw.
Da fehlt noch die Klammer an Position 1:mit eingefügter Zeile "Amtlicher Gemeindeschlüssel = 14777999" oder "1477888" usw.
"(Amtlicher Gemeindeschlüssel" |
Hallo Micha!
Hab ich's mir doch gedacht
Dieter
Hm, hast Du auch den oberen Codeteil mit drinnen?
Natürlich nicht - total übersehen. Jetzt läuft der Code einwandfrei.Herzlichen Dank für die viele Mühe, die DU mit mir hattest und noch einen schönen Abend.
Jepp, gern geschehen und auch Dir noch einen schönen AbendDieter