Zeile in einer *.ini auslesen und ggf. Parameter ändern
Hallo,
ich hab ein neues Problem.
Nachdem ich eine x.ini in das Verzeichnis C:\Dokumente und Einstellungen\ username kopiert habe, muß danach die Datei nach einem Parameter durchsucht werden und dann ggf. geändert werden. Falls also in der x.ini steht
XServerInvisible=0
muß das geändert werden auf
XServerInvisible=1
danach muß eine andere xx.ini im Verzeichnis c:\programme\XX
nach 2 Befehlszeilen durchsucht werden und diese ggf. auch geändert werden, nämlich von
StartHidden=0
StartInvisible=0
zu
StartHidden=1
StartInvisible=1
Für Hilfe wär ich dankbar, auch wenns nur der Verweis auf ein Tutorial ist.
Gruß
Rainer
ich hab ein neues Problem.
Nachdem ich eine x.ini in das Verzeichnis C:\Dokumente und Einstellungen\ username kopiert habe, muß danach die Datei nach einem Parameter durchsucht werden und dann ggf. geändert werden. Falls also in der x.ini steht
XServerInvisible=0
muß das geändert werden auf
XServerInvisible=1
danach muß eine andere xx.ini im Verzeichnis c:\programme\XX
nach 2 Befehlszeilen durchsucht werden und diese ggf. auch geändert werden, nämlich von
StartHidden=0
StartInvisible=0
zu
StartHidden=1
StartInvisible=1
Für Hilfe wär ich dankbar, auch wenns nur der Verweis auf ein Tutorial ist.
Gruß
Rainer
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 22128
Url: https://administrator.de/contentid/22128
Ausgedruckt am: 26.11.2024 um 05:11 Uhr
11 Kommentare
Neuester Kommentar
Moin Rainzi,
machen wir diesmal umgekehrt - Codeschnipsel lass ich da, Tutorial folgt später...
How To Use:
Den Codeschnipsel aufrufen mit
Call [Pfad\]ReplaceInIni Pfad-und-Name-Inidatei KeyName NeuerWert
Beispiel - Deine z:\config.ini vorher:
[bla]
;nach 2 Befehlszeilen durchsucht
;werden und diese ggf.
;auch geändert werden, nämlich von
StartHidden=0
StartInvisible=0
-->Aufruf (am CMD-Prompt)
ReplaceInIni z:\config.ini StartHidden 1
...
Deine z:\config.ini vorher:
[bla]
;nach 2 Befehlszeilen durchsucht
;werden und diese ggf.
;auch geändert werden, nämlich von
StartHidden=1
StartInvisible=0
-->Aufruf (in einem Batch )
call ReplaceInIni.bat z:\config.ini StartHidden 1
HTH Biber
P.S. Erläuterung/Doku folgt bei Bedarf oder später in einem Tutorial.
machen wir diesmal umgekehrt - Codeschnipsel lass ich da, Tutorial folgt später...
::ReplaceInIni.bat
::Syntax %0 Name-Ini-Datei KeyName Value
@echo off & setlocal
If not exist %1 (echo Datei %1 nicht gefunden) & goto :eof
Find /i "%2" %1>nul || ((echo KeyName %2 nicht gefunden) & goto :eof)
Set "new=New%random%.ini"
For /F "delims== tokens=1,2*" %%a in (%1) do (
If /i [%%a]==[%2] (
echo %%a=%3 >>%new%
) else (
If [%%b]== (
echo %%a >>%new%
) else (
echo %%a=%%b >>%new%
)))
if exist %new% (
REM --if Backup needed: if exist %~dpn1_old%~x1 del %~dpn1_old%~x1
REM --if Backup needed: ren %1 %~n1_old%~x1
copy /y %new% %~f1 >nul
del %new% >nul
)
::----snapp ReplaceInIni.bat
Den Codeschnipsel aufrufen mit
Call [Pfad\]ReplaceInIni Pfad-und-Name-Inidatei KeyName NeuerWert
Beispiel - Deine z:\config.ini vorher:
[bla]
;nach 2 Befehlszeilen durchsucht
;werden und diese ggf.
;auch geändert werden, nämlich von
StartHidden=0
StartInvisible=0
-->Aufruf (am CMD-Prompt)
ReplaceInIni z:\config.ini StartHidden 1
...
Deine z:\config.ini vorher:
[bla]
;nach 2 Befehlszeilen durchsucht
;werden und diese ggf.
;auch geändert werden, nämlich von
StartHidden=1
StartInvisible=0
-->Aufruf (in einem Batch )
call ReplaceInIni.bat z:\config.ini StartHidden 1
HTH Biber
P.S. Erläuterung/Doku folgt bei Bedarf oder später in einem Tutorial.
Moin Rainer,
gedacht war das Ganze etwas schlichter:
::----Rainers.Bat
@echo off
copy F:\IT\Test\test.ini C:\Test
:: somit sollte in c:\test eine identische Kopie der Original-Ini stehen
:: alle Werte darin stehen auf "vor der Installation"
start /wait C:\Programme\Test\testserver.exe
:: Installation wird durchgeführt (und eigentlich sollte das Installationstool selbst
:: in der Ini-Datei etwas ändern und nicht irgendein Tool hinterher)
:: ...aber was solls, nehmen wir an, die *. exe lief ohne Fehler
If not ErrorLevel 1 (
Call F:\IT\Test\ReplaceInIni.bat C:\Test\test.ini StartHidden 1
Call F:\IT\Test\ReplaceInIni.bat C:\Test\test.ini StartInvisible 1
)
...
...
:: -----snapp Rainers.Bat
So in etwa wäre meine Skizze. Wobei, wie geschrieben, normalerweise das Inst-Prog selbst die Ini ändern oder besser noch neu erzeugen sollte.
Geht das denn nicht?
Grüße Biber
gedacht war das Ganze etwas schlichter:
::----Rainers.Bat
@echo off
copy F:\IT\Test\test.ini C:\Test
:: somit sollte in c:\test eine identische Kopie der Original-Ini stehen
:: alle Werte darin stehen auf "vor der Installation"
start /wait C:\Programme\Test\testserver.exe
:: Installation wird durchgeführt (und eigentlich sollte das Installationstool selbst
:: in der Ini-Datei etwas ändern und nicht irgendein Tool hinterher)
:: ...aber was solls, nehmen wir an, die *. exe lief ohne Fehler
If not ErrorLevel 1 (
Call F:\IT\Test\ReplaceInIni.bat C:\Test\test.ini StartHidden 1
Call F:\IT\Test\ReplaceInIni.bat C:\Test\test.ini StartInvisible 1
)
...
...
:: -----snapp Rainers.Bat
So in etwa wäre meine Skizze. Wobei, wie geschrieben, normalerweise das Inst-Prog selbst die Ini ändern oder besser noch neu erzeugen sollte.
Geht das denn nicht?
Grüße Biber
Moin Rainer,
danke für die Weihnachtswünsche und dieselben zurück
Also, nochmal zu Deiner Konstellation und zu den begrenzten Möglichkeiten meines Batchschnipsels.
Ich habe den ja so ausgelegt, dass der nur irgendetwas tut, wenn der verlangte Ini-Key "StartHidden" oder "StartInvisible" überhaubt vorhanden ist. Den neuanlegen/anhängen will ich keinen, da mir dazu die Information fehlt, in welcher Ini-Section der reingehört.
Ich habe jetzt noch nicht ganz verstanden, ob die Werte in der Client-Inidatei VOR oder NACH dem Start der kopierten Testserver.exe erfolgen muss, ist aber auch egal. Zumindest wäre die Skizze wie folgt
::...der Clientkrams-Kopier-Batch, der toi toi toi ja vom am Client angemeldeten User gestartet wird
copy \\server\Quellverzeichnis\{ACD-Klamauk} [Client-Zielverzeichnis]
start /w [ClientPfad\]testserver.exe
::danach die Sicherstellung der "richtigen " Ini-Werte
Call [Pfad\]ReplaceInIni.bat "C:\Dokumente und Einstellung\%username%\ACDxy.ini" StartHidden 1
Call [Pfad\]ReplaceInIni.bat "C:\Dokumente und Einstellung\%username%\ACDxy.ini" StartInvisible 1
und entsprechend auch auf dem Server.
Wobei ich auch immer noch nicht verstehe, wer denn nun die "fehlerhafte" Ini-Datei eigentlich erzeugt? Die Testserver.exe?
Denn wenn die schon im Quell-Kopierverzeichnis "falsch" wäre, könntet ihr ja auch dort schon die Werte berichtigen...
Gruß Biber
danke für die Weihnachtswünsche und dieselben zurück
Also, nochmal zu Deiner Konstellation und zu den begrenzten Möglichkeiten meines Batchschnipsels.
Ich habe den ja so ausgelegt, dass der nur irgendetwas tut, wenn der verlangte Ini-Key "StartHidden" oder "StartInvisible" überhaubt vorhanden ist. Den neuanlegen/anhängen will ich keinen, da mir dazu die Information fehlt, in welcher Ini-Section der reingehört.
Ich habe jetzt noch nicht ganz verstanden, ob die Werte in der Client-Inidatei VOR oder NACH dem Start der kopierten Testserver.exe erfolgen muss, ist aber auch egal. Zumindest wäre die Skizze wie folgt
::...der Clientkrams-Kopier-Batch, der toi toi toi ja vom am Client angemeldeten User gestartet wird
copy \\server\Quellverzeichnis\{ACD-Klamauk} [Client-Zielverzeichnis]
start /w [ClientPfad\]testserver.exe
::danach die Sicherstellung der "richtigen " Ini-Werte
Call [Pfad\]ReplaceInIni.bat "C:\Dokumente und Einstellung\%username%\ACDxy.ini" StartHidden 1
Call [Pfad\]ReplaceInIni.bat "C:\Dokumente und Einstellung\%username%\ACDxy.ini" StartInvisible 1
und entsprechend auch auf dem Server.
Wobei ich auch immer noch nicht verstehe, wer denn nun die "fehlerhafte" Ini-Datei eigentlich erzeugt? Die Testserver.exe?
Denn wenn die schon im Quell-Kopierverzeichnis "falsch" wäre, könntet ihr ja auch dort schon die Werte berichtigen...
Gruß Biber
Moin Rainer,
möglicherweise ist ein Browserproblem.. vermutlich werden meine Kommentare in Deinem Browser fehlerhaft dargestellt.
Ich versuch nochmal zu skizzieren:
- ich habe ganz ganz oben mal einen Batch-Schnipsel namens ReplaceInIni.bat gepostet
- den kannst Du per Copy & Paste ausschneiden, in Deinen Lieblingseditor kopieren und unter dem Namen "ReplaceInIni.bat" irgendwohin speichern. Das ist der Batch, den Du mit Call [Pfad\]ReplaceInIni.bat aufrufen kannst.
- alternativ kannst Du über die Funktion "Seite drucken" den gesamten Thread ausdrucken und danach mit Freeware-OCR-Tools diesen Batch-Code extrahieren und dann als Datei "ReplaceInIni.bat" speichern. Ask Dr. Google.
- eine weitere (moralisch bedenklichere) Möglichkeit ist der so genannte "Praktikantenmissbrauch zum Abtippen von Codezeilen". Details siehe ebenfalls Dr. Google. Denkbar ist auch die Suche nach "Praktikantinnenmissbrauch", aber die liefert andere Suchergebnisse.
Wenn Du also, auf welchem Wege auch immer, diese "ReplaceInIni.bat" erzeugt und z.B im Pfad "F:\IT\Test" gespeichert hast, folgt noch ein notwendiger Zwischenschritt.
Nimm den folgenden von Dir geposteten Code:
~~~
@echo off
copy F:\IT\Test\testclient.ini C:\Test
Call C:\Test\testclient.ini ReplaceIn C:\test\testclient.ini Testserverinvisible=1
Call C:\Programme\Test\testserver.ini ReplaceIn C:\test\testserver.ini StartHidden=1
Call C:\Programme\Test\testserver.ini ReplaceIn C:\test\testserver.ini StartInvisible=1
~~~~
..und ziehe ihn langsam an einem starken Magneten vorbei.
Danach versuche es bitte noch einmal mit der von mir auch schon weiter oben geposteten Syntax.
:: @echo off
:: erstmal kein Echo off.. Alle Fehler sehen
copy F:\IT\Test\testclient.ini C:\Test
copy F:\IT\Test\testserver.ini C:\Test
Call F:\IT\Test\ReplaceInIni.bat C:\test\testclient.ini Testserverinvisible 1
Call F:\IT\Test\ReplaceInIni.bat C:\test\testserver.ini StartHidden=1
Call F:\IT\Test\ReplaceInIni.bat C:\test\testserver.ini StartInvisible=1
~~~
Wenn das alles nicht funktionieren sollte, schicke mir bitte per pn eine Mailadresse von Dir.
Gruß Biber
möglicherweise ist ein Browserproblem.. vermutlich werden meine Kommentare in Deinem Browser fehlerhaft dargestellt.
Ich versuch nochmal zu skizzieren:
- ich habe ganz ganz oben mal einen Batch-Schnipsel namens ReplaceInIni.bat gepostet
- den kannst Du per Copy & Paste ausschneiden, in Deinen Lieblingseditor kopieren und unter dem Namen "ReplaceInIni.bat" irgendwohin speichern. Das ist der Batch, den Du mit Call [Pfad\]ReplaceInIni.bat aufrufen kannst.
- alternativ kannst Du über die Funktion "Seite drucken" den gesamten Thread ausdrucken und danach mit Freeware-OCR-Tools diesen Batch-Code extrahieren und dann als Datei "ReplaceInIni.bat" speichern. Ask Dr. Google.
- eine weitere (moralisch bedenklichere) Möglichkeit ist der so genannte "Praktikantenmissbrauch zum Abtippen von Codezeilen". Details siehe ebenfalls Dr. Google. Denkbar ist auch die Suche nach "Praktikantinnenmissbrauch", aber die liefert andere Suchergebnisse.
Wenn Du also, auf welchem Wege auch immer, diese "ReplaceInIni.bat" erzeugt und z.B im Pfad "F:\IT\Test" gespeichert hast, folgt noch ein notwendiger Zwischenschritt.
Nimm den folgenden von Dir geposteten Code:
~~~
@echo off
copy F:\IT\Test\testclient.ini C:\Test
Call C:\Test\testclient.ini ReplaceIn C:\test\testclient.ini Testserverinvisible=1
Call C:\Programme\Test\testserver.ini ReplaceIn C:\test\testserver.ini StartHidden=1
Call C:\Programme\Test\testserver.ini ReplaceIn C:\test\testserver.ini StartInvisible=1
~~~~
..und ziehe ihn langsam an einem starken Magneten vorbei.
Danach versuche es bitte noch einmal mit der von mir auch schon weiter oben geposteten Syntax.
:: @echo off
:: erstmal kein Echo off.. Alle Fehler sehen
copy F:\IT\Test\testclient.ini C:\Test
copy F:\IT\Test\testserver.ini C:\Test
Call F:\IT\Test\ReplaceInIni.bat C:\test\testclient.ini Testserverinvisible 1
Call F:\IT\Test\ReplaceInIni.bat C:\test\testserver.ini StartHidden=1
Call F:\IT\Test\ReplaceInIni.bat C:\test\testserver.ini StartInvisible=1
~~~
Wenn das alles nicht funktionieren sollte, schicke mir bitte per pn eine Mailadresse von Dir.
Gruß Biber
So,
kleine Ergänzung, die in der Praxis nötig ist, wie Rainer und ich festgestellt haben...
Der obige Batchschnipsel ist nicht darauf eingerichtet, das die *.Ini-Datei auch in einem "Pfad mit Leerzeichen" liegen kann wie zum Beispiel "c:\Dokumente und Firlefanz\%username%\".
Die oben gepostete ReplaceInIni.bat ließe sich dann nur verwenden, wenn man/frau den Parameter "inidatei" als kurzen Dateinamen übergeben würde.
Beispiel:
Call ReplaceInIni.bat C:\Dokume~1\%username%\testserver.ini Startinvisible 1
Habe eine kleine Anpassung gemacht, nun läuft es auch mit dem Aufruf:
Call ReplaceInIni.bat "c:\Dokumente und Einstellungen\%username%\testserver.ini Startinvisible 1
Grüße Biber
kleine Ergänzung, die in der Praxis nötig ist, wie Rainer und ich festgestellt haben...
Der obige Batchschnipsel ist nicht darauf eingerichtet, das die *.Ini-Datei auch in einem "Pfad mit Leerzeichen" liegen kann wie zum Beispiel "c:\Dokumente und Firlefanz\%username%\".
Die oben gepostete ReplaceInIni.bat ließe sich dann nur verwenden, wenn man/frau den Parameter "inidatei" als kurzen Dateinamen übergeben würde.
Beispiel:
Call ReplaceInIni.bat C:\Dokume~1\%username%\testserver.ini Startinvisible 1
Habe eine kleine Anpassung gemacht, nun läuft es auch mit dem Aufruf:
Call ReplaceInIni.bat "c:\Dokumente und Einstellungen\%username%\testserver.ini Startinvisible 1
::ReplaceInIni.bat Version 0.02
::Syntax %0 Name-Ini-Datei KeyName Value
@echo off & setlocal
If not exist %1 (echo Datei %1 nicht gefunden) & goto :eof
Find /i "%2" <b>%~s1</b>>nul || ((echo KeyName %2 nicht gefunden) & goto :eof)
Set "new=New%random%.ini"
For /F "delims== tokens=1,2*" %%a in (%1) do (
If /i [%%a]==[%2] (
echo %%a=%3 >>%new%
) else (
If [%%b]== (
echo %%a >>%new%
) else (
echo %%a=%%b >>%new%
)))
if exist %new% (
REM --if Backup needed: if exist %~dspn1_old%~x1 del %~dspn1_old%~x1
REM --if Backup needed: ren %~s1 %~n1_old%~x1
copy /y %new% %~f1 >nul
del %new% >nul
)
::----snapp ReplaceInIni.bat Vers. 0.02
Grüße Biber