midnightmaster
Goto Top

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

Content-Key: 119210

Url: https://administrator.de/contentid/119210

Printed on: April 25, 2024 at 16:04 o'clock

Member: pieh-ejdsch
pieh-ejdsch Jun 27, 2009 at 11:55:01 (UTC)
Goto Top
for /f "tokens=1,2 delims=<" %%i in ('findstr "log="connect1"" C:\Data\connect.cfg') do if "%%j"=="214</tc>" echo ^%%i^>88^</tc^>>>%temp%\connect.tmp  
Member: Midnightmaster
Midnightmaster Jun 27, 2009 at 12:44:16 (UTC)
Goto Top
Zitat von @pieh-ejdsch:
for /f "tokens=1,2 delims=<" %%i in  ('findstr "log="connect1""  C:\Data\connect.cfg') do if "%%j"=="214</tc>" echo  ^%%i^>88^</tc^>>>%temp%\connect.tmp  

Irgendwie funktioniert das nicht! Wie muss ich das denn in die ursprüngliche Batch einbinden? Hab diverse Varianten
probiert, aber keinerlei änderung an der cfg. Sagte ich schon, das ich von der Batch-Programmierung wenig bis
gar keine ahnung habe? face-smile

Gruß
Midnightmaster
Member: bastla
bastla Jun 27, 2009 at 14:16:38 (UTC)
Goto Top
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:
@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"  
Grüße
bastla

[Edit] Zeile 3 gekürzt, sodass nicht mehr nach "214" gesucht wird [/Edit]
Member: Midnightmaster
Midnightmaster Jun 27, 2009 at 14:58:47 (UTC)
Goto Top
Cool, vielen Dank!

Mit einer kleinen änderung ist es jetzt auch egal, wie der Wert vorher war:
@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"  

Gruß
Midnightmaster


[Edit Biber] Code in Codetags gesetzt. [/Edit]
Mitglied: 77559
77559 Jun 27, 2009 at 17:25:32 (UTC)
Goto Top
Hallo Midnightmaster.

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
Member: bastla
bastla Jun 27, 2009 at 17:37:29 (UTC)
Goto Top
@77559
Vielleicht noch besser dem Vorhaben von Midnightmaster entsprechend:
sed -re "s|^(<log=\"connect1\">)[0-9]+(</tc>$)|\188\2|g" C:\Data\connect.cfg

Grüße
bastla
Mitglied: 77559
77559 Jun 27, 2009 at 17:41:42 (UTC)
Goto Top
Danke für den Hinweis bastla,

das stand auch mal so da, aber ist beim überarbeiten abhanden gekommen face-wink

Gruß