Wie kann ich Text zwischen zwei Markierungen ersetzen.
Hallo zusammen,
Ich muss ein Skript (Batch, VBScript) erstellen, welches beliebigen Text zwischen zwei Kommentarstellen ersetzt.
'SearchAndReplace' kann ich nicht verwenden, da nicht sichergestellt ist, dass der Text zwischen den Markierungen immer gleich ist.
Mein Ansatz war RegExp in VBS aber leider komme ich da nicht weiter.
Die Zeilenumbrüche stellen vermutlich das Problem dar.
BSp.
Batch-File ALT:
Vielleicht hat jemand eine ähnliche Aufgabe bereits umgesetzt.
Danke
MilhouseNo1
Ich muss ein Skript (Batch, VBScript) erstellen, welches beliebigen Text zwischen zwei Kommentarstellen ersetzt.
'SearchAndReplace' kann ich nicht verwenden, da nicht sichergestellt ist, dass der Text zwischen den Markierungen immer gleich ist.
Mein Ansatz war RegExp in VBS aber leider komme ich da nicht weiter.
Die Zeilenumbrüche stellen vermutlich das Problem dar.
BSp.
Batch-File ALT:
REM ##MARKER1###
bel
lie
biger
text
REM ##MARKER2###
Vielleicht hat jemand eine ähnliche Aufgabe bereits umgesetzt.
Danke
MilhouseNo1
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 140693
Url: https://administrator.de/contentid/140693
Ausgedruckt am: 25.11.2024 um 06:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo MilhouseNo1,
also wenn du Replace nicht haben möchtest in VBS kannst du es mit
Split/Join versuchen.
Du möchtest doch zwischen den
die einzelnen Zeilen/Texte rausfiltern, richtig?
dann lies die Datei ein mit
danach kannst du die einzelnen Zeilen replacen/splitten oder was auch immer.
Gruss
Tsuki
also wenn du Replace nicht haben möchtest in VBS kannst du es mit
Split/Join versuchen.
Du möchtest doch zwischen den
REM ##MARKER1###
undREM ##MARKER2###
usw.die einzelnen Zeilen/Texte rausfiltern, richtig?
dann lies die Datei ein mit
Pfad = "C:\MeineDatei.txt"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set MeineDaten = FSO.OpenTextFile(Pfad,1)
MeineZeilen = Split(MeineDaten.ReadAll,VbCrlf)
' ab hier hast du alle einzelnen Zeilen in einem Array "MeineZeilen()"
MeineDaten.Close
Gruss
Tsuki
Hallo MilhouseNo1, Hallo Tsuki!
Hiermal ein Basis-Beispiel, wie es funktionieren könnte. Dabei ist es unerheblich, ob auf einen REM ein weiterer REM folgt, z.B. kein REM in der letzten Zeile.
Test.Cmd zum Aufruf der Test.vbs mit Argumenten:
wobei das 1. Argument den Pfad der Batch-Datei, das 2. Argument den Such-Text und das 3.Argument den Ersetzen-Text darstellt. Die Semikolons stehen für Zeilenumbrüche.
Test.vbs:
Die übergebene Batch-Datei (erstes Argument) wird überschrieben, insofern vorher eine Sicherungskopie anlegen.
Zusätzlich wird nicht zwischen Klein/Großschreiben unterschieden.
Gruß Dieter
Hiermal ein Basis-Beispiel, wie es funktionieren könnte. Dabei ist es unerheblich, ob auf einen REM ein weiterer REM folgt, z.B. kein REM in der letzten Zeile.
Test.Cmd zum Aufruf der Test.vbs mit Argumenten:
@echo off
cscript //nologo "E:\Test\Test.vbs" "E:\Test\Test.txt" "##MARKER1###" "##MARKER5###;hat;den;anderen;Text;ersetzt"
Test.vbs:
Dim Args, Fso, File, OldRem, Marker, Text, NewText, RemText
Set Args = WScript.Arguments
If Args.Count < 3 Then WScript.Echo "Zuwenig Argumente!": WScript.Quit
Path = Args(0): OldRem = Args(1): NewText = Replace(Args(2), ";", vbCrLf) & vbCrLf
Set Fso = CreateObject("Scripting.FileSystemObject")
Set File = Fso.OpenTextFile(Path)
Text = File.ReadAll: File.Close: RemText = Split(Text, "REM ", -1, vbTextCompare)
For Each Marker In RemText
If InStr(1, Marker, OldRem, vbTextCompare) > 0 Then
Text = Replace(Text, Marker, NewText)
Set File = Fso.CreateTextFile(Path)
File.Write Text: File.Close: Exit For
End If
Next
Zusätzlich wird nicht zwischen Klein/Großschreiben unterschieden.
Gruß Dieter