Anführungszeichen aus Textdatei auslesen und schreiben
Hi!
Ich möchte gerne per Batch in einer Configdatei einen Wert verändern, was auch teilweise funktioniert.
Inhalt der Config:
Diverse Werte...
.
.
<log="connect1">214</tc>
.
.
Soll verändert werden in z.B.:
<log="connect1">88</tc>
Auszug aus der Batch:
@echo off & setlocal enabledelayedexpansion
set "Datei=C:\Data\connect.cfg"
set "Von=214"
set "Nach=88"
set "t=%temp%\connect.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set "Line=!Line:%Von%=%Nach%!" & >>"%t%" echo !Line!
move "%t%" "%Datei%"
Nachteil hierbei ist, das der vorherige Wert immer 214 sein muss (großer nachteil) und andere Werte in der Config die auch 214 sind
auch in 88 geändert werden.
Problem ist, das die zuweisung in Anführungszeichen steht (Nicht zu ändern). Hab da schon viel mit der Syntax herumgebastelt, aber
nichts brauchbares erreicht!
Sowas kommt dabei heraus wenn ich am basteln bin:
<log=""connect1">88</tc>
oder bei ignorierung des vorherigen Wertes:
<log="connect1">88</tc>>214</tc>
Am besten wäre es, wenn der vorherige Wert egal wäre und einfach nur der neue gesetzt werden würde!
Gruß
Midnightmaster
Ich möchte gerne per Batch in einer Configdatei einen Wert verändern, was auch teilweise funktioniert.
Inhalt der Config:
Diverse Werte...
.
.
<log="connect1">214</tc>
.
.
Soll verändert werden in z.B.:
<log="connect1">88</tc>
Auszug aus der Batch:
@echo off & setlocal enabledelayedexpansion
set "Datei=C:\Data\connect.cfg"
set "Von=214"
set "Nach=88"
set "t=%temp%\connect.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set "Line=!Line:%Von%=%Nach%!" & >>"%t%" echo !Line!
move "%t%" "%Datei%"
Nachteil hierbei ist, das der vorherige Wert immer 214 sein muss (großer nachteil) und andere Werte in der Config die auch 214 sind
auch in 88 geändert werden.
Problem ist, das die zuweisung in Anführungszeichen steht (Nicht zu ändern). Hab da schon viel mit der Syntax herumgebastelt, aber
nichts brauchbares erreicht!
Sowas kommt dabei heraus wenn ich am basteln bin:
<log=""connect1">88</tc>
oder bei ignorierung des vorherigen Wertes:
<log="connect1">88</tc>>214</tc>
Am besten wäre es, wenn der vorherige Wert egal wäre und einfach nur der neue gesetzt werden würde!
Gruß
Midnightmaster
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 119210
Url: https://administrator.de/forum/anfuehrungszeichen-aus-textdatei-auslesen-und-schreiben-119210.html
Ausgedruckt am: 21.02.2025 um 11:02 Uhr
7 Kommentare
Neuester Kommentar
Hallo Midnightmaster und willkommen im Forum!
Die Bearbeitung von HTML-/XML-Dateien mit Batch ist wegen der besonderen Bedeutung von "<" und ">" in der CMD-Shell etwas mühsam (weshalb ich dann eher zu VBS greife), sollte sich aber vielleicht so trotzdem machen lassen:
Grüße
bastla
[Edit] Zeile 3 gekürzt, sodass nicht mehr nach "214" gesucht wird [/Edit]
Die Bearbeitung von HTML-/XML-Dateien mit Batch ist wegen der besonderen Bedeutung von "<" und ">" in der CMD-Shell etwas mühsam (weshalb ich dann eher zu VBS greife), sollte sich aber vielleicht so trotzdem machen lassen:
@echo off & setlocal
set "cfg=C:\Data\connect.cfg"
set "alt=<log=\"connect1\">"
set "neu=^<log="connect1"^>88^</tc^>"
move "%cfg%" "%cfg%.bak"
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%cfg%.bak"') do (
echo "%%j"|findstr /c:"%alt%">nul && (echo %neu%) || echo\%%j
)>>"%cfg%"
del "%cfg%.bak"
bastla
[Edit] Zeile 3 gekürzt, sodass nicht mehr nach "214" gesucht wird [/Edit]

Hallo Midnightmaster.
Hier noch ein Einzeiler mit Sed und Regular Expressions.
^und $ sind Anker für Zeilenanfang/-Ende.
Anführungszeichen müssen mit \ escaped werden,
Klammern kennzeichnen Bereiche, die in die Ausgabe mit Angabe von \1 für das erste Paar etc übernommen werden können.
Sed bekommt man u.a, Hier
Und hier ein Tutorium
Gruß
LotPings
Hier noch ein Einzeiler mit Sed und Regular Expressions.
sed -re "s|^(<log=\"connect1\">)214(</tc>$)|\188\2|g" test.txt
^und $ sind Anker für Zeilenanfang/-Ende.
Anführungszeichen müssen mit \ escaped werden,
Klammern kennzeichnen Bereiche, die in die Ausgabe mit Angabe von \1 für das erste Paar etc übernommen werden können.
Sed bekommt man u.a, Hier
Und hier ein Tutorium
Gruß
LotPings

Danke für den Hinweis bastla,
das stand auch mal so da, aber ist beim überarbeiten abhanden gekommen
Gruß
das stand auch mal so da, aber ist beim überarbeiten abhanden gekommen
Gruß