xpander
Goto Top

Batch - reg query Zeichnfolge und Wert auslesen, bei CALL Parameterübergabe (Leerzeichen Problem)

Hallo Leute,

ich suche eine Lösung für mein folgendes Problem, kann mir dabei jemand bitte helfen?

Ich möchte mit reg query Zeichnfolgen und Werte auslesen und die Zeichnfolgen (%1) als Variable mit dem Wert (%3 usw) setzen.

Bei Beispiel 1- Alles bestens wenn die Werte keine Leerzeichen haben (bei Pfaden zB.)
Bei Beispiel 2 - habe ich 2 Probleme:
1. Bei jedem Parameter der keinen Inhalt hat bekommt die Variable %1 (:SET2) ein Leerzeichen dazu und ich kann mit den Variablen nicht weiterarbeiten
2. Was mache ich wenn der Registry Schlüssel mehr als 9 Zeichenfolgen hat?


Hier mein erster Anfänger Versuch:

:: BEISPIEL 1
for /f "tokens=1,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\IRGENDWAS" ^|findstr "REG_SZ"') do call :SET1 %%a %%b  
:: BEISPIEL 2
for /f "tokens=1,3-9 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\IRGENDWAS" ^|findstr "REG_SZ"') do call :SET2 %%a %%b %%c %%d %%e %%f %%g %%h  

:SET1
set "%1=%2"  
goto :EOF
:SET2
set "%1=%2 %3 %4 %5 %6 %7 %8 %9"  
goto :EOF

Wie muss die 2. Schleife aussehen damit das ohne umwege klappt?

gruß xpander

Content-Key: 118082

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

Printed on: April 20, 2024 at 01:04 o'clock

Member: bastla
bastla Jun 12, 2009 at 21:01:19 (UTC)
Goto Top
Hallo xpander!

Eigentlich stellt sich die Frage, was Du denn dann weiter mit den Variablen(-werten) vor hast (das Unterprogramm hat nur dann Sinn, wenn dort mehr als nur die Zuweisung erfolgen soll) ...

... ansonsten etwa so:
for /f "tokens=1,2* delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\IRGENDWAS" ^|findstr "REG_SZ"') do call :SET2 %%a "%%c"  
goto :eof

:SET2
set "%1=%~2"  
goto :eof
Grüße
bastla
Member: xpander
xpander Jun 12, 2009 at 21:51:44 (UTC)
Goto Top
Hi bastla

Aha, also den 2. Parameter mit %~2 expandieren und Anführungszeichen entfernen, da war ich bei meinen Versuchen ja schon knapp dranface-smile
Nur auf tokens=1,2* mit call :SET2 %%a "%%c", also das dann alles in "%%c" drin ist - darauf bin ich nicht gekommen,
hab mich da irgendwie auf token 1,3 versteift weil ich ja 2 nicht brauche. Batch ist manchmal schon etwas seltsam für michface-smile

Wieder was gelernt.
Toll, ich denke mein Problem ist gelöst - vielen dank bastla!

Und ja, eigentlich findet im Unterprogramm nur die Zuweisung statt - sollte ich es anders machen?
Ich glaube ich hatte das mal so gemacht, weil ich irgendwann mal Probleme mit den Variablen hatte, also leere Variablen in einer if-Abfrage oder so in der Art.
Weiß leider nicht mehr genau - ich weiß nur noch, dass mir da noch einiges an Wissen fehlt/eface-smile

gruß xpander
Member: bastla
bastla Jun 13, 2009 at 08:46:19 (UTC)
Goto Top
Hallo xpander!

Ohne Unterprogramm würde das einfach so aussehen:
for /f "tokens=1,2* delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\IRGENDWAS" ^|findstr "REG_SZ"') do set "%%a=%%c"
Grüße
bastla
Member: xpander
xpander Jun 13, 2009 at 10:24:18 (UTC)
Goto Top
Hi bastla

Kann ich so nicht machen, da Pfade aus der Registry dann entweder so "%Variablen%\Irgendwas" oder so "REG_SZ\Irgendwas" aussehen.
Ich verwende in den Registry Werten auch Variablen in den Pfaden, dachte da gibts noch einen anderen Weg...

trozdem danke bastla!
gruß xpander