papajo
Goto Top

Einen Wert unter einer Klasse in einer Ini-datei per Batch ändern

Hallo Community,

ich bin im Batch schreiben ein Anfänger und hab ein kleines Problem.
Probiere schon seit ein paar Tagen aber so richtig wills nicht funktionieren.


Habe es schon mit dem Vorschlag von bastla in der Frage: 104583
probiert .

Hatte das Batch schon so weit das es mir ne zusätzliche Zeile eingefügt hat.
Jetzt bricht es mir aber nach dem umbenennen in bak ab.
Kann mir dabei bitte jemand helfen??
Danke schon im Voraus!!
Grüßle Joe

Zu meinem Problem:

Ich habe eine .ini Datei mit der Klasse, Wert und dem Parameter :

[HP5P,WENGERMP]
Muster10A=-968,-292

nun möchte ich den Parameter in ändern:

[HP5P,WENGERMP]
Muster10A=-1028,-292

Die Quell Datei sollte erhalten bleiben.

Mein Versuch:

@echo off & setlocal
set "ini=C:\Dokumente und Einstellungen\user\Desktop\blank08.ini"
set "bak=%ini%.bak"
set "Suche=[HP5P,WENGERMP]"
set "Neu=Muster10A=-1028,-292"

move "%ini%" "%bak%"

set Zeile=
for /f "tokens=1-2 delims=:" %%i in ('findstr /b /n /c:"%Suche%" "%bak%"') do set Zeile=%%i
if not defined Zeile echo "%Suche%" nicht gefunden! & pause & goto :eof


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

Content-Key: 112530

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

Printed on: April 23, 2024 at 11:04 o'clock

Member: bastla
bastla Mar 29, 2009 at 13:24:39 (UTC)
Goto Top
Hallo papajo und willkommen im Forum!

Eigentlich wäre nur eine Kleinigkeit an der letzten Zeile zu ändern - die sollte eher so aussehen:
for /f "tokens=1-2 delims=:" %%i in ('findstr /n "^" "%bak%"') do (if %%i neq %Zeile% (echo\%%j) else (echo %Neu%))>>"%ini%"
Grüße
bastla
Member: papajo
papajo Mar 29, 2009 at 18:41:06 (UTC)
Goto Top
Hey Bastla,

danke für die schnelle Antwort.

Ja funktioniert.
Nur fügt das batch nun eine zusätzliche zeile ein und lässt die alte Zeile stehen, anstatt die betreffende zu überschreiben.

Kann man da irgend was machen?

Grüße
papajo
Member: bastla
bastla Mar 29, 2009 at 19:32:16 (UTC)
Goto Top
Hallo papajo!
Nur fügt das batch nun eine zusätzliche zeile ein und lässt die alte Zeile stehen, anstatt die betreffende zu überschreiben.
Das sollte eigentlich nur geschehen, wenn die zu ersetzende Zeile nicht unmittelbar auf die Zeile mit dem Suchbegriff (hier also "[HP5P,WENGERMP]") folgt (da nicht auf den Inhalt der Zeile, sondern auf die Position geprüft wird) - ist das der Fall?

Wenn ja und der Abstand konstant ist (also zB dritte Zeile nach "[HP5P,WENGERMP]"), müsstest Du nur die Zahl in der vorletzten Batchzeile anpassen (ím Beispiel daher 3 anstatt 1).
Falls die zu ersetzende Zeile eindeutig ist, kannst Du aber alternativ die folgende Variante versuchen:
@echo off & setlocal
set "ini=C:\Dokumente und Einstellungen\user\Desktop\blank08.ini"   
set "bak=%ini%.bak"  
set "Suche=Muster10A="  
set "Neu=Muster10A=-1028,-292"  

move "%ini%" "%bak%"  
for /f "tokens=1-2 delims=:" %%i in ('findstr /n "^" "%bak%"') do (echo %%j|findstr /b /c:"%Suche%">nul &&(echo %Neu%)||(echo\%%j))>>"%ini%"  
Hier wird jede Zeile, die mit dem Suchbegriff (also "Muster10A=") beginnt, durch die neue Zeile ersetzt. Falls Groß-/Kleinschreibung nicht übereinstimmen muss (also etwa auch "Muster10a" gefunden werden soll), kann vor dem "/b" des letzten "findstr" noch ein "/i" eingefügt werden.

Grüße
bastla
Member: papajo
papajo Mar 29, 2009 at 21:58:28 (UTC)
Goto Top
Hey Bastla,

Das sollte eigentlich nur geschehen, wenn die zu ersetzende Zeile
nicht unmittelbar auf die Zeile mit dem Suchbegriff (hier also
"[HP5P,WENGERMP]") folgt (da nicht auf den Inhalt der Zeile,
sondern auf die Position geprüft wird) - ist das der Fall?

Wenn ja und der Abstand konstant ist (also zB dritte Zeile nach
"[HP5P,WENGERMP]"), müsstest Du nur die Zahl in der
vorletzten Batchzeile anpassen (ím Beispiel daher 3 anstatt
1).

Ja war so, ich habs jetzt mal so probiert und es funktioniert auch. face-smile)

Beendet jetzt aber mit dem echo Batch abbrechen, OK.

Das meint doch das die batch abgebrochen wurde und nicht normal beendet, oder nicht??

Die ini wird aber richtig geändert und geschrieben.


@echo                                       Achtung
@echo                            blank08.ini 
@echo                                      wird geaendert !! 
@echo.
@echo                         Wirklich aendern ??
@echo .
@echo                        Wenn NEIN, eine Taste druecken.
@echo off  
WAIT 5 KEY
IF ERRORLEVEL 1 goto ex  
IF NOT ERRORLEVEL 1 goto off
  
