Jump to content
Sign in to follow this  
mensa

Vrohandenen Registry Wert erweitern, nicht überschreiben

Recommended Posts

Hallo,

 

gibt es eine Möglichkeit einen Registry Wert (Zeichenfolge) auszulesen, zu ergänzen und dann wieder abzuspeichern?

Ich möchte den Wert also nicht einfach überschreiben, sondern am Ende des Werts einfach etwas hinzufügen. Wie macht man das am besten? Auch einfach in einem .reg File, aber mit welchem Befehl / Kommando?

Share this post


Link to post

Moment mal, mit dem ergänzen und dem abspeichern überschreibst du ja den alten Wert.

Hierbei ist es egal um welchen Wert (Binary, DWORD usw.) es sich handelt.

 

In VB gelten hierbei folgende Werte (ohne die API Unterstützung):

 

RegRead = Wert bzw. Schlüssel auslesen.

RegWrite = Wert bzw. Schlüssel schreiben.

RegDelete = Wert bzw. Schlüssel löschen.

Share this post


Link to post

Ok, danke!

Das beim Abspeichern der alte Wert überschrieben wird ist klar. Es geht mir ja nur darum, dass die ursprünglichen Werte nicht verloren, sondern nur ergänzt werden.

Das ist also nur mit VB möglich? Nicht direkt in einem .reg File?

Share this post


Link to post

Moin mensa,

 

nun macht da nicht so einen Heckmeck von.

Wenn Du die Reg.exe auf dem Rechner hast, ginge es mit zwei, drei Batchzeilen.

Beispiel bzw. Proof-of-Concept vom CMD-Prompt:

>for /f "tokens=3" %i in ('reg query HKCU\Software\odbc\odbc.ini\MyConnection /v Description^|find "Description"') do @set "thisvalue=%i"
set thisvalue
thisvalue=testdatenbank
[/Code]

Dieses Beispiel würde in die Variable %thisvalue% den vorhandenen Textwert des RegKeys "HKCU\...Whatever" Eintrag "Description" auslesen.

--> etwas anhängen: Set "thisvalue=%thisvalue%_in_Lummerland"

Neu setzen.

[Code]
reg add HKCU\Software\odbc\odbc.ini\Myconnection /v Description /d %thisvalue% /f
[/Code]

 

Das wars.

Im Batch (ungetestete Skizze).

[Code]
@echo off & setlocal
Set "regKey=HKCU\Software\odbc\odbc.ini\MyConnection"
Set "regEntry=Description"
Set "ToAppend=_in_Lummerland"
for /f "tokens=3" %%i in ('reg query %RegKey% /v %RegEntry%^|find "%RegEntry%"') do @set "thisvalue=%%i"
Set "thisvalue=%thisvalue%%toAppend%
Reg add %RegKey% /v %RegEntry% /d %thisvalue% /f
[/Code]

 

Natürlich würde ich die drei im Moment fest verdrahteten Werte %regkey5, %regval% und vor allem %ToAppend% als Parameter der batchdatei vorsehen - sonst macht es wenig Sinn, einen Batch zu schreiben.

 

Grüße

Biber

Share this post


Link to post

Und per Powershell, die früher oder später Batch und VBS ablösen soll, sinds effektiv nur 3 kurze Zeilen:

 

#Powershell 1.0
# by blub, 22.1.2008
# veraendern eines Registrywertes bzw. anhaengen eines Strings

# Parameter mit Beispielwerten setzen
$path="HKLM:\SOFTWARE\_testkey"
$Value="blub"
$appendString="def"

# Value auslesen
$a=get-itemproperty $path -name $Value

# Value verändern (hängt hier den String "def" an)
$a.$Value = $a.$Value + $appendstring

# Value zurückschreiben
Set-ItemProperty -name $Value -path $path $a.$Value

 

Running Windows PowerShell Scripts

 

cu

blub

Share this post


Link to post
Ok, danke!

Das beim Abspeichern der alte Wert überschrieben wird ist klar. Es geht mir ja nur darum, dass die ursprünglichen Werte nicht verloren, sondern nur ergänzt werden.

Das ist also nur mit VB möglich? Nicht direkt in einem .reg File?

Beim ändern des entsprechenden Wertes wird sowohl per VB-Script als auch in den .REG-Files ja nur der Wert verändert, der hier angegeben wird.

Alle anderen Werte bleiben hier so wie diese sind.

 

Es ist im Prinzip so wie in einem Ordner, bei dem verschiedene Dateien vorhanden sind.

Wenn du eine Datei veränderst dann wird nur diese geändert, die anderen Dateien aber nicht.

 

Wichtig ist auch das man beim Befehl RegRead den Key in Klammern setzt ("...\...\...)

Bei RegWrite sind hierbei die Klammern weg zu lassen "...\...\..."

Ein weiterer Knackpunkt ist das du beim schreiben über RegWrite mit "...\...\..." einen Wert angibst, mit "...\...\...\" allerdings einen Schlüssel erzeugst.

Share this post


Link to post

Hallo,

erstmal Danke für die ganzen Infos. Hat mich schon mal weiter gebracht.

Ich habe jetzt folgendes Problem, dass ich für den Wert den ich in die Registry eintragen muss ein Return benötige.

Hier mal mein Beispiel:

 

@echo off & setlocal

Set "regKey=HKCU\Software\Microsoft\Internet Explorer\Main"
Set "regEntry=Start Page"
Set "regEntry2=Secondary Start Pages"
Set "ToAppend=http://www.seite1.de"
Set "ToAppend2=http://www.seite2.de "

FOR /F "tokens=4 delims=     " %%A IN ('REG QUERY %regKey% /v %regEntry%) DO SET thisvalue=%%A"
Set "thisvalue=%ToAppend2% (hier müsste nun das Enter rein)%thisvalue%"

REG ADD %regKey% /v %regEntry% /t Reg_SZ /d %ToAppend% /f

Reg ADD %regKey% /v %regEntry% /t REG_MULTI_SZ /d %thisvalue% /f

 

Ich möchte also den Wert der als Startseite im IE eingetragen war auslesen, in eine Variable speichern und anschließend eine bestimmte Seite als Startseite eintichte.

Die ausgelesene Seite aus der Variable soll er nur in den abderen Registry-Schlüssel eintragen und dazu noch eine zusätzliche Seite.

Das Problem ist halt nur, wenn ich den Wert direkt in der Registry eintrage, dann muss ich die Werte durch ein Enter getrennt eingeben.

 

Hat jemand ein Tipp für mich?
 

Share this post


Link to post

Hallo,

 

ich habe das Script benutzt:

 



@echo off & setlocal
Set "regKey=HKCU\Software\odbc\odbc.ini\MyConnection"
Set "regEntry=Description"
Set "ToAppend=_in_Lummerland"
for /f "tokens=3" %%i in ('reg query %RegKey% /v %RegEntry%^|find "%RegEntry%"') do @set "thisvalue=%%i"
Set "thisvalue=%thisvalue%%toAppend%
Reg add %RegKey% /v %RegEntry%  /d %thisvalue% /f

 

 

dieses funktioniert an sich auch, aber ich habe einen Regedit Eintrag der ca 1000 Zeichen lang ist, das Script "schneidet" aber den Eintrag bei ca 100 Zeichen ab, weiß das jemand wo das Problem liegt?

Share this post


Link to post

"tokens=1,2,*" wäre sinnvoller - sonst landet alles nach dem ersten Leerzeichen in 4... Dann aber mit %%k statt %%i beim "do".

Edited by daabm

Share this post


Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...