Batch Registry Pfad auslesen flascher Pfad

kinimod2010

Cadet 4th Year
Registriert
Sep. 2014
Beiträge
68
Hallo Leute ich habe einen Registry Pfad ausgelesen mit der batch datei. Jedoch nimmt er mir die selben Pfade für 64 und für 32 bit warum? was habe ich falsch gemacht?

Das ist mein code:
Code:
@Echo off
REM ------------------------------------------------
REM Diese Pfade muessen vom User angepasst werden
REM ------------------------------------------------


REM ----- Auswahl: 32bit oder 64bit (Programme und Kompilate) -----
set USEDBits=64
set Matlab_x64=0
set Matlab_x32=0

REM ----- Pfad zur Dymola-Installation -----
set DYMOLA=C:\app\tools\Dymola2014

REM ----- Pfad zur Matlab-Installation -----
ECHO Auswahl der Matlab-Version:
REM ECHO.
if "%USEDBits%"=="64" (
 ECHO Sie haben die 64 bit Variante in der Userpath eingestellt
 ) else (
 ECHO Sie haben die 32 bit Variante in der Userpath eingestellt
 )  
ECHO.
ECHO (1) Matlab R2007b
ECHO (2) Matlab R2009bSP1
ECHO (3) Matlab R2011b
ECHO (4) Matlab R2013bx64
ECHO ---------------------
ECHO (0) Abbruch
ECHO ---------------------
ECHO.
SET /p Variable=Auswahl:
IF %Variable%==1 GOTO Matlab2007b
IF %Variable%==2 GOTO Matlab2009bSP1
IF %Variable%==3 GOTO Matlab2011b
IF %Variable%==4 GOTO Matlab2013bx64
IF %Variable%==0 GOTO Abbruch
:Fehler
ECHO Falsche Auswahl!!
PAUSE
CLS

REM *************************************************************************************************
REM ************************* Auswahl der Matlab-Version ********************************************

:Matlab2007b
if "%USEDBits%"=="32" (
REM ---- 32bit
for /f "tokens=3 delims= " %%i IN ('reg query HKLM\SOFTWARE\WOW6432NODE\Mathworks\Matlab\7.5 /v MATLABROOT') do (SET Matlab_x32=%%i)
REM ---- 64bit
) else ( for /f "tokens=3 delims= " %%i IN ('reg query HKLM\SOFTWARE\Mathworks\Matlab\7.5 /v MATLABROOT') do (SET Matlab_x64=%%i))
echo 32 %Matlab_x32%
echo 64 %Matlab_x64%
GOTO Compiler_Wahl

:Matlab2009bSP1
if "%USEDBits%"=="32" (
REM ---- 32bit
for /f "tokens=3 delims= " %%i IN ('reg query HKLM\SOFTWARE\WOW6432NODE\Mathworks\Matlab\7.9.1 /v MATLABROOT') do (SET Matlab_x32=%%i)
REM ---- 64bit
) else (
for /f "tokens=3 delims= " %%i IN ('reg query HKLM\SOFTWARE\Mathworks\Matlab\7.9.1 /v MATLABROOT') do (SET Matlab_x64=%%i))
echo 32 %Matlab_x32%
echo 64 %Matlab_x64%
GOTO Compiler_Wahl

:Matlab2011b
if "%USEDBits%"=="32" (
REM ---- 32bit
for /f "tokens=3 delims= " %%i IN ('reg query HKLM\SOFTWARE\WOW6432NODE\Mathworks\Matlab\7.13 /v MATLABROOT') do (SET Matlab_x32=%%i)
REM ---- 64bit
) else ( for /f "tokens=3 delims= " %%i IN ('reg query HKLM\SOFTWARE\Mathworks\Matlab\7.13 /v MATLABROOT') do (SET Matlab_x64=%%i))
echo 32 %Matlab_x32%
echo 64 %Matlab_x64%
GOTO Compiler_Wahl

