spookypoof
Goto Top

Wie bis zu einem bestimmten Text eines Reg-Eintrags in einer Variable abspeichern?

Ahoi,

Ich brauche Hilfe. Und zwar muss ich den VLC-Pfad im Reg finden Und in meiner Batch nutzen.

FOR /F "tokens=2,*" %%A in ('reg query "HKEY_CLASSES_ROOT\Applications\vlc.exe\shell\Open\command" ^| find "REG_SZ"') do SET vlc=%%B  

Hinbekommen habe ich es schon, aber das Problem ist, dass in der Reg als Wert noch das steht ' --started-from-file "%1" ' Und das stört den start vom VLC in der Batch. Das heißt ich brauche nur den Installations-Pfad des VLCs.

Die Frage: Wie kann ich bis zu einer bestimmten Text eines Reg-Eintrags in einer Variable abspeichern?


~spookypoof

Content-ID: 207746

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

Ausgedruckt am: 23.11.2024 um 07:11 Uhr

bastla
bastla 09.06.2013 aktualisiert um 22:53:46 Uhr
Goto Top
Hallo spookypoof!

Wenn du mit "Zeile" tatsächlich "Zeile" meinst, dann etwa so:
FOR /F "tokens=2*" %%A in ('reg query "HKEY_CLASSES_ROOT\Applications\vlc.exe\shell\Open\command" ^| find "REG_SZ"') do if not defined vlc SET "vlc=%%B"
Grüße
bastla
spookypoof
spookypoof 09.06.2013 aktualisiert um 22:33:34 Uhr
Goto Top
Ops mein Fehler :S Bis zu einem bestimmten Text.

In meinem Fall liegt der VLC hier: C:\Program Files (x86)\VideoLAN\VLC\vlc.exe
Aber in dem Reg Eintrag steht: "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" --started-from-file "%1"
Das ' --started-from-file "%1" ' soll von der Batch ignoriert werden. Und der VLC-Installations Pfad soll in einer Variable abgespeichert werden.

Aber danke schon mal.
bastla
bastla 09.06.2013 aktualisiert um 22:53:37 Uhr
Goto Top
Hallo spookypoof!

Unter der Annahme, dass der Pfad unter Anführungszeichen steht:
FOR /F "tokens=2*" %%A in ('reg query "HKEY_CLASSES_ROOT\Applications\vlc.exe\shell\Open\command" ^| find "REG_SZ"') do for %%I in (%%B) do if not defined vlc SET "vlc=%%~I"
Grüße
bastla
spookypoof
spookypoof 09.06.2013 um 22:40:40 Uhr
Goto Top
hmm.. meine Batch stürzt ab. :/ Und ich denke dass, "%1" ist das Problem.
bastla
bastla 09.06.2013 aktualisiert um 22:53:25 Uhr
Goto Top
Hallo spookypoof!

Na gut, dann vielleicht:
FOR /F "tokens=2*" %%A in ('reg query "HKEY_CLASSES_ROOT\Applications\vlc.exe\shell\Open\command" ^| find "REG_SZ"') do SET "vlc=%%B"  
set "vlc=%vlc: --started-from-file "%1"=%"  
Grüße
bastla
spookypoof
spookypoof 09.06.2013 um 22:49:35 Uhr
Goto Top
Perfekt!! Hat geklappt =)

Vielen Dank bastla!
bastla
bastla 09.06.2013 um 22:53:14 Uhr
Goto Top
Hallo spookypoof!

Freut mich face-smile (und ist auch die sauberere Variante) ...

Grüße
bastla
Friemler
Friemler 09.06.2013 um 22:56:55 Uhr
Goto Top
Hallo spookypoof,

für die Abfrage des Pfades von VLC gibt es einen besser geeigneten Reg-Schlüssel:
HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN\VLC
Dort den Standartwert auslesen:
@echo off & setlocal

for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN\VLC" /ve') do (  
  set "vlc=%%b"  
)

Gruß
Friemler
spookypoof
spookypoof 09.06.2013 aktualisiert um 23:16:35 Uhr
Goto Top
Jo, ich wollte es am Anfang auch mit dem Reg-Schlüssel machen, aber den Schlüssel finde ich persönlich in meiner Reg nicht, obwohl VLC installiert ist. :/

Hab dafür ein Bild angefertigt:
http://s7.directupload.net/images/130609/cjdgyrqd.png
Friemler
Friemler 09.06.2013 um 23:22:09 Uhr
Goto Top
Hallo spookypoof,

wie ich an den Pfaden in diesem Kommentar sehe, hast Du ein 64Bit-System, VLC-Player ist aber eine 32Bit Anwendung. Der Registry-Pfad lautet deshalb
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\VideoLAN\VLC
wenn Du ihn aus einer 64Bit-Anwendung auslesen möchtest.

Gruß
Friemler
spookypoof
spookypoof 09.06.2013, aktualisiert am 14.07.2013 um 21:22:05 Uhr
Goto Top
Sie haben recht! Jetzt wäre noch gut wenn meine Batch erkennt ob ich ein 32Bit System nutze dann den "HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN\VLC" Pfad benutzt oder wenn es um ein 64Bit System handelt den "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\VideoLAN\VLC" Pfad.

Ich denke so oder?

FOR /F "tokens=1 delims=[" %%A IN ('VER') DO ECHO %%A^(32-bits^) >nul  
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN\VLC" /v InstallDir 2^>nul ^| find "REG_SZ" ') do (  
  set vlc="%%b\vlc.exe" >nul  

)

) else (

FOR /F "tokens=1 delims=[" %%A IN ('VER') DO ECHO %%A^(64-bits^) >nul  
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\VideoLAN\VLC" /v InstallDir 2^>nul ^| find "REG_SZ" ') do (  
  set vlc="%%b\vlc.exe" >nul  

)

)
Friemler
Friemler 09.06.2013 um 23:46:38 Uhr
Goto Top
Ich würde es auch mit
if defined ProgramFiles(x86)
lösen, hat sich als zuverlässiger als die Abfrage der Systemvariablen PROCESSOR_ARCHITECTURE erwiesen.

Gruß
Friemler
spookypoof
spookypoof 09.06.2013 aktualisiert um 23:59:17 Uhr
Goto Top
Jo, würde auch gehen face-smile

Danke dir auch Friemler!
Endoro
Endoro 10.06.2013 aktualisiert um 00:14:26 Uhr
Goto Top
Hallo spookypoof,

hier noch ein Codestückchen zu Windows Version entdecken:

@echo off
setlocal EnableDelayedExpansion

::Identify OS
for /F "delims=" %%a in ('ver') do set ver=%%a  
set Version=
for %%a in (95=95 98=98 ME=ME NT=NT 2000=2000 5.1.=XP 5.2.=2003 6.0.=Vista 6.1.=7 6.2.=8) do (
   if "!Version!" equ "this" (  
      set Version=Windows %%a
   ) else if "!ver: %%a=!" neq "%ver%" (  
      set Version=this
   )
)

::Identify bit
if exist "%SYSTEMDRIVE%\Program Files (x86)" (  
   set Type=64 bit
) else (
   set Type=32 bit
)

::Display result
echo %Version% %Type%

Gruss!