Registrierungsschlüssel auslesen und Wert als Variable Setzen...?

-eraz-

Commodore
Registriert
Juni 2004
Beiträge
4.270
hi ho,

Ich würde gerne per Batch einen Registrierungsschlüssel bzw. Wert auslesen (mit reg query) und diesen Wert dann gerne als Variable Setzen, wie muss der Befehl lauten damit ich den ausgelesenen Wert als Variable Setzen kann?

thx.
 
Wenn du den ganzen Reg-Key exportiert hast, mach eine *.cmd mit "regedit /s "C:\test.reg".

Ansonsten kannst du auch mit:

regedit [hklm\blabla\wert] - fügt hinzu
regedit [-hklm\blabla\wert] - entfernt

arbeiten.

Weiterhin gibts noch ein Tool Names reg.exe mit dem du Registry-Einträge verändern kannst. Müsste bei XP dabei sein, ansonsten auf der CD nochmal suchen.
 
ne ne ne, das ist ganz falsch :D

Ich will ja den Wert nicht verändern. Ich will nur einen Wert auslesen der einen Dateipfad enhält und diesen Dateipfad dann als Variable Setzen.
 
"set" ? :freak:
 
value schrieb:
aaaalso....

Zum Beispiel:

Die Zeichenfolge "Content Type" in Schlüssel HKEY_CLASSES_ROOT\.3g2 hat den Wert video/3gpp

Genau diesen Wert (video/3gpp) möchte ich als Variable setzen. Das z.b. die Variable %TEST% den Wert video/3gpp enhält.

Das war nur mal ein beispiel, den Wert den ich als Variable Setzen will ist auf jeden Computer anders, deswegen brauche ich die Variable, dazu muss ich aber zuerst mal den Wert auslesen können und als Variable Setzen können. Ist es jetzt verständlich was ich meine? :)
 
Zuletzt bearbeitet:
SET variable=parameter (setzt Parameter; Zuweisung)

Das mit SET passt schon so ^^
 
Hey Value, du treibst mich in den Wahnsinn! :D

Ich weiß schon wie ich eine Variable setze, nur muss ich doch zuerst Wissen welchen Wert die Variable haben soll und damit ich das weiß muss ich zuerst den Schlüssel (bzw. den Wert darunter) in der Registry auslesen. Könnte da bitte mal noch jemand dazustossen und mich aufklären ob ich mich wirlich so unverständlich ausdrücke? :D
 
ok ok, ich bin ganz nah dran, mit diesem Befehl kann ich auslesen was Reg query zurückgibt:

FOR /F "tokens=3 delims= " %i IN ('REG QUERY "HKCU\Control Panel\International" /v sCountry') DO SET Country=%i

Hier würde z.b. das Land als Variable gesetzt.
Doch leider nicht ganz, das Format von Reg Query sieht nämlich folgendermaßen aus:

! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\Control Panel\International
sCountry REG_SZ Deutschland

Mit dem obigen FOR Befehl wird somit aber VERSION als Variable gesetzt, es sollte aber Deutschland sein. Dazu müsste ich ihm sagen das er 4 Zeilen überspringen soll, das macht er aber leider mit dem FOR /F "skip=4 usw. Befehl nicht.
 
Liegt wohl an mir, aber heute plan ich einfach nix. Hier noch ein Versuch dir zu helfen.
Da ich hier keine .dat anhängen kann, schreib ich den Code einfach in den Post :p

Code:
@ECHO OFF
:: Check Windows version
IF NOT "%OS%"=="Windows_NT" GOTO Syntax
:: Check command line arguments:
:: 2 required plus 1 optional, "?" or "/?" for help screen
ECHO.%* | FIND "?" >NUL
IF NOT ERRORLEVEL 1 GOTO Syntax
IF     "%~2"=="" GOTO Syntax
IF NOT "%~4"=="" GOTO Syntax
IF NOT "%~3"=="" IF /I NOT "%~3"=="/K" GOTO Syntax
:: Check if either FINDSTR or EGREP is available
SET FINDSTR=
FINDSTR.EXE /? >NUL 2>&1
IF ERRORLEVEL 1 (
	EGREP.EXE --help >NUL 2>&1
	IF ERRORLEVEL 1 GOTO Syntax
	SET FINDSTR=EGREP
)

:: Keep variables local
SETLOCAL

:: Read variables from command line
SET RegSection=%~1
SET RegKey=%~2
SET RegVal=
IF /I "%~3"=="/K" (SET VarName=_%RegKey%) ELSE (SET VarName=RegVal)

:: Delete temporary file if it already exists
IF EXIST "%Temp%.\_readreg.dat" DEL "%Temp%.\_readreg.dat"

:: Store content of registry section in temporary file
START /WAIT REGEDIT.EXE /E "%Temp%.\_readreg.dat" "%~1"

:: Abort with error message if the section wasn't found in the registry
IF NOT EXIST "%Temp%.\_readreg.dat" (
	ECHO.
	ECHO ERROR:  [%RegSection%]  not found
) 1>&2
IF NOT EXIST "%Temp%.\_readreg.dat" (
	ENDLOCAL
	GOTO:EOF
)