:Matlab2013bx64
if "%USEDBits%"=="32" (
REM ---- 32bit
echo Leider nicht Verfügbar!!!
REM ---- 64bit
) else (for /f "tokens=3 delims= " %%i IN ('reg query HKLM\SOFTWARE\Mathworks\Matlab\8.2 /v MATLABROOT') do (SET Matlab_x64=%%i))
echo 32 %Matlab_x32%
echo 64 %Matlab_x64%
GOTO Compiler_Wahl

:Abbruch
ECHO.Abbruch durch Benutzer
PAUSE
Exit

:Compiler_Wahl
REM ----- Pfad zur Installation des Visual-Compiler -----
REM set VSINSTALLDIR=C:\app\tools\MSVC9
set VSINSTALLDIR=C:\app\tools\MSVisualExpress2010
set VCINSTALLDIR=%VSINSTALLDIR%
set DEVENVDIR=%VSINSTALLDIR%\Common7\IDE
set COMPILER=msvc2010
REM set WINDOWSSDKDIR=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\
set WINDOWSSDKDIR=C:\Program Files\Microsoft SDKs\Windows\v7.1\


REM ----- Pfad zur Softcar-Version -----
set SOFTCAR=V:\tools\pc\softcar
set SOFTCAR_PATH_SC=%SOFTCAR%\sc
set SOFTCAR_PATH_RTLITE=%SOFTCAR%\sc_rt_lt
set SOFTCAR_PATH_ddk=%SOFTCAR%\ddk_nt4

REM ----- Pfad wo die Zieldateien stehen sollen -----
set SOFTCAR_USERPRODUCT_PATH=%cd%\Softcar

REM ----- Pfad zur Softcar-Version -----
set DSPACE=C:\app\tools\dspace71

REM ----- optional: Pfad zur ZBF-Daten -----
REM set ZBFROOT=%PROJDIR%\ZBFData
REM set ZBFFILENAME=Table2D_AllInOne.zbf

Gibt es noch eine andere möglichkeit das Auszulesen?
 
Zuletzt bearbeitet:
Du gibst oben vor, das USEDBITS=64 ist ... dann rennen alle if-Abfragen an der 32er vorbei. Soweit ich das kurz gesehen habe.

lg
fire
 
