Versionsnummer aus ini erfragen und dann Reg Schlüssel setzen
Ich habe folgendes Problem, ich möchte aus einer version.ini nur den Zahlenwert der entsprechenden Version abfragen und im nächsten Schritt diesen Wert in die Registry schreiben.
Meine ini hat immer den selben Aufbau:
[RegVersion]
Version=225
ServicePack=0
In diese datei ändert sich lediglich der Versionsstand, nichts anderes, und sie liegt auf dem Server. Jetzt möchte ich das nur die Zahl übergeben wird und direkt in die Registry des Clients geschrieben wird. Auf jedem Client ist immer das gleich Netzlaufwerk verbunden.
Ich haben schon ein bissel rumgetüftelt und hab das Problem, das meine batch nicht funktioniert, oder kann...
gebe ich diese Zeile direkt in das Commandfenster ein, bekomme ich "Fehler: Ungültiger Befehlszeilenparameter", danach wird der Wert in die Registry geschrieben, danach wieder "Fehler: Ungültiger Befehlszeilenparameter". Das mit den Fehlern wäre mir fast egal, nur meine Batch läuft halt nicht durch...
Ich hoffe das mir von euch da einer weiterhelfen kann.
Gruß
Fabsel
Meine ini hat immer den selben Aufbau:
[RegVersion]
Version=225
ServicePack=0
In diese datei ändert sich lediglich der Versionsstand, nichts anderes, und sie liegt auf dem Server. Jetzt möchte ich das nur die Zahl übergeben wird und direkt in die Registry des Clients geschrieben wird. Auf jedem Client ist immer das gleich Netzlaufwerk verbunden.
Ich haben schon ein bissel rumgetüftelt und hab das Problem, das meine batch nicht funktioniert, oder kann...
for /F "Tokens=1* delims=Version=" %i in (\\server\Data\z1version.ini) do REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\beimir\test /v Version /t REG_DWORD /d %i /f
gebe ich diese Zeile direkt in das Commandfenster ein, bekomme ich "Fehler: Ungültiger Befehlszeilenparameter", danach wird der Wert in die Registry geschrieben, danach wieder "Fehler: Ungültiger Befehlszeilenparameter". Das mit den Fehlern wäre mir fast egal, nur meine Batch läuft halt nicht durch...
Ich hoffe das mir von euch da einer weiterhelfen kann.
Gruß
Fabsel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 118998
Url: https://administrator.de/forum/versionsnummer-aus-ini-erfragen-und-dann-reg-schluessel-setzen-118998.html
Ausgedruckt am: 14.04.2025 um 10:04 Uhr
6 Kommentare
Neuester Kommentar
hallo @Fabsel
Du hast ja so ziemlich NICHTS ausgelassen, was man Falsch machen kann!
Die Erklärung Deiner Forschleife:
wertet das 1. token und das nächtse Token zum Rest der zeile aus.
hier reicht es wenn Du = als einzelnes Trennzeichen angibst - Du brauchst ja das was vor dem = steht und auch das was nach dem = steht.
da die Zeichen V e r ... usw als Trennzeichen verwertet werden, werden diese natürlich nicht in der ersten Variable aufgelöst
bei Deiner Forschleife würde wenn sie richtig geschrieben wäre aus der letzten Zeile Deiner INI nach dem = alles als Variable %%j gesetzt.
um das Wort Version zu finden. was Du benötigst um die Zweite Variable bei Übereinstimmung mit der ersten Variable (in die Registry zu schreiben.) mit Version zu vergleichen benötigst Du auf jeden Fall das 1. token
ist der ClientComputerName server? dann ist der (\\server\Dateiname) ok. sonst nimmst Du die IPadresse. anstatt server
Der remote PC ist nicht der Locale PC, daher gehört zwischen HKLM und \SOFTWARE... \\ClientComputerName (also \\server )
wenn die einzelnen Unterschlüssel nicht angelegt sind wird nichts eingeschrieben.
so... den Rest! hast Du richtig geschrieben.
ungetestet müsste so besser gehen
für den Test auf Deiner Kiste entfernst Du nach HKLM \\server
Gruß Phil
Du hast ja so ziemlich NICHTS ausgelassen, was man Falsch machen kann!
Die Erklärung Deiner Forschleife:
"tokens=1*
funktioniert nicht da ein trennzeichen , (Komma) zwischen 1 und * gesetzt werden muss.wertet das 1. token und das nächtse Token zum Rest der zeile aus.
delims=Version=
gibt einzelne Trennzeichen an in Deinem Fall ist V ein Trennzeichen e eines usw bis zum = was auch eines ist.hier reicht es wenn Du = als einzelnes Trennzeichen angibst - Du brauchst ja das was vor dem = steht und auch das was nach dem = steht.
da die Zeichen V e r ... usw als Trennzeichen verwertet werden, werden diese natürlich nicht in der ersten Variable aufgelöst
bei Deiner Forschleife würde wenn sie richtig geschrieben wäre aus der letzten Zeile Deiner INI nach dem = alles als Variable %%j gesetzt.
um das Wort Version zu finden. was Du benötigst um die Zweite Variable bei Übereinstimmung mit der ersten Variable (in die Registry zu schreiben.) mit Version zu vergleichen benötigst Du auf jeden Fall das 1. token
%i
Du hast angegeben die Zeile ist in einer Batch. In einer Batch gehören zwei % Prozentzeichen vor alle ForschleifenVariablen. (%%i würde glaub ich auch nicht ausgegeben werden da ja schon mindestens vor dem = die tokens 1 - ... ausgewertet werden [gebe ich als unbestätigtes Statement ab.])ist der ClientComputerName server? dann ist der (\\server\Dateiname) ok. sonst nimmst Du die IPadresse. anstatt server
HKEY_LOCAL_MACHINE\SOFTWARE...
der Schlüsselpfad muss mit HKLM beginnenDer remote PC ist nicht der Locale PC, daher gehört zwischen HKLM und \SOFTWARE... \\ClientComputerName (also \\server )
wenn die einzelnen Unterschlüssel nicht angelegt sind wird nichts eingeschrieben.
so... den Rest! hast Du richtig geschrieben.
for /f tokens=1,* delims==" %%i in (\\server\DataData\z1version.ini) do if "%%i"=="Version" reg add HKLM\\server\SOFTWARE\beimir\test /v %%i /t REG_DWORD /d %%j
ungetestet müsste so besser gehen
für den Test auf Deiner Kiste entfernst Du nach HKLM \\server
Gruß Phil

