Mehrere Textstellen innerhalb einer TXT-Datei per Batch austauschen
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.
Der Fehler der kommt lautet:
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]
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.
set "Datei=%pfad%\conf\%projekt%.config.xml"
set "Von=WEBAPPS"
set "Nach=%projekt%"
set "t=%pfad%\conf\text.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "line=%%i" & set Line=!Line:%Von%=%Nach%! & echo %Line%>>"%t%"
Der Fehler der kommt lautet:
">" 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]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 153998
Url: https://administrator.de/contentid/153998
Ausgedruckt am: 25.11.2024 um 15:11 Uhr
8 Kommentare
Neuester Kommentar
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:
Vor dem ersten "
Das im nicht geposteten vorhergehenden Teil des Batches enthaltene "
Grüße
bastla
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:
setlocal
set "Datei=%pfad%\conf\%projekt%.config.xml"
set "Von=WEBAPPS"
set "Nach=%projekt%"
set "t=%pfad%\conf\text.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & call :ProcessLine
goto :eof
:ProcessLine
call set "Line=%%Line:%Von%=%Nach%%%"
setlocal enabledelayedexpansion
echo %Line%>>"%t%"
endlocal
goto :eof
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
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 ):
Anstelle von "Nach1" etc (die Anführungszeichen werden benötigt) kann natürlich auch eine Batchvariable verwendet werden, also etwa:
Noch zu beachten: Es wird Groß-/Kleinschreibung unterschieden ...
Grüße
bastla
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 ):
@echo off & setlocal
set "Datei=GroupInfo_2.txt"
set R=%temp%\Replace5.vbs
>%R% echo F = WScript.Arguments(0)
>>%R% echo Set fso = CreateObject("Scripting.FileSystemObject")
>>%R% echo T = fso.OpenTextFile(F).ReadAll
>>%R% echo T = Replace(T, "Von1", "Nach1")
>>%R% echo T = Replace(T, "Von2", "Nach2")
>>%R% echo T = Replace(T, "Von3", "Nach3")
>>%R% echo T = Replace(T, "Von4", "Nach4")
>>%R% echo T = Replace(T, "Von5", "Nach5")
>>%R% echo fso.CreateTextFile(F).Write T
for %%f in ("%Datei%") do cscript //nologo %R% "%%f"
>>%R% echo T = Replace(T, "WEBAPPS", "%projekt%")
Grüße
bastla
Hallo WiSch!
Eigentlich sollte Deine letzte Zeile funktionieren (wobei VBS kein "$" für die Funktion "
Grüße
bastla
P.S.: Mittlerweile würde sich aber schon ein "direktes" (also nicht von einem Batch erzeugtes) Script aufdrängen ...
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")
bastla
P.S.: Mittlerweile würde sich aber schon ein "direktes" (also nicht von einem Batch erzeugtes) Script aufdrängen ...