:: Use either FINDSTR or EGREP to search requested value in temporary file.
:: Note: TYPE is used here because the temporary file may be in Unicode.
IF "%FINDSTR%"=="EGREP" (
	FOR /F "tokens=1* delims==" %%A IN ('TYPE "%Temp%.\_readreg.dat" 2^>NUL ^| EGREP.EXE -i "^^\"?%~2\"?="') DO (
		SET RegKey=%%~A
		SET RegVal=%%~B
	)
) ELSE (
	FOR /F "tokens=1* delims==" %%A IN ('TYPE "%Temp%.\_readreg.dat" 2^>NUL ^| FINDSTR.EXE /I /B /R /C:"\"%~2\"="') DO (
		SET RegKey=%%~A
		SET RegVal=%%~B
	)
)

:: Format and display the result
IF DEFINED RegVal (SET RegVal=%RegVal:\\=\%) ELSE (SET RegVal= - Undefined -)
ECHO.
ECHO [%RegSection%]
ECHO %RegKey%=%RegVal%

:: Delete temporary file
:: IF EXIST "%Temp%.\_readreg.dat" DEL "%Temp%.\_readreg.dat"

:: Pass result in variable to calling environment and end program
ENDLOCAL & SET %VarName%=%RegVal%
GOTO:EOF


:Syntax
ECHO.
ECHO ReadReg.bat,  Version 2.10 for Windows NT 4 and later
ECHO Read a value from the registry and store it in an environment variable
ECHO.
ECHO Usage:    READREG  "section"  "key"  [ /K ]
ECHO.
ECHO Where:             "section"  is the section name, without brackets
ECHO                    "key"      is the key whose value must be read
ECHO                    /K         uses "_key" for environment value name
ECHO.

:: In case we use NT 4 we have multiple notes, otherwise one single note
VER | FIND "Windows NT" >NUL
IF     ERRORLEVEL 1 ECHO Note:     The result is stored in an environment variable %%RegVal%%,
VER | FIND "Windows NT" >NUL
IF NOT ERRORLEVEL 1 ECHO Notes:    The result is stored in an environment variable %%RegVal%%,
ECHO           unless /K switch is used.

:: Message for NT 4 about FINDSTR and EGREP availability
VER | FIND "Windows NT" >NUL
IF ERRORLEVEL 1 GOTO Example
ECHO           This batch file uses either FINDSTR or EGREP to search for the
ECHO           the requested value.
ECHO           FINDSTR is part of the Windows NT 4 Resource Kit, available at
ECHO           http://www.microsoft.com/ntserver/nts/downloads/recommended/ntkit/
ECHO           EGREP is available at http://unxutils.sourceforge.net/ and
ECHO           several other sites.

:Example
ECHO.
ECHO Example:  READREG  "HKEY_CURRENT_USER\Environment"  "path"  /K
ECHO           should store the user part of the PATH variable in _PATH variable
ECHO.
ECHO Written by Rob van der Woude
ECHO http://www.robvanderwoude.com

Das Auslesen aus der reg funkioniert, nur die Weitergabe der Variablen nicht. Ich wüsste keine andere Lösung als mit regulären Ausdrücken zu arbeiten.
 
Hast du etwa auch die Seite schon entdeckt? http://www.robvanderwoude.com :D

Also ich hab's jetzt geschafft, es reicht eine Zeile, nämlich die folgende:
Code:
FOR /F "tokens=3 skip=2" %%i IN ('REG QUERY "HKCU\Control Panel\International" /v sCountry') DO SET test=%%i
Somit wird der Wert "Deutschland" als Variable %test% gesetzt. :)

Mit einem
Code:
SET TEST
IF ERRORLEVEL 1 GOTO FEHLER
Überprüfe ich noch ob die Variable auch existiert, somit kann der Batchvorgang reibungslos fortgesetzt werden. :)

Danke für die Hilfe. :D
 
Schwere Geburt ^^
 
-eraz- schrieb:
Hast du etwa auch die Seite schon entdeckt? http://www.robvanderwoude.com :D

Also ich hab's jetzt geschafft, es reicht eine Zeile, nämlich die folgende:
Code:
FOR /F "tokens=3 skip=2" %%i IN ('REG QUERY "HKCU\Control Panel\International" /v sCountry') DO SET test=%%i
Somit wird der Wert "Deutschland" als Variable %test% gesetzt. :)

Mit einem
Code:
SET TEST
IF ERRORLEVEL 1 GOTO FEHLER
Überprüfe ich noch ob die Variable auch existiert, somit kann der Batchvorgang reibungslos fortgesetzt werden. :)

Danke für die Hilfe. :D

Dieses Problem habe ich auch gerade...

Allerdings beinhaltet meine gesuchte Variable Leerzeichen, nämlich den Pfad "C:\Programme\Paragon\Festplatten Manager 7.5" - und %test% enthält dann nur "C:\Programme\Paragon\Festplatten" :(

Habt Ihre eine Idee, wie ich dieses Problem umgehen kann?

Viele Grüße

cool400´:cool_alt:
 
Zurück
Oben