rainzi
Goto Top

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

Content-ID: 22128

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

Ausgedruckt am: 26.11.2024 um 05:11 Uhr

stepas
stepas 22.12.2005 um 11:37:00 Uhr
Goto Top
das ganze mit notepad aufmachen und dann ganz normal aendern. Ist die .ini sehr gross mit strg+F suchen und veraendern
Biber
Biber 22.12.2005 um 12:55:16 Uhr
Goto Top
Moin Rainzi,
machen wir diesmal umgekehrt - Codeschnipsel lass ich da, Tutorial folgt später... face-wink

::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
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.
Rainzi
Rainzi 23.12.2005 um 09:19:28 Uhr
Goto Top
Sorry,
aber nix versteh!!
Meine Syntax sieht so aus:


@echo off
copy F:\IT\Test\test.ini C:\Test

Call
::ReplaceInIni.bat
::Syntax %0 Name-Ini-Datei KeyName Value
@echo off & setlocal
If not exist F:\IT\Test\test.ini & 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

start C:\Programme\Test\testserver.exe

:ende

aber wo und wie muß ich bei Deinem "Schnipsel" was eintragen????

Aber erstmal Danke.

Frohes Fest

Gruß Rainer
Biber
Biber 23.12.2005 um 23:46:10 Uhr
Goto Top
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
Rainzi
Rainzi 27.12.2005 um 07:59:29 Uhr
Goto Top
Hallo Biber,

erstmal Frohe Weihnachten gehabt zu haben.
Also ich erklär jetzt mal das Szenario. Wir brauchen für unsere ACD (telefonanlagensoftware) einen neuen Client für die User. Dieser braucht nicht installiert werden, sondern einfach nur in das Verzeichnis kopiert werde. Leider schreibt der neue Client seine ini-Datei nicht mehr an die gleiche Stelle wie der alte Client, sondern nach C:\Dokumente und Einstellung\%username%. Die Testserver.exe führt keine Installation duch. Der Testserver muß zwingend nach dem Kopieren der neuen Clients einmal neu gestartet werden, keine Ahnung warum. Das Problem ist, das sowohl in der Client-ini als auch in der Server-ini zwei Werte überprüft werden müssen.
In der Server-ini :
StartHidden=1
StartInvisible=1
Und in der Client-ini:
ServerInvisible=1
Wenn da andere Werte Stehen (z.B. 0) müssen diese überschrieben werden.
Ich hoffe Du kannst mir helfen.

Gruß
Rainer
Biber
Biber 27.12.2005 um 14:54:22 Uhr
Goto Top
Moin Rainer,
danke für die Weihnachtswünsche und dieselben zurück face-wink

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
Rainzi
Rainzi 28.12.2005 um 08:24:45 Uhr
Goto Top
Hi,
also der Server sollte erst nach den Änderungen an den iní´s gestartet werden. Die Server.exe wird acu nicht nicht kopiert sondern nur die neuen client.exe. Die client.ini muss verschoben werden, damit die user ihre Einstellungen behalten. Die Änderungen in den ini´s dienen nur dazu,dass der Server beim Start im Hintergrund bleibt. (wg. User-Verwirrung - was isn das fürn Fenster?)
Mit Call ruft man aber doch einen 2. batch auf oder nicht muß ich dann eine schreiben?
Bei der Syntax unten wird zwar kopiert, aber dann wird die ini geöffnet und nüscht ist.
Fehler??

@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

start C:\Programme\Test\testserver.exe

:ende

Gruß Rainer
Biber
Biber 28.12.2005 um 11:36:39 Uhr
Goto Top
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
Rainzi
Rainzi 29.12.2005 um 07:55:16 Uhr
Goto Top
Gewonnen!!!!!!!!!
Echt super. Vielen Dank. Nur das mit dem Magneten hab ich nicht verstanden.

Gruß
Rainer
Biber
Biber 29.12.2005 um 17:41:52 Uhr
Goto Top
Moin Rainer,
das mit dem Magneten kannst Du vernachlässigen.. face-wink

Hauptsache, es läuft jetzt.
Grüße Biber
Biber
Biber 30.12.2005 um 09:32:44 Uhr
Goto Top
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
::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