73168
Goto Top

Batch - Eintrag in einer .ini datei verändern

Hallo Community,

da ich im Bereich des batchings noch nicht sehr viel Ahnung habe, bitte ich im vorraus um Nachsicht!
Zu meinem Problem:

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

[Person]
Nachricht=Dies ist meine persönliche Nachricht!

nun möchte ich den Parameter verändern:

[Person]
Nachricht=Neue persönliche Nachricht. Sie wurde verändert.

wie kann ich dieses tun, ohne ein zusatzprogramm wie setini zu verwenden?
Der Wert steht direkt unter der Klasse, doch ist im gesamten Dokument nicht bekannt, wo diese Klasse steht.
Genausowenig ist bekannt, was der Parameter des Wertes "Nachricht=" ist.

Kurz: Ein batch Programm, mit dem ich den Text (egal welchen) hinter "Nachricht=" entferne und dafür meinen Text einsetze.

Danke im Vorraus!
Takeo91

Content-Key: 104583

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

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

Member: laggflor
laggflor Dec 22, 2008 at 08:53:33 (UTC)
Goto Top
wie kann ich dieses tun, ohne ein zusatzprogramm wie setini zu verwenden?
Garnicht?
Kann dir 'sed' ans Herz legen - kommt von Unix und kann so gut wie alles ersetzen und noch mehr (per Regular Expressions).
Wenn du's ohne Tools schaffst bitte mitteilen - kann ich mir aber nicht vorstellen.

Sed für Windows hab ich noch nie getestet:
http://gnuwin32.sourceforge.net/packages/sed.htm

Hint:
sed -e 's/Such-Regexp/Ersetzen/g' myfile.ini > myfileNeu.ini

Viel Spass damit.
Member: bastla
bastla Dec 22, 2008 at 10:15:48 (UTC)
Goto Top
@laggflor
Deinem Vorschlag mit "sed" würde ich mich anschließen (hätte ich nicht den Eindruck, Takeo91 möchte/darf keine externen Tools verwenden) ...

Garnicht?
Vielleicht doch?
@echo off & setlocal
set "ini=D:\Deine.ini"  
set "bak=%ini%.bak"  
set "Suche=[Person]"  
set "Neu=Nachricht=Neue persönliche Nachricht. Sie wurde verändert."  

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%"  
Falls die erstellte ".bak"-Datei nicht benötigt wird, einfach noch die Zeile
del "%bak%"
hinzufügen.

Grüße
bastla
Member: laggflor
laggflor Dec 22, 2008 at 10:40:56 (UTC)
Goto Top
OK, das wären Windows-Bordmittel. Wobei die

C:\Windows\system32\findstr.exe

nicht wirklich Batch-eigen ist. face-wink

Apropos keine externen Tools erlaubt: Wie siehts mit PowerShell aus? Die Wäre offiziell von M$ supported. Alternativ könnte man auch noch VB-Script zu rate ziehen (ist IMHO bei XP mit dabei).

*ironie ein*
Falls externe Tools erlaubt sind tendiere ich zu OO-Programmierung in Python - damit erschlagen wir dann jede Netzwerk-Bandbreite wenn wir zuerst die komplette Python-Runtime installieren um einen String zu ändern. *gg*
Insgesamt wäre natürlich ein installiertes Python auf dem Client schon wieder von Vorteil.
*ironie aus*

Takeo91, choose your weapons face-wink
Mitglied: 73168
73168 Dec 22, 2008 at 14:12:12 (UTC)
Goto Top
Ein sehr Herzliches dankeschön an alle!
Habe mich für den quelltext von bastla entschieden face-smile

Gruß, Takeo
Member: bastla
bastla Dec 22, 2008 at 14:56:17 (UTC)
Goto Top
@laggflor
Wobei die

C:\Windows\system32\findstr.exe

nicht wirklich Batch-eigen ist. face-wink
Falls Du meinst, es handle sich dabei um keinen internen CMD-Befehl, hast Du natürlich recht - mit der Bezeichnung als "Bordmittel" allerdings auch. face-wink

Grüße
bastla
Member: burningstep
burningstep Nov 02, 2014 at 15:56:31 (UTC)
Goto Top
Hallihallo

Aktuell beschäftige ich mich mit dem gleichen Thema, wie ini-Dateien automatisch ändern zu lassen. Das Script von bastla funktioniert tiptop. Jedoch ist da diese Schleife, welche ich nicht ganz verstehe:

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

Würde mir bitte jemand erklären, was:
- das Dächlein in der ersten Zeile macht?: "^"
- der Backslash in der zweiten Zeile zwischen echo und %%j macht?: echo\%%j


Vielen lieben Dank bereits im Voraus
burningstep
Member: rubberman
rubberman Nov 02, 2014 at 16:14:24 (UTC)
Goto Top
Hallo burningstep,

es wäre besser gewesen einen neuen Thread aufzumachen. Du hast Glück, dass ich zufällig gesehen habe, dass jemand nach Jahren noch eine Frage in einem so alten Thread stellt ...

- das Dächlein in der ersten Zeile macht?: "^"
Das Caret gehört zu den von FINDSTR unterstützten Regulären Ausdrücken (wie du der Hilfe findstr /? hättest entnehmen können) und matcht einen Zeilenanfang. Zusammen mit der Option /n lassen sich so auch Leerzeilen einer Datei verarbeiten.

- der Backslash in der zweiten Zeile zwischen echo und %%j macht?: echo\%%j
Der Backslash ist eines der möglichen Zeichen, um die Ausgabe "ECHO ist ein/ausgeschaltet" zu unterdrücken. Da auch Leerzeilen verarbeitet werden, kann %%j durchaus einen leeren String enthalten.

Grüße
rubberman