torch88
Goto Top

ini-Datei mit for Schleife auslesen, Zeilen, die mit Semikolon beginnen, fehlen

Geht um folgendes:

rules.ini-Datei (Command and Conquer-Alarmstufe Rot 1) soll mittels batch-Datei bearbeitet werden.
zB Money=10000 durch Money=20000 ersetzen etc. (wir basteln bei unseren LANs gerne an den einzelnen Parametern des Games herum)
Suchen & ersetzen ist mir zu aufwändig, da teilweise 10x der gleiche Wert ersetzt werden muss und das mit einer Batch einfach userfreundlicher wäre.

OS Win XP Prof SP2

Auszug aus der Batch:

: startkapital

SET /P startkapital="Startkapital: "  

SET ersetzen="Money=10000"  

For /F "tokens=1,2 delims=" %%A in (rules.ini) Do (  
Echo %%A>>temp.tmp
If "%%A"==%ersetzen% (  
Echo Money=%startkapital%>>temp.tmp))
pause
type temp.tmp | find /v %ersetzen%>rules.ini

DEL temp.tmp

GOTO menu
Nun aber folgendes Problem:

Zeilen die mit einem Strichpunkt beginnen, werden beim bearbeiten gelöscht
(fehlen bereits in der temp.tmp)

Die Zeilen mit den Strichpunkten am Anfang werden jedoch vom Game als Sprungmarken verwendet, sprich müssen vorhanden bleiben...


Bzw. als 2.te Frage:

Gibt es eine Möglichkeit, nach einem kompletten "Zeilenblock" (also mehrere aufeinanderfolgende Zeilen) zu suchen und diese zu ersetzen (meine Lösung ist ja nur für einzelne Zeilen)


Danke schon mal für eure Hilfe!

Gruß

torch

Content-Key: 121350

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

Printed on: April 24, 2024 at 07:04 o'clock

Member: bastla
bastla Jul 26, 2009 at 11:32:04 (UTC)
Goto Top
Auch Dir ein freundliches Hallo, torch88!

Versuch es mit folgender Schreibweise:
For /F "eol=§ tokens=1,2 delims=" %%A in (rules.ini) Do (
Anstelle von "§" kannst Du ein beliebiges in der Datei nicht vorkommendes Zeichen verwenden.

Hintergrund: ";" steht defaultmäßig für "end of line", wodurch der Rest der Zeile igrnoriert wird.

Grüße
bastla
Member: torch88
torch88 Jul 26, 2009 at 11:41:05 (UTC)
Goto Top
Perfekt - Danke bastla!

Noch eine Frage, weißt du zufällig wie ich die oben zusätzlich erwähnte Problemstellung lösen kann - also, dass ich nach kompletten "Zeilenblöcken" suchen kann?

Hintergrund:

Mehrere Absätze haben teils gleiche Zeilen, ich müsste diese Zeilen aber nur in einem bestimmten Block austauschen - also entweder genau die Zeile in diesem Block oder den gesamten Block "auswählen" (evtl. auch Zeile nummer xy, wenn das möglich bzw einfacher ist)

Danke!
Member: bastla
bastla Jul 26, 2009 at 12:04:53 (UTC)
Goto Top
Hallo torch88!

Flexibelste Variante:
Je eine Texdatei "Alt.txt" und "Neu.txt" mit dem gesamten Block erstellen und das Ersetzen mit einem VBScript erledigen:
Ini = "D:\rules.ini"  

Alt = "D:\Alt.txt"  
Neu = "D:\Neu.txt"  
Set fso = CreateObject("Scripting.FileSystemObject")  
T = fso.OpenTextFile(Ini).ReadAll
A = fso.OpenTextFile(Alt).ReadAll
N = fso.OpenTextFile(Neu).ReadAll
fso.CreateTextFile(Ini, True).Write Replace(T, A, N)
Bei Bedarf ließe sich das Ganze auch in einen Batch "einbetten", dürfte aber wohl nicht nötig sein ...

Grüße
bastla
Member: torch88
torch88 Jul 28, 2009, updated at Oct 18, 2012 at 16:38:53 (UTC)
Goto Top
habs mit absolutem zeilenbezug hinbekommen, siehe:

Per echo Command eine bestimmte zeile überschreiben ?

aber hab keine ahnung wie ich den fehler mit der [ lösen kann...

gruß torch