Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Zeile in einer *.ini auslesen und ggf. Parameter ändern

Frage Entwicklung Batch & Shell

Mitglied: Rainzi

Rainzi (Level 1) - Jetzt verbinden

22.12.2005, aktualisiert 30.12.2005, 7355 Aufrufe, 11 Kommentare

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
Mitglied: stepas
22.12.2005 um 11:37 Uhr
das ganze mit notepad aufmachen und dann ganz normal aendern. Ist die .ini sehr gross mit strg+F suchen und veraendern
Bitte warten ..
Mitglied: Biber
22.12.2005 um 12:55 Uhr
Moin Rainzi,
machen wir diesmal umgekehrt - Codeschnipsel lass ich da, Tutorial folgt später...

<font class=code>::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</font>
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.
Bitte warten ..
Mitglied: Rainzi
23.12.2005 um 09:19 Uhr
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
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

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
Bitte warten ..
Mitglied: Biber
23.12.2005 um 23:46 Uhr
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
Bitte warten ..
Mitglied: Rainzi
27.12.2005 um 07:59 Uhr
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
Bitte warten ..
Mitglied: Biber
27.12.2005 um 14:54 Uhr
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
Bitte warten ..
Mitglied: Rainzi
28.12.2005 um 08:24 Uhr
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
Bitte warten ..
Mitglied: Biber
28.12.2005 um 11:36 Uhr
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
Bitte warten ..
Mitglied: Rainzi
29.12.2005 um 07:55 Uhr
Gewonnen!!!!!!!!!
Echt super. Vielen Dank. Nur das mit dem Magneten hab ich nicht verstanden.

Gruß
Rainer
Bitte warten ..
Mitglied: Biber
29.12.2005 um 17:41 Uhr
Moin Rainer,
das mit dem Magneten kannst Du vernachlässigen..

Hauptsache, es läuft jetzt.
Grüße Biber
Bitte warten ..
Mitglied: Biber
30.12.2005 um 09:32 Uhr
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
<font class=code>::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" %~s1>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</font>

Grüße Biber
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung!

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell INI Tags auslesen (2)

Frage von H41mSh1C0R zum Thema Batch & Shell ...

Installation
gelöst Mit Powershell in einer Datei eine Zeile auslesen (6)

Frage von Bommi1961 zum Thema Installation ...

Batch & Shell
gelöst Powershell funktioniert nicht richtig beim Auslesen der letzten Zeile (5)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
gelöst Variable aus ini Datei auslesen und weiterverwenden (17)

Frage von n0cturne zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...