:off 
@echo Batch startet jetzt
@echo off
setlocal
set "ini=C:\Dokumente und Einstellungen\user\Desktop\blank08.ini"   
set "bak=%ini%.bak"   
set "Suche=[HP5P,WENGERMP]"   
set "Neu=Muster10A=-1028,-292"   

move "%ini%" "%bak%"   

set Zeile= 
for /f "tokens=1-2 delims=:" %%i in ('findstr /b /n /c:"%Suche%" "%bak%"') do set Zeile=%%i   
if not defined Zeile echo "%Suche%" nicht gefunden! & pause & goto :eof  

set /a Zeile+=18
for /f "tokens=1-2 delims=:" %%i in ('findstr /n "^" "%bak%"') do (if %%i neq %Zeile%   

(echo\%%j) else (echo %Neu%))>>"%ini%"  

:ex
@echo Batch abbrechen, OK
@echo off
pause & goto :eof

^[Edit Biber] Codetags gesetzt. [Edit]
Member: bastla
bastla Mar 30, 2009 at 05:39:41 (UTC)
Goto Top
Hallo papajo!
Beendet jetzt aber mit dem echo Batch abbrechen, OK.

Das meint doch das die batch abgebrochen wurde und nicht normal beendet, oder nicht??
Die Meldung am Ende stammt von Deinen zusätzlichen Zeilen - wenn Du vor der Zeile
:ex
noch eine Zeile
goto :eof
einfügst hat sich das auch erledigt.

Grüße
bastla
Member: papajo
papajo Mar 30, 2009 at 16:11:28 (UTC)
Goto Top
Hallo Bastla,

super jetzt funktionierts.

Nochmals vielen Dank für Deine schnelle Hilfe.

Denke
Problem gelöst!
Member: focion00
focion00 Apr 16, 2010 at 15:10:59 (UTC)
Goto Top
Hallo,

ich bin neu hier und da meine Aufgabenstellung eigentlich der oben genannten entspricht, häng ich mich mal hier noch dran, obwohl bereits als gelöst markiert. Ich hoffe das geht in Ordnung.

Der Abschnitt sieht folgendermassen aus und das g (könnte auch ein anderer Buchstabe sein) soll entfernt werden.

0:Mode5=1024x768x32x70:1
0:Mode6=1024x768x32x75:1
[LANGUAGE]
Country=g
Das Ergebnis sieht dann leider so aus:
0
0
[LANGUAGE]
Country=g

Es wird also zuviel gelöscht. Als absoluter Anfänger habe ich trotz langer Suche keinen Fehler finden können und hoffe, dass mir hier vielleicht jemand auf die Sprünge helfen kann. Mein Versuch:

@echo off & setlocal
set "ini=ig2.ini"  
set "bak=%ini%.bak"  
set "Suche=[LANGUAGE]"  
set "Neu=Country="  

move "%ini%" "%bak%"  

set Zeile=
for /f "tokens=1-2 delims=:" %%i in ('findstr /b /n /c:"%Suche%" "%bak%"') do set Zeile=%%i  
if not defined Zeile echo "%Suche%" nicht gefunden! & pause & goto :eof  

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

Meine Vermutung ist ja, dass der Fehler mit dem delims=: zusammanhängt, komme der Lösung aber einfach nicht näher.

Wäre für jede Hilfestellung dankbar.

Grüße
focion

[Edit Biber] die von bastla angeregten Code-Tags nachgetragen. [/Edit]
Member: bastla
bastla Apr 16, 2010 at 15:24:35 (UTC)
Goto Top
Hallo focion00 und willkommen im Forum!

Deine Vermutung ist richtig - eine angepasste (wenngleich weitgehend ungetestete) Version könnte so aussehen:
@echo off & setlocal
set "ini=ig2.ini"  
set "bak=%ini%.bak"  
set "Suche=[LANGUAGE]"  
set "Neu=Country="  

move "%ini%" "%bak%"  

set Zeile=
for /f "tokens=1-2 delims=:" %%i in ('findstr /b /n /c:"%Suche%" "%bak%"') do set Zeile=%%i  
if not defined Zeile echo "%Suche%" nicht gefunden! & pause & goto :eof  

set /a Zeile+=1
for /f "tokens=1-2* delims=:" %%i in ('findstr /n "^" "%bak%"') do (  
    if %%i neq %Zeile% (
        if "%%k" neq "" (  
            echo %%j:%%k
        ) else (
            echo\%%j
        )
    ) else (
        echo %Neu%
    )
)>>"%ini%"  
Grüße
bastla

P.S.: Beim Posten von Batches etc bitte ""-Formatierung verwenden ...
Member: focion00
focion00 Apr 16, 2010 at 15:52:27 (UTC)
Goto Top
Vielen Dank, bastla!

Hätte nicht gedacht mit derartiger Blitzgeschwindigkeit eine Lösung serviert zu bekommen. Verstanden hab ichs zwar noch nicht werd mir das aber sicher noch genauer anschauen.


Merci + ein schönes Wochenende,
focion00


Zitat von @bastla:

P.S.: Beim Posten von Batches etc bitte ""-Formatierung verwenden ...

Ist registriert.
Member: bastla
bastla Apr 16, 2010 at 16:50:38 (UTC)
Goto Top
Hallo focion00!
Verstanden hab ichs zwar noch nicht
... das sollte sich doch noch ändern lassen (bei Fragen einfach fragen face-wink) ...

Schönes Wochenende
bastla