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
GELÖST

Mehrere Textstellen innerhalb einer TXT-Datei per Batch austauschen

Frage Entwicklung Batch & Shell

Mitglied: WiSch

WiSch (Level 1) - Jetzt verbinden

28.10.2010, aktualisiert 16:23 Uhr, 4349 Aufrufe, 8 Kommentare

Hallo.

Ich habe das Forum hier schon durchsucht, dabei einige möglichen Lösungen gefunden, bring es aber irgendwie nicht ans Laufen... ;-(

Mit nachfolgendem Script versuche ich in einer vorhandenen Datei den Begriff "WEBAPPS" durch einen Neuen zu ersetzen, den ich zuvor in die Variable %projekt% gepackt habe.
Die zweite verwendete Variable %pfad% ist ebenfalls korrekt gefüllt, denn zuvor laufende Dateikopieraktionen laufen einwandfrei.

01.
set "Datei=%pfad%\conf\%projekt%.config.xml"  
02.
set "Von=WEBAPPS" 
03.
set "Nach=%projekt%" 
04.
set "t=%pfad%\conf\text.tmp"  
05.
if exist "%t%" del "%t%"  
06.
for /f "usebackq delims=" %%i in ("%Datei%") do set "line=%%i" & set Line=!Line:%Von%=%Nach%! & echo %Line%>>"%t%" 
Der Fehler der kommt lautet:
01.
">" ist syntaktisch an dieser Stelle nicht verarbeitbar.
Was mache ich falsch?

Letztlich möchte ich dann mehrere Begriffe in dieser einen Datei austauschen... muß ich dafür obigen (wenn lauffähig) Code mehrfach ausführen, oder gibt es eine elegantere Lösung?

Danke für Eure Hilfe...


[edit]
Ich habe es zwischenzeitlich mit diesem Script hier aus dem Forum gelöst, aber
a) Wie bekomme ich dort noch ein drittes und viertes Replace mit rein?
b) würde ich das gerne lieber ohne VBS lösen...
[/edit]
Mitglied: bastla
28.10.2010 um 17:15 Uhr
Hallo WiSch!

Zu a)
So, wie die beiden bisherigen auch schon ...

Zu b)
Gerade XML oder HTML enthalten mit (zumindest) "<" und ">" Sonderzeichen, die in Batch eine besondere Bedeutung haben und daher die Verarbeitung erschweren - insofern ist VBS mE jedenfalls die bessere Wahl. Wenn Du VBS (warum eigentlich?) vermeiden willst, könntest Du er mit dem folgenden abgewandelten Batch versuchen:
01.
setlocal 
02.
set "Datei=%pfad%\conf\%projekt%.config.xml" 
03.
set "Von=WEBAPPS" 
04.
set "Nach=%projekt%" 
05.
set "t=%pfad%\conf\text.tmp" 
06.
if exist "%t%" del "%t%" 
07.
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & call :ProcessLine 
08.
goto :eof 
09.
 
10.
:ProcessLine 
11.
call set "Line=%%Line:%Von%=%Nach%%%" 
12.
setlocal enabledelayedexpansion 
13.
echo %Line%>>"%t%" 
14.
endlocal 
15.
goto :eof
Vor dem ersten "goto :eof" kann natürlich auch eine Fortsetzung des Batches stehen.

Das im nicht geposteten vorhergehenden Teil des Batches enthaltene "enabledelayedexpansion" sollte, wenn es nicht in diesem angesprochenen Teil benötigt wurde, entfernt werden ...

Grüße
bastla
Bitte warten ..
Mitglied: WiSch
28.10.2010 um 17:41 Uhr
Hallo Bastla,

auch mit der von Dir geposteten Lösung bekomme ich (anscheinend zu Zeile 13?) die gleiche Fehlermeldung!?

Ich glaube aber zwischenzeitlich auch, dass es nicht an einem ">" im Code sondern an einem aus dem XML-Inhalt liegt... also doch VBS?

Hab versucht, ein drittes Replace in die VBS zu bekommen, es aber mit dem Syntax wieder nicht hinbekommen?

Insgesamt habe ich 5 Begriffe auszutauschen, kannst Du mir mit dem Syntax helfen?


DANKE,
WiSch
Bitte warten ..
Mitglied: bastla
28.10.2010 um 18:05 Uhr
Hallo WiSch!

Du beziehst Dich vermutlich auf den ersten Batch/VBS-Ansatz - der ließe sich auch etwas übersichtlicher gestalten (das Original hatte vermutlich ohnehin ich selbst mal verbrochen ):
01.
@echo off & setlocal 
02.
set "Datei=GroupInfo_2.txt" 
03.
 
04.
set R=%temp%\Replace5.vbs 
05.
>%R%  echo F = WScript.Arguments(0) 
06.
>>%R% echo Set fso = CreateObject("Scripting.FileSystemObject") 
07.
>>%R% echo T = fso.OpenTextFile(F).ReadAll 
08.
>>%R% echo T = Replace(T, "Von1", "Nach1") 
09.
>>%R% echo T = Replace(T, "Von2", "Nach2") 
10.
>>%R% echo T = Replace(T, "Von3", "Nach3") 
11.
>>%R% echo T = Replace(T, "Von4", "Nach4") 
12.
>>%R% echo T = Replace(T, "Von5", "Nach5") 
13.
>>%R% echo fso.CreateTextFile(F).Write T  
14.
 
