73168
22.12.2008, aktualisiert um 01:50:42 Uhr
22056
7
0
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 104583
Url: https://administrator.de/contentid/104583
Ausgedruckt am: 25.11.2024 um 13:11 Uhr
7 Kommentare
Neuester Kommentar
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.
@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) ...
Falls die erstellte ".bak"-Datei nicht benötigt wird, einfach noch die Zeile
hinzufügen.
Grüße
bastla
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%"
del "%bak%"
Grüße
bastla
OK, das wären Windows-Bordmittel. Wobei die
C:\Windows\system32\findstr.exe
nicht wirklich Batch-eigen ist.
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
C:\Windows\system32\findstr.exe
nicht wirklich Batch-eigen ist.
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
@laggflor
Grüße
bastla
Wobei die
C:\Windows\system32\findstr.exe
nicht wirklich Batch-eigen ist.
Falls Du meinst, es handle sich dabei um keinen internen CMD-Befehl, hast Du natürlich recht - mit der Bezeichnung als "Bordmittel" allerdings auch. C:\Windows\system32\findstr.exe
nicht wirklich Batch-eigen ist.
Grüße
bastla
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:
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
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
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 ...
Grüße
rubberman
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