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%"
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%"
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 112530
Url: https://administrator.de/forum/einen-wert-unter-einer-klasse-in-einer-ini-datei-per-batch-aendern-112530.html
Ausgedruckt am: 23.05.2025 um 16:05 Uhr
10 Kommentare
Neuester Kommentar
Hallo papajo!
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:
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
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%"
Grüße
bastla
Hallo papajo!
noch eine Zeile
einfügst hat sich das auch erledigt.
Grüße
bastla
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 ZeileDas meint doch das die batch abgebrochen wurde und nicht normal beendet, oder nicht??
:ex
goto :eof
Grüße
bastla
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.
Das Ergebnis sieht dann leider so aus:
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:
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]
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
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]
Hallo focion00 und willkommen im Forum!
Deine Vermutung ist richtig - eine angepasste (wenngleich weitgehend ungetestete) Version könnte so aussehen:
Grüße
bastla
P.S.: Beim Posten von Batches etc bitte ""-Formatierung verwenden ...
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%"
bastla
P.S.: Beim Posten von Batches etc bitte ""-Formatierung verwenden ...
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
Ist registriert.
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
P.S.: Beim Posten von Batches etc bitte ""-Formatierung verwenden ...
Ist registriert.