15.
for %%f in ("%Datei%") do cscript //nologo %R% "%%f"
Anstelle von "Nach1" etc (die Anführungszeichen werden benötigt) kann natürlich auch eine Batchvariable verwendet werden, also etwa:
>>%R% echo T = Replace(T, "WEBAPPS", "%projekt%")
Noch zu beachten: Es wird Groß-/Kleinschreibung unterschieden ...

Grüße
bastla
Bitte warten ..
Mitglied: WiSch
29.10.2010 um 08:51 Uhr
Hallo Bastla...

ich denke auch, daß der erste Code von Dir war...

So funktioniert es bestens, und bezügl. der Groß-/Kleinschreibung... das hilft mir sogar, denn in den Vorgabedateien wurden die auszutauschenden Platzhalter extra zur besseren Identifizierung komplett groß geschrieben!

Also Fall gelöst... vielen Dank für die schnelle Hilfe.


Grüße,
WiSch


[Edit]
Nun hab ich doch noch ein Problem... an einer Stelle ist es notwendig, nicht nur ein feststehenden Begriff wie z.B. WEBAPPS auszutauschen, sondern über zwei Zeilen zu gehen...
Im Auszutauschenden Text ist also eine Zeilenschaltung... geht das auch?
Beispiel aus
text</Property>
</Property>
soll
text</Property>
</Property>
-->
werden...
Hintergrund: Ich muß da einen kompletten Ast aus dem XML ausblenden und kann die exakte Stelle nicht anders identifizieren, da das </Property> öfters vorkommt.
Allerdings steht das immer in der selben Zeile der Datei, vielleicht kann man da was - in der Kombination mit obiger Lösung - mit machen?
[/Edit]
Bitte warten ..
Mitglied: bastla
29.10.2010 um 10:11 Uhr
Hallo WiSch!

Die Zeile dafür müsste etwa so aussehen:
>>%R% echo T = Replace(T, "text</Property>"^&vbCrLf^&"</Property>", "text</Property>"^&vbCrLf^&"</Property>")
Soferne Du keine "Windows"-Zeilenschaltungen in der Datei hättest, wäre "vbCrLf" durch "vbCr" oder "vbLf" zu ersetzen ...

Grüße
bastla
Bitte warten ..
Mitglied: WiSch
29.10.2010 um 14:22 Uhr
Hallo Bastla.

Perfekt... läuft wie es soll, danke! Es war übrigends ein vbLf ...

Ähm, kennst Du das mit dem gereichten kleinen Finger? ...

Jetzt kommt mir doch noch ein Sonderzeichen in den Weg, sodas folgende Zeile nicht funktioniert:
01.
>>%R% echo T = Replace(T, "<Property Name="JobSpooler", "<!-- <Property Name="JobSpooler")
Ich hab auch schon versucht das Anführungszeichen vor JobSpooler mit einem ^ zu maskieren, hilft nicht.
Dann habe ich hier im Forum auch noch den Hinweis gesehen, daß ggf. auch das maskiert nochmal werden muß, aber auch ein und ^ davor hilft nicht...
Zuletzt habe ich nochmal forsch ein
01.
>>%R% echo T = Replace(T, "<Property Name="^&Chr$(34)^&"JobSpooler", "<!-- <Property Name="^&Chr$(34)^&"JobSpooler")
versucht, was aber leider auch nicht funktioniert...

Weißt Du hier nochmal Rat?
Bitte warten ..
Mitglied: bastla
29.10.2010 um 16:06 Uhr
Hallo WiSch!

Eigentlich sollte Deine letzte Zeile funktionieren (wobei VBS kein "$" für die Funktion "Chr()" benötigt), aber Du könntest es auch so versuchen:
>>%R% echo T = Replace(T, "<Property Name=""JobSpooler", "<!-- <Property Name=""JobSpooler")
Grüße
bastla

P.S.: Mittlerweile würde sich aber schon ein "direktes" (also nicht von einem Batch erzeugtes) Script aufdrängen ...
Bitte warten ..
Mitglied: WiSch
29.10.2010 um 16:20 Uhr
Hallo Bastla...

...es läuft nun auch in diesem Punkt! Nochmals Danke.

Zur Rückinfo:

Mein Versuch mit chr() läuft auch... wenn ich das "$" weglasse.
Deine Variante mit doppeltem Anführungszeichen läuft ebenfalls...

Mann, jetzt muß ich mich auch noch entscheiden!

Sollte ich jetzt nochwas finden, dann starte ich einen neuen Thread.

Danke und Grüße,
WiSch
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Ungewöhnliche Txt.Datei-Abfrage mit Batch (3)

Frage von DaTobsn zum Thema Batch & Shell ...

Webentwicklung
HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

Batch & Shell
gelöst Mehrere PDF-Dateien per Batch zusammenfügen (1)

Frage von Grimmli zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...