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, 2666 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 ..
Ähnliche Inhalte
Microsoft Office
gelöst Excel VBA In Userform Maske Text nach Eingabe löschen (1)

Frage von kluthi69 zum Thema Microsoft Office ...

Windows Server
Windows 2003 Domäne durch 2016er ersetzen (3)

Frage von Cenion zum Thema Windows Server ...

Netzwerkmanagement
gelöst VPN zwischen zwei Routern ohne gleiche IP (17)

Frage von masta123 zum Thema Netzwerkmanagement ...

Sicherheitsgrundlagen
Sicherheitsrichtlinien und Standartänderung zwischen 2003 und 2008 (2)

Frage von LordNicon79 zum Thema Sicherheitsgrundlagen ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Komplett neues Netzwerk, Ubiquiti WLAN, Router, Switch (16)

Frage von Freak-On-Silicon zum Thema LAN, WAN, Wireless ...

CMS
Lokales Wordpress im LAN - wie aufsetzen? (15)

Frage von Static zum Thema CMS ...

Backup
Backup Wochen- Monats- Jahressicherung (13)

Frage von Meterpeter zum Thema Backup ...

RedHat, CentOS, Fedora
Fedora, RedHat, Centos: DNS-Search Domain setzen (13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...