fabsel
Goto Top

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...

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

Content-Key: 118998

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

Printed on: April 25, 2024 at 19:04 o'clock

Member: pieh-ejdsch
pieh-ejdsch Jun 25, 2009 at 00:51:35 (UTC)
Goto Top
hallo @Fabsel

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 beginnen
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. face-wink

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
Mitglied: 77559
77559 Jun 25, 2009 at 08:17:41 (UTC)
Goto Top
Hallo Phil,

ich muss leider deine Anmerkungen korrigieren face-sad

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
Member: pieh-ejdsch
pieh-ejdsch Jun 25, 2009 at 08:55:43 (UTC)
Goto Top
Hallo @77559

Ok... dann habe ich es nur anderes gelernt.
werde ich mir nun auch merken - Danke für die Tips

für die Sternchen: es war schon sehr Spät bzw viel zu früh um das geschriebene nochmal zu kontrollieren. Mein Bett hat gerufen...
habs rausgenommen.

Gruß Phil
Member: Fabsel
Fabsel Jun 25, 2009 at 20:14:17 (UTC)
Goto Top
Vielen Dank erstmal für die Hilfe, da ist wem wohl aufgefallen das ich absolut keine Ahung davon habe und mir in den letzten Tagen alles angelesen habe.
Ich hab das mal jetzt so ausprobiert und leider tut sich immer noch nicht viel.
Gebe ich den String in Commandozeile passt alles, nur wenn ich die batch über doppelklick starte, tut sich immer noch nicht viel. Ich hab das jetzt mal meinen Bedüfrnissen angepasst. Es soll ersteinmal auf einer lokalen Machschine laufen bevor ich das im Netz teste.

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  

das mit dem doppel % hab ich weg gelassen da es sonst bei mir nicht funktioniert.
Member: pieh-ejdsch
pieh-ejdsch Jun 25, 2009 at 20:42:53 (UTC)
Goto Top
Hallo @Fabsel

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 ForschleifenVariablen

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.
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
Member: Fabsel
Fabsel Jun 25, 2009 at 20:55:41 (UTC)
Goto Top
super es läuft, jetzt hab ichs auch Verstanden face-smile

Und vielen Dank nochmal