Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 2682 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
Grafik
gelöst Scan mit Markierung (5)

Frage von jojo0411 zum Thema Grafik ...

Notebook & Zubehör
gelöst Taste ersetzen - wie? (6)

Frage von honeybee zum Thema Notebook & Zubehör ...

E-Mail
Outlook 2010 Markierungen verschwienden (3)

Frage von xaver-2 zum Thema E-Mail ...

Neue Wissensbeiträge
Ubuntu

Ubuntu 17.10 steht zum Download bereit

(3)

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(8)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Windows 10
Seekrank bei Windows 10 (18)

Frage von zauberer123 zum Thema Windows 10 ...

Windows 10
Windows 10 Fall Creators Update Fehler (13)

Frage von ZeroCool23 zum Thema Windows 10 ...

Router & Routing
gelöst Getrenntes Routing bei VoIP und Daten (12)

Frage von Hobbystern zum Thema Router & Routing ...