milhouseno1
Goto Top

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:
REM ##MARKER1###
bel
lie
biger
text
REM ##MARKER2###

Vielleicht hat jemand eine ähnliche Aufgabe bereits umgesetzt.

Danke
MilhouseNo1

Content-Key: 140693

Url: https://administrator.de/contentid/140693

Printed on: April 19, 2024 at 17:04 o'clock

Member: TsukiSan
TsukiSan Apr 15, 2010 at 08:24:25 (UTC)
Goto Top
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
REM ##MARKER1###
und
REM ##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
danach kannst du die einzelnen Zeilen replacen/splitten oder was auch immer.

Gruss
Tsuki
Mitglied: 76109
76109 Apr 15, 2010 at 11:12:39 (UTC)
Goto Top
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:
@echo off
cscript //nologo "E:\Test\Test.vbs" "E:\Test\Test.txt" "##MARKER1###" "##MARKER5###;hat;den;anderen;Text;ersetzt" 
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:
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
Die übergebene Batch-Datei (erstes Argument) wird überschrieben, insofern vorher eine Sicherungskopie anlegen.

Zusätzlich wird nicht zwischen Klein/Großschreiben unterschieden.

Gruß Dieter