Supportnet / Forum / BS-Sonstige
Registry einträge auslesen
Frage
Kann ich rigendwei registry einträge auslesen und inne Variable speichern?
Antwort 1 von Dummschwätzer-schon_regst
JA !! aber nicht meine °;-)
Antwort 2 von Undertaker
Hi,
ja, mit der REG.EXE (für Windows NT4, 2k, XP und 2k3).
Für Windows NT4 ist die REG.EXE im Resource Kit, für Windows 2000 auf der CD im Ordner Tools (SETUP starten) und in Windows XP sowie 2k3 ist sie Bestandteil des BS.
Gruß
Undertaker
ja, mit der REG.EXE (für Windows NT4, 2k, XP und 2k3).
Für Windows NT4 ist die REG.EXE im Resource Kit, für Windows 2000 auf der CD im Ordner Tools (SETUP starten) und in Windows XP sowie 2k3 ist sie Bestandteil des BS.
Gruß
Undertaker
Antwort 3 von dd
Hi
also ist meine schuld, ich hab zu wenig angaben gemacht (hatte es eilig)..
ich möchte das auslesen mit einer Batch datei machen, deshalb auch dos-forum.
Ist das irgendwie möglich??
Danke!
also ist meine schuld, ich hab zu wenig angaben gemacht (hatte es eilig)..
ich möchte das auslesen mit einer Batch datei machen, deshalb auch dos-forum.
Ist das irgendwie möglich??
Danke!
Antwort 4 von Undertaker
Hi,
Du kannst reg.exe aus einer Batchdatei aufrufen, Parameter übergeben und die Ausgabe auswerten. Aber Du hast leider immer noch nicht geschrieben, unter welchem BS Du das Skript verwenden möchtest...
Oder schaue Dir mal den Interpreter KIXTART an. Den gibt es als 16- und 32-Bit Version. Mit der Funktion READVALUE("subkey", "entry") kann man ebenfalls den Inhalt eines Wertes auslesen.
Gruß
Undertaker
Du kannst reg.exe aus einer Batchdatei aufrufen, Parameter übergeben und die Ausgabe auswerten. Aber Du hast leider immer noch nicht geschrieben, unter welchem BS Du das Skript verwenden möchtest...
Oder schaue Dir mal den Interpreter KIXTART an. Den gibt es als 16- und 32-Bit Version. Mit der Funktion READVALUE("subkey", "entry") kann man ebenfalls den Inhalt eines Wertes auslesen.
Gruß
Undertaker
Antwort 5 von dd
Hi!
ich benutze WinXP und möchte die einträge dann gleich in eine Variable übergeben!
Wenn ich das in einer batch datei mache, wie lauten dann die parameter für reg.exe??
Danke!
ich benutze WinXP und möchte die einträge dann gleich in eine Variable übergeben!
Wenn ich das in einer batch datei mache, wie lauten dann die parameter für reg.exe??
Danke!
Antwort 6 von Undertaker
Hi,
ich habe eben nochmal etwas mit REG.EXE getestet. Leider werden Zeichenketten nicht mit Anführungszeichen ausgegeben, was die weitere Verarbeitung sehr schwer macht.
Mit KIXTART (hab´s mit der aktuellen V4.22 getestet) ist das aber kein Problem:
test.bat
Gruß
Undertaker
ich habe eben nochmal etwas mit REG.EXE getestet. Leider werden Zeichenketten nicht mit Anführungszeichen ausgegeben, was die weitere Verarbeitung sehr schwer macht.
Mit KIXTART (hab´s mit der aktuellen V4.22 getestet) ist das aber kein Problem:
test.bat
KIX32.EXE test.kix
ECHO Wert von TEST=%TEST%
test.kix$Value = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName")
If @ERROR = 0
SETL "TEST=$Value"
Endif
Gruß
Undertaker
Antwort 7 von dd
geht das auch anderst??
weil da muss man dann immer noch die KIX32.EXE mitkopieren und dass find ich umständlich...
oder bekommt man das irgendwie in eine datei?
DankE!
weil da muss man dann immer noch die KIX32.EXE mitkopieren und dass find ich umständlich...
oder bekommt man das irgendwie in eine datei?
DankE!
Antwort 8 von Undertaker
Hi,
das mit der KIX32.EXE ist meines Erachtens die einfachste Lösung. Das Script ist kurz, die KIX32.EXE muß immer kopiert werden und sie ist kompatibel von Win9x bis WinXP.
Ob die REG.EXE unter Win9x/ME funktioniert, habe ich noch nicht ausprobiert, aber auf Win2k muß sie auch kopiert (oder vorher installiert) werden.
Bei der REG.EXE besteht außerdem das Problem, das der Inhalt eines Wertes nicht so einfach ausgelesen werden kann, wenn der Name oder der Inhalt des Wertes Leerzeichen enthält:
Mit | FINDSTR kann man die Zeile herausfiltern:
Aber da Name und Typ des Wertes ebenfalls in der Zeile stehen, ist ohne großen Aufwand nicht möglich mit FOR /F nur den Inhalt aus der Zeile zu extrahieren, wenn der Name oder der Inhalt des Wertes Leerzeichen enthält:
Man könnte nun anfangen x Tokens auszulesen, zu prüfen, in welchem Token der Typ des Wertes steht und dann alle nachfolgenden Tokens mit Leerzeichen wieder aneinanderhängen, aber das ist nun doch etwas sehr umständlich. Aber wenn Du möchtest, kannst Du das gerne programmieren...
Gruß
Undertaker
das mit der KIX32.EXE ist meines Erachtens die einfachste Lösung. Das Script ist kurz, die KIX32.EXE muß immer kopiert werden und sie ist kompatibel von Win9x bis WinXP.
Ob die REG.EXE unter Win9x/ME funktioniert, habe ich noch nicht ausprobiert, aber auf Win2k muß sie auch kopiert (oder vorher installiert) werden.
Bei der REG.EXE besteht außerdem das Problem, das der Inhalt eines Wertes nicht so einfach ausgelesen werden kann, wenn der Name oder der Inhalt des Wertes Leerzeichen enthält:
C:\>reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"
! REG.EXE VERSION 2.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
ProductName REG_SZ Microsoft Windows 2000
C:\>
Mit | FINDSTR kann man die Zeile herausfiltern:
C:\>reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName" | FINDSTR "ProductName"
ProductName REG_SZ Microsoft Windows 2000
C:\>
Aber da Name und Typ des Wertes ebenfalls in der Zeile stehen, ist ohne großen Aufwand nicht möglich mit FOR /F nur den Inhalt aus der Zeile zu extrahieren, wenn der Name oder der Inhalt des Wertes Leerzeichen enthält:
C:\>reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName" | FINDSTR "ProductName" >test.txt
C:\>FOR /F "tokens=1,2,3" %a IN (test.txt) DO SET XYZ=%c
C:\>SET XYZ=Microsoft
C:\>DEL test.txt
C:\>
Man könnte nun anfangen x Tokens auszulesen, zu prüfen, in welchem Token der Typ des Wertes steht und dann alle nachfolgenden Tokens mit Leerzeichen wieder aneinanderhängen, aber das ist nun doch etwas sehr umständlich. Aber wenn Du möchtest, kannst Du das gerne programmieren...
Gruß
Undertaker
Antwort 9 von dd
OK Habs hinbekommen...
wens interresier..so gehts..
@echo off
echo @echo off >> rege.bat
echo if %%1'==' goto end >> rege.bat
echo set /a s=%%s%%+1 >> rege.bat
echo set a%%s%%=%%1 >> rege.bat
echo :end >> rege.bat
reg query "HKEY_CURRENT_USER\Software\AndreasBauer" /v "Color" | FINDSTR "Color" >> reg.txt
for /f "tokens=3*" %%i in (reg.txt) do call rege %%i%%j
color %a1%
pause
del rege.bat
del reg.txt
hier isses ein beispiel mit den Colors...
Dnake nochmal!
wens interresier..so gehts..
@echo off
echo @echo off >> rege.bat
echo if %%1'==' goto end >> rege.bat
echo set /a s=%%s%%+1 >> rege.bat
echo set a%%s%%=%%1 >> rege.bat
echo :end >> rege.bat
reg query "HKEY_CURRENT_USER\Software\AndreasBauer" /v "Color" | FINDSTR "Color" >> reg.txt
for /f "tokens=3*" %%i in (reg.txt) do call rege %%i%%j
color %a1%
pause
del rege.bat
del reg.txt
hier isses ein beispiel mit den Colors...
Dnake nochmal!
Antwort 10 von Undertaker
Hi,
ah, den * für Tokens kannte ich noch nicht...
hab´s noch etwas verfeinert:
test.bat
Gruß
Undertaker
ah, den * für Tokens kannte ich noch nicht...
hab´s noch etwas verfeinert:
test.bat
@echo off
call ReadKey.bat "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" "ProductName"
echo ReadKey=%ReadKey%
pause
ReadKey.bat@echo off
echo @echo off >ReadKeyTmp.bat
echo set ReadKey=%%1 >>ReadKeyTmp.bat
echo :next >>ReadKeyTmp.bat
echo shift >>ReadKeyTmp.bat
echo if %%1'==' goto end >>ReadKeyTmp.bat
echo set ReadKey=%%ReadKey%%%%1 >>ReadKeyTmp.bat
echo goto next >>ReadKeyTmp.bat
echo :end >>ReadKeyTmp.bat
reg query %1 /v %2 |findstr %2 >ReadKeyTmp.txt
for /f "tokens=3*" %%i in (ReadKeyTmp.txt) do call ReadKeyTmp.bat %%i %%j
del ReadKeyTmp.bat
del ReadKeyTmp.txt
Gruß
Undertaker