Batch Powershell oder Batch, variable Stelle in cfg Datei ändern

humpix

Lt. Junior Grade
Registriert
Sep. 2005
Beiträge
317
Hallo Leute,

Ich möchte automatisch einen Wert in einer CFG ändern. Wäre mit Findstr soweit kein Problem, allerdings ist die Zeile an einer variablen Stelle und auch noch mehrfach vorhanden - ich darf aber nur eine ändern.

Beispielabschnitt der cfg:

// Hydro Polygons - Generic River - Perennial
[Texture.197]
Name=Hydro_Polygons_Generic_River_Perennial
Color=FF2938FF
guid={E5DD8B66-8E86-4E7E-BE58-6E94A91C8FF0}
Textures=OCEAN_SEA_LARGE_LAKE_0
FlattenMode=slope
FlattenPriority=41000
ExcludeAutogen=Yes
RenderToTexture=Yes
RenderPriority=81000
Water=Yes

// Hydro Polygons - Generic Canal/Channel - Perennial
[Texture.198]
Name=Hydro_Polygons_Generic_Canal_Channel_Perennial
Color=FF2938FF
guid={C4E055AB-0855-4D5C-8FB9-3318E1C8AB8A}
Textures=OCEAN_SEA_LARGE_LAKE_0
FlattenMode=slope
FlattenPriority=41000
ExcludeAutogen=Yes
RenderToTexture=Yes
RenderPriority=81000
Water=Yes


Die FlattenMode=slope soll auf FlattenMode=none geändert werden, allerdings nur die im Abschnitt // Hydro Polygons - Generic River - Perennial


Hab das hier schon versucht, brings aber nicht zum laufen:
@echo off & setlocal
set "cfg=D:\terrain.cfg"
set "Suche1=// Hydro Polygons - Generic River - Perennial"
set "Suche2=FlattenMode=slope"
set "Neu=FlattenMode=none"

set Zeile=
for /f "delims=:" %%i in ('findstr /b /n /c:"%Suche1%" "%cfg%"') do set Zeile=%%i
if not defined Zeile echo "%Suche1%" nicht gefunden! & pause & goto :eof

set /a Zeile+=1
for /f "tokens=1-2 delims=:" %%i in ('findstr /b /n /c:"%Suche2%" "%cfg%"') do (
if %%i neq %Zeile% (echo\%%j) else (echo %Neu%)
)>>"%cfg%"



Hat jemand einen eleganten Tipp dafür?
"Sucher zuerst nach x, dann ab diesere Zeile nach y und dann ändere die Zeile"

LG und Danke!
 
Zuletzt bearbeitet:
Keine Ahnung, wie groß die cfg-Dateien sind, aber du könntest beispielsweise auch einfach die Originaldatei kopieren und den Wert in der Kopie ändern. Dann benutzt du einfach eine Batchdatei als Switch zum Umbennnen der jeweiligen Cfg und wechselst so nach Bedarf. Beispiel:

- terrain.cfg
- terrainCopy.cfg

-> Batch ausführen

- terrainCopy.cfg
- terrain.cfg

Sollte leichter sein, als spezifisch in der Datei rumzudoktorn.
 
Ne, leider - das geht in dem Fall nicht.
1 Prozess ändert die cfg laufend und baut auch wichtige Sachen dazu. Nur eben den einen String verhaut er mir jedes Mal. Ich würde gerne einen Task bauen, der nur den einen String wieder zurück ändert.

Mit copy hau ich auch die wichtigen Änderungen wieder raus...
 
Zuletzt bearbeitet:
Mit Bash und sed geht sowas, Du müsstest eine Alternative für Windows finden. Oder eben cygwin + sed.
 
Danke für den Tipp!

Bräuchte das für Windows bzw. die Idee ist auch das allen Usern des Produkts frei zur Verfügung zu stellen. Das "Problem" mit dieser cfg. (lange Geschichte und nicht anders lösbar) haben sehr viele. Daher eignet sich eine Batch oder eine in eine exe verpakte PS eher - soweit ich gelesen habe ist cygwin + sed eher was für mich, aber nicht für alle...

Inzwischen bin ich mit der Batch ein wenig weiter - bzw. ich weiß was nicht klappt. Der findstr findet den String einfach nicht...
for /f "delims=:" %%i in ('findstr /b /n /c:"%Suche1%" "%cfg%"') do set Zeile=%%i

Kennt jemand die richtige syntax für diesen Befehl? Komme mit der Hilfe auch nach 2h nicht zum Ergebnis...
Den Rest bekomme ich sicher hin...

LG
 
Zurück
Oben