[Batch] obtener clave del registro de Windows

Iniciado por jimbus80, 10 Febrero 2011, 19:16 PM

0 Miembros y 1 Visitante están viendo este tema.

jimbus80

¿Hay alguna manera de comprobar CLAVES, y no valores, del Registro con un .bat?

Es decir, si tengo la siguiente clave del registro:

[HKEY_CURRENT_USER\Software\Prueba\70392704]
"Money"="yes"

A mí me gustaría poder obtener la clave 70392704, no el valor de "Money".

Con REG QUERY sé cómo obtener el valor de "Money", pero no el nombre de la clave en que ese valor se encuentra (en el ejemplo, 70392704).

Quiero saberlo porque el nombre de dicha clave (en este caso un número) se genera aleatoriamente.

Novlucker

Código (dos) [Seleccionar]
reg query HKCU\Software\Prueba
Igual pero sin usar ningún parametro :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

jimbus80

#2
Sí, así funciona a través de CMD, pero lo que yo quiero es almacenarlo en una variable, es decir, que usando:

Código (dos) [Seleccionar]
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKCU\Software\Valve\Steam\Users" Y LO QUE SEA') DO SET clave_que_hay=%%B

pueda yo tener en la variable %clave_que_hay% el nombre de la/s clave/s que dependen de "Users", que es/son un número de 8 dígitos.

leogtz

Me supongo que con:
FOR /F "tokens=2* delims=    " %%A IN ('REG QUERY "HKCU\Software\Valve\Steam\Users" Y LO QUE SEA') DO SET clave_que_hay=%%B

Obtienes algo en la variable "clave_que_hay", podemos trabajar dicha variable para quedarnos con lo que nos interesa.

Si es eso lo que quieres, postea lo que te arroja la variable y un ejemplo de lo que quieres exactamente.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

jimbus80

Sí. La variable se muestra vacía porque la clave no tiene valores, sino otra subclave cuyo nombre es un número de 8 dígitos, que es lo que yo querría almacenar en mi variable (no los valores de clave o subclave alguna).

Es decir, si la clave completa es:

HKEY_CURRENT_USER\Software\Valve\Steam\Users\12345678

y yo uso en mi bat:

FOR /F "tokens=2* delims=    " %%A IN ('REG QUERY HKCU\Software\Valve\Steam\Users') DO SET clave=%%B

el valor de la variable "clave" es "" (vacío), cuando yo querría obtener 12345678.

Lo curioso es que usando en una ventana de MS-DOS (cmd) el comando:

reg query HKCU\Software\Valve\Steam\Users

no obtengo "" (vacío), sino HKEY_CURRENT_USER\Software\Valve\Steam\Users\12345678

leogtz

A ver, ejecuta esto en un bat y de la salida ¿qué es lo que exactamente quieres obtener?

Código (dos) [Seleccionar]
for /F "tokens=*" %%_ in ('REG QUERY HKCU\Software\Valve\Steam\Users') DO (
echo %%_
)


O sea, postea la salida del comando y dinos qué quieres obtener de dicha salida.

No puedo ayudarte bien porque yo no tengo esas claves:


C:\>code.bat

Error: el sistema no pudo encontrar la clave o valor de registro especificados

C:\>
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

jimbus80

Si ejecuto en un bat lo que tú dices:

for /F "tokens=*" %%_ in ('REG QUERY HKCU\Software\Valve\Steam\Users') DO (
   echo %%_
)


obtengo:

HKEY_CURRENT_USER\Software\Valve\Steam\Users\12345678

y lo que yo quiero es guardar en una variable los ocho dígitos finales, es decir, 12345678

leogtz

Si sabes que obtendrás un número de 8 dígitos al final, podrías hacer algo como esto:

No probado:

Código (dos) [Seleccionar]
for /F "tokens=*" %%_ in ('REG QUERY HKCU\Software\Valve\Steam\Users') DO (
   set "value=%%_"
)

echo %value:~-8%
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

jimbus80

Tu código funciona maravillosamente. Me ha permitido guardar los ocho dígitos finales. Por tanto, problema resuelto.

Gracias, Leo, por tus respuestas y por tu rapidez. Eres genial.

1 abrazo.  :D

leogtz

De nada.

Tengo una duda, ¿para qué haces esto?

Siempre me queda la curiosidad de para qué usan Batch. Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com