Das hab ich schon gecheckt :p aber es funktioniert trotzdem nicht ;(

Ich hab mir auch schon mal etwas aus einem anderem Ordner ausgeben lassen, das ist kein Problem nur der MathWorks Ordner 64 Bit ist ein Problem.

Danke trotzdem daweil
 
Zuletzt bearbeitet:
Aha, ich hab's nämlich grad auch mal getestet (am Desktop Pc, wo kein Matlab installiert ist, also irgendwelche anderen Schlüssel genommen) und konnte das Problem nicht reproduzieren.
Ergänzung ()

Hast du dir auch die Pfade, die in der Registry stehen mal angeguckt?
 
Ja habe ich gemacht ich versteh es auch nicht funktioniert nur bei Matlab 64 bit nicht :(
 
Ich habe MatLab nicht und kann das Skript so nicht testen.

Um zu verstehen, welche Art der Ausgabe falsch ist, müsste man die Werte sehen. Du hast aber nix dazu gepostet.

Wenn Pfade Leerzeichen enthalten, dann entfällt der delimiter.

Das Skript muss angewiesen werden mehrere Werte in die gleiche Variable zu schreiben. Dazu wird ein Asterisk (*) an das Token gehängt.


Gruss


edit:
Auf welchem System soll das Skript laufen?
 
Zuletzt bearbeitet:
Das ist meine Ausgabe :(

Auswahl der Matlab-Version:
Sie haben die 64 bit Variante in der Userpath eingestellt

(1) Matlab R2007b
(2) Matlab R2009bSP1
(3) Matlab R2011b
(4) Matlab R2013bx64
---------------------
(0) Abbruch
---------------------

Auswahl:2
32 0
64 C:\app\Matlab\R2009bSP1\


Die Pfade haben keine Leerzeichen also fällt das mal weg :)

Das Skript sollte auf einem Windows 7 Enterprise laufen.

Danke für deine Hilfe schon mal
 
Wird in deiner Ausgabe der Wert

64 C:\app\Matlab\R2009bSP1\

als der Richtige oder der Falsche angezeigt?

Was hätte dort stehen sollen wenn der Wert für die 64bit Version falsch ist?
 
C:\app\Matlab\R2009bSP1x64\ --> das wäre der richtige Pfad bei 64 Bit
C:\app\Matlab\R2009bSP1\ --> das wäre der richtige Pfad bei 32 Bit

sry ist nicht ganz rausgekommen
 
Schon sehr suspekt. Und wenn du den Registerywert einfach mal änderst, taucht dann immer noch der 32bit Pfad auf?
 
Ja wenn ich jetzt einen anderen Ordner wähle nimmt er immer die 32 Bit version??

Das ist ja das komische
 
Ui ui ui.

Mir fällt nix auf oder ein.

Eventuell mal den Wert MATLABROOT weglassen, da die Verwendung von /f die Suche im Wert und /v die Suche des Standardeintrags setzt. Ergo wird mit oder ohne Parameter der erste Eintrag an dritter Stelle gelesen.

Ist jetzt mal geraten ;)

Edit:
Kannst du mal den Registry-Eintrag exportieren (32 und 64 bit) ? Den importier ich dann um das Skript zu testen. Dann brauche ich nicht zu raten und kann es selbst testen.
 
Zuletzt bearbeitet:
meinst du so?

Code:
for /f "tokens=3 delims= " %%i IN ('reg query HKLM\SOFTWARE\Mathworks\Matlab\7.9.1 /f /v') do (SET Matlab_x64=%%i)

wenn ich das so mache bekomme ich 0 bei beiden herraus.

sry kann die reg nicht exportieren :/
 
Ich habe mal ein bißchen gegoogelt:

http://hannes-schurig.de/22/01/2014/batch-registry-werte-mit-und-ohne-leerzeichen-auslesen/
http://www.robvanderwoude.com/ntregquery.php

Vielleicht findest du dort Antworten. (Gut versteckt in den Beispielen :D)
Ergänzung ()

kinimod2010 schrieb:
meinst du so?

Code:
for /f "tokens=3 delims= " %%i IN ('reg query HKLM\SOFTWARE\Mathworks\Matlab\7.9.1 /f /v') do (SET Matlab_x64=%%i)

wenn ich das so mache bekomme ich 0 bei beiden herraus.

sry kann die reg nicht exportieren :/


Ja, so meinte ich das. Ich denke nämlich, die Abfrage wird für Matlab falsch durchgeführt, bzw. ausgewertet. Wenn an dritter Stelle (token=3)
der erste Eintrag (/v) nichts liefert, obwohl der Inhalt den Pfad angeben soll, muss die Bedingung in (for ..) geändert werden.

Da ich den Inhalt der Registry nicht kenne, weiss ich im Moment keinen Rat.
 
Warum kannst du die beiden Schlüssel nicht exportieren? Wo liegt das Problem?

Dass in deinem obigen Bsp. nichts rauskommen kann, ist auch klar, da du nach einem leeren Wert fragst, wenn müsstest du schon \v auch weglassen. Sollte allerdings hier keinen Unterschied machen, da zumindest bei mir MATLABROOT der einzige Wert in dem 64bit Schlüssel war.
 
simpsonsfan schrieb:
Dass in deinem obigen Bsp. nichts rauskommen kann, ist auch klar, da du nach einem leeren Wert fragst, wenn müsstest du schon \v auch weglassen. Sollte allerdings hier keinen Unterschied machen, da zumindest bei mir MATLABROOT der einzige Wert in dem 64bit Schlüssel war.
Wenn kein Wert angegeben wird, wird der Standardeintrag genommen. Wenn nur ein Wert vorhanden ist, sollte doch das Ergebnis gleich sein. Nicht /v weglassen sondern /f im reg query oder das Pattern zur Suche angegeben.
Wäre meine Idee.

Edit 1: Kack-Idee :rolleyes:

@simpsonfan
Könntest du mal die Pfade in der Reg posten? Oder den Zweig exportieren? Reizt mich irgendwie, wenn keine Lösung zu sehen ist :D

Edit 2:
Ich habe Mist bezüglich der Verwendung von /v geschrieben. Sorry für diese Irreführung. Das war ein Schuss in den Ofen
 
Zuletzt bearbeitet:
Ne, Plaste, wird \v verwendet, so muss schon auch ein Wertname angegeben werden. Das Ganze hat soweit ja auch funktioniert.

ich habe leider nur die 64 bit Version von Matlab, also weiß ich nicht, ob der Schlüssel für die 32bit Version anders aufgebaut ist.
Nur bin ich mir langsam nicht sicher, ob nicht doch der ausgegebene Pfad so auch in der Registry drin steht. Ein Export der beiden Schlüssel würde da zur Aufklärung verhelfen.

Edit:
Ich kann dir gerne meinen Schlüssel geben, kannst ihn dir auch einfach selbst anlegen. Es handelt sich lediglich um einen Wert, normale Zeichenfolge (Reg_SZ) mit Namen MATLABROOT und dem Pfad als Wert.
 
Zuletzt bearbeitet:
Hallo es handelt sich um einen Wert, normale Zeichenfolge (Reg_SZ) mit Namen MATLABROOT und dem Pfad als Wert. Das ist bei beiden

Für 32 Bit ist der Pfad: HKLM\SOFTWARE\WOW6432NODE\Mathworks\Matlab\7.9.1
Für 64 Bit ist der Pfad: HKLM\SOFTWARE\Mathworks\Matlab\7.9.1

Und was ist mit dem /f bzw. /v ich bin verwirrt wie soll ich das jetzt einbauen zum testen?

Er kommt ja nicht mal bis dahin im 64 Bit HKLM\SOFTWARE\Mathworks\Matlab/7.9.1

der Pfad von den beiden ist ja der selbe der einzige unterschied ist WOW6432NODE. Kann das sein das das windows iwie nicht checkt?

Vielen Dank für die Hilfen.
 
Zuletzt bearbeitet:
ich habe die entsprechenden Reg-Einträge für beide Versionen gemacht. Das Skript rennt in seiner ursprünglichen Fassung einwandfrei.

Code:
Auswahl der Matlab-Version:
Sie haben die 32 bit Variante in der Userpath eingestellt

(1) Matlab R2007b
(2) Matlab R2009bSP1
(3) Matlab R2011b
(4) Matlab R2013bx64
---------------------
(0) Abbruch
---------------------

Auswahl:2

32 C:\Users\Plaste\AppData\MatLab2009
64 0

Code:
Auswahl der Matlab-Version:
Sie haben die 64 bit Variante in der Userpath eingestellt

(1) Matlab R2007b
(2) Matlab R2009bSP1
(3) Matlab R2011b
(4) Matlab R2013bx64
---------------------
(0) Abbruch
---------------------

Auswahl:2
32 0
64 E:\Tools\Matlab2009x64

Ich weiss nicht wo der Fehler liegen soll. Ausser einem:
Wird hier vielleicht auf Grund von beschränkten Nutzerrechten die Ausführung verhindert oder falsch interpretiert?
Ergänzung ()

kinimod2010 schrieb:
Hallo es handelt sich um einen Wert, normale Zeichenfolge (Reg_SZ) mit Namen MATLABROOT und dem Pfad als Wert. Das ist bei beiden

Für 32 Bit ist der Pfad: HKLM\SOFTWARE\WOW6432NODE\Mathworks\Matlab\7.9.1
Für 64 Bit ist der Pfad: HKLM\SOFTWARE\Mathworks\Matlab\7.9.1

Und was ist mit dem /f bzw. /v ich bin verwirrt wie soll ich das jetzt einbauen zum testen?

Er kommt ja nicht mal bis dahin im 64 Bit HKLM\SOFTWARE\Mathworks\Matlab/7.9.1

Vielen Dank für die Hilfen.

Vergiss das mit /f und /v. Ich habe da Mist geschrieben.
 
Zurück
Oben