Ziel ist es in einer beliebigen Datei – der Inhalt sollte aber schon irgendeine Art von Text sein – scriptgesteuert Text oder Zeichen suchen und ersetzen zu können; und zwar ohne Installation von Tools wie grep/sed sondern nur mit dem Script.
Eine pure Batch-Lösung halte ich für zu riskant, da Batch mit zu vielen Sonderzeichen Schwierigkeiten hat. Statt dessen greifen wir auf ein einfaches .vbs Script zurück.
Für Einsteiger: VBS (Visual Basic Script) Scripts sind Batch Scripts sehr ähnlich. Es ist praktisch nur Text in einer Datei mit der Dateiendung .vbs. Ausgeführt werden .vbs Scripts mit folgendem Code aus der CMD heraus, ggf. mit Parametern:
cscript //nologo script.vbs "parameter1"
VBS Scripts, im Vergleich zu Batch, laufen allerdings etwas stabiler, liefern notfalls Fehlermeldungen und bieten auch mehr Features. An dieser Stelle nutzen wir also diese Vorteile aus.
Hier der Code für ein einfaches .vbs Script zum Auslesen einer Datei, Suchen und Ersetzen 3 verschiedener Zeichen/Texte und Schreiben in eine andere Datei:
Set objFSO = CreateObject("Scripting.FileSystemObject") Const ForReading = 1 Const ForWriting = 2 ' Datei öffnen und Text einlesen und schließen Set objFile = objFSO.OpenTextFile("test.html", ForReading) strText = objFile.ReadAll objFile.Close ' Änderungen am Inhalt strNewText = Replace(strText, """", "'") strNewText = Replace(strNewText, "lang='de'", "lang='en'") strNewText = Replace(strNewText, "Hannes Schurig", "Max Mustermann") ' Neue Datei erstellen mit neuen Inhalten füllen set resultFile = objFSO.CreateTextFile("test-neu.html", true) resultFile.WriteLine strNewText resultFile.Close
Relativ straight forward. Hier ein Beispielresultat:
Für eine bessere Handhabung lässt sich nun dieses Script optimieren. Die Eingabe- und Ausgabedatei könnte man parametirisieren. Wenn immer nur 1 Sache ersetzt werden soll, sich diese aber während der Scriptlaufzeit ändert oder erst währenddessen entschieden wird, könnte man auch diese Daten als Parameter übergeben.
Hier der Code für ein komplexeres .vbs Script:
Set objFSO = CreateObject("Scripting.FileSystemObject") Const ForReading = 1 Const ForWriting = 2 ' Parameter einlesen inputFile = WScript.Arguments(0) outputFile = WScript.Arguments(1) searchText = WScript.Arguments(2) replaceText = WScript.Arguments(3) ' Datei öffnen und Text einlesen und schließen Set objFile = objFSO.OpenTextFile(inputFile, ForReading) strText = objFile.ReadAll objFile.Close ' Änderungen am Inhalt strNewText = Replace(strText, searchText, replaceText) ' Neue Datei erstellen mit neuen Inhalten füllen set resultFile = objFSO.CreateTextFile(outputFile, true) resultFile.WriteLine strNewText resultFile.Close
Eigentlich recht easy. In meinem nächsten Beitrag werden ich dieses Script nutzen um mit Batch dynamische HTML Reports zu erstellen. Wait for it!
Hallo,
Jooo das hier hat mir sehrrr geholfen um Sonderzeichen zu entfernen
mit Batch ging es nicht so richtig u auch noch sehr schnell mit VBS
Danke für so gute sachen
mfg
Zetzi
Suche vbs Routine wenn man mehrere Dateien auf das VBS zieht
diese laut Liste im Script umbenannt werden.
Angebot-Kosten per paypal überweisung