Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Wie kann ich Text zwischen zwei Markierungen ersetzen.

Frage Entwicklung Batch & Shell

Mitglied: MilhouseNo1

MilhouseNo1 (Level 1) - Jetzt verbinden

15.04.2010 um 10:04 Uhr, 2662 Aufrufe, 2 Kommentare

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
Mitglied: TsukiSan
15.04.2010 um 10:24 Uhr
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
01.
Pfad = "C:\MeineDatei.txt" 
02.
Set FSO = CreateObject("Scripting.FileSystemObject") 
03.
Set MeineDaten = FSO.OpenTextFile(Pfad,1) 
04.
MeineZeilen = Split(MeineDaten.ReadAll,VbCrlf) 
05.
' ab hier hast du alle einzelnen Zeilen in einem Array "MeineZeilen()" 
06.
MeineDaten.Close
danach kannst du die einzelnen Zeilen replacen/splitten oder was auch immer.

Gruss
Tsuki
Bitte warten ..
Mitglied: 76109
15.04.2010 um 13:12 Uhr
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:
01.
@echo off 
02.
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:
01.
Dim Args, Fso, File, OldRem, Marker, Text, NewText, RemText 
02.
 
03.
Set Args = WScript.Arguments 
04.
 
05.
If Args.Count < 3 Then WScript.Echo "Zuwenig Argumente!":  WScript.Quit 
06.
 
07.
Path = Args(0):  OldRem = Args(1):  NewText = Replace(Args(2), ";", vbCrLf) & vbCrLf 
08.
 
09.
Set Fso = CreateObject("Scripting.FileSystemObject") 
10.
Set File = Fso.OpenTextFile(Path) 
11.
 
12.
Text = File.ReadAll:  File.Close:  RemText = Split(Text, "REM ", -1, vbTextCompare) 
13.
 
14.
For Each Marker In RemText 
15.
    If InStr(1, Marker, OldRem, vbTextCompare) > 0 Then 
16.
        Text = Replace(Text, Marker, NewText) 
17.
        Set File = Fso.CreateTextFile(Path) 
18.
        File.Write Text:  File.Close:  Exit For 
19.
    End If 
20.
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
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Switche und Hubs
LAG zwischen Cisco SG300 und Dlink DGS1100 herstellen - wie? (20)

Frage von White-Rabbit2 zum Thema Switche und Hubs ...

Windows Tools
Kleines Tool zwischen Ticketsystem und DMS (4)

Frage von Peterz zum Thema Windows Tools ...

Batch & Shell
gelöst Suchen ersetzen mit Sonderzeichen (2)

Frage von GNLen1 zum Thema Batch & Shell ...

Debian
Keine Verbindung zwischen zwei Debian Maschinen (1)

Frage von Philippe27 zum Thema Debian ...

Heiß diskutierte Inhalte
Windows Installation
Eine etwas (wirklich) speziellere Frage: Windows 10-Installation über (11)

Frage von DerFurrer zum Thema Windows Installation ...

Linux
gelöst Boot failed: not a bootable disk (10)

Frage von Fleckmen zum Thema Linux ...

Windows Server
Probleme mit Client Software Zugriff auf Windows Server 2012 (8)

Frage von it-kolli zum Thema Windows Server ...

Multimedia & Zubehör
gelöst Iphone 6 prob (8)

Frage von jensgebken zum Thema Multimedia & Zubehör ...