Top-Themen

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
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, 4408 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 ..
Ähnliche Inhalte
Batch & Shell
Per Batch Textstellen vertauschen
gelöst Frage von tefrackyBatch & Shell7 Kommentare

Hallo, es geht um folgenden Dateiausschnitt aus einer Test.xml: Leider hat der Server, auf den ich keinen Zugriff habe, ...

Microsoft Office
Maximalwerte aus mehreren .txt Dateien Sammeln
gelöst Frage von RolforMicrosoft Office2 Kommentare

Hallo! Habe leider sehr wenig erfahrung mit Excel und Makros und hoffe ich suche hier an der richtigen Stelle ...

Batch & Shell
Per Batch eine XLS-Datei in eine TXT-Datei umwandeln
Frage von skiing69Batch & Shell5 Kommentare

Hallo Wissende, ich möchte täglich automatisiert, ohne das Programm Excel zu öffnen, eine XLS-Datei in eine TXT-Datei (Feldtrennzeichen als ...

Batch & Shell
Error - Batch findet die TXT - Dateien nicht wenn man die Batch Datei als Administrator ausführt
gelöst Frage von TheVo1dBatch & Shell14 Kommentare

Hallo alle zusammen Ich habe ein Problem mit meiner Batch Datei. Aber zuerst was ich genau machen will/sollte(ein bisschen ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 6 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 10 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 10 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 13 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server15 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...