Hallo Phil,
ich muss leider deine Anmerkungen korrigieren
In Code - getaggten Bereichen funktionieren Auszeichnungen wie ** nicht, bitte rausnehmen.
Gruß
LotPings
ich muss leider deine Anmerkungen korrigieren
Tokens=1*
ist kein Problem funktioniert so.delims=Version=
Ist zwar nicht ideal funktioniert aber auch, da aufeinanderfolgende delimiter bei der Auswertung ignoriert werden.HKEY_LOCAL_MACHINE\SOFTWARE
Die ausgeschriebene Form ist auch kein Problem, da kommt Reg.exe mit klar. Ich würds aber grundsätzlich in Anführungzeichen setzen.In Code - getaggten Bereichen funktionieren Auszeichnungen wie ** nicht, bitte rausnehmen.
Gruß
LotPings
Hallo @Fabsel
also nochmal für ein besseres Verständnis (ich muss das Tutorial dafür unbedingt fertig machen....)
Dein Befehl beginnt mit
for
alle Variablen, welche in der gesamten Zeile der Forschleife mit %Beginnen aber ohne% enden und alphabetische Werte enthalten sind ForSchleifenVariablen.
das bedeutet insgeheim
in Deiner Batchzeile muss jedes (einzelne) % mit (zwei) %% ersetzt werden.
also Deine Zeile oben ....ach bitte bearbeite Deinen Beitrag und setze:
<code>Deinen DICKEN CODE</code>
und mach die Sternchen drumrum weg
das lässt sich so viel besser Arbeiten.
sonst ist das doch alles Fummelei hier
Dein code oben ist für die CMD
und dieser hier ist für Deine Batch.
Gruß Phil
das mit dem doppel % hab ich weg gelassen da es sonst bei mir nicht funktioniert.
das ist ja genau was ich schonmal gemeint hatte.%i
Du hast angegeben die Zeile ist in einer Batch. In einer Batch gehören zwei % Prozentzeichen vor alle ForschleifenVariablenalso nochmal für ein besseres Verständnis (ich muss das Tutorial dafür unbedingt fertig machen....)
Dein Befehl beginnt mit
for
alle Variablen, welche in der gesamten Zeile der Forschleife mit %Beginnen aber ohne% enden und alphabetische Werte enthalten sind ForSchleifenVariablen.
das bedeutet insgeheim
in Deiner Batchzeile muss jedes (einzelne) % mit (zwei) %% ersetzt werden.
also Deine Zeile oben ....ach bitte bearbeite Deinen Beitrag und setze:
<code>Deinen DICKEN CODE</code>
und mach die Sternchen drumrum weg
das lässt sich so viel besser Arbeiten.
sonst ist das doch alles Fummelei hier
Dein code oben ist für die CMD
und dieser hier ist für Deine Batch.
for /f "tokens=1,* delims==" %%i in (D:\Programme\CG\Z1\Data\z1version.ini) do if "%%i"=="Version" reg add HKLM\SOFTWARE\CompuGROUP\Z1 /v Version /t REG_DWORD /d %%j /f
Gruß Phil