.BAT - Recuperar "Datos" del Registro de WINDOWS
Resuelto
micromega
Mensajes publicados
141
Estado
Miembro
-
Micromega -
Micromega -
Hola,
He creado una entrada en el registro de Windows que se presenta así:
[HKEY_CLASSES_ROOT\TEST]
@="C:\\Program Files (x86)\\DOSSIER A SUPPRIMER"
Por otro lado, tengo un .bat que quisiera recuperar el dato: "C:\\Program Files (x86)\\DOSSIER A SUPPRIMER" para poder eliminar directamente la carpeta.
Quiero utilizar el registro, ya que me evita hacer una búsqueda larga en todos los discos.
¿Cómo puedo recuperar el dato del registro para que mi .bat lo utilice?
Está más allá de mis competencias...
Gracias por su ayuda.
He creado una entrada en el registro de Windows que se presenta así:
[HKEY_CLASSES_ROOT\TEST]
@="C:\\Program Files (x86)\\DOSSIER A SUPPRIMER"
Por otro lado, tengo un .bat que quisiera recuperar el dato: "C:\\Program Files (x86)\\DOSSIER A SUPPRIMER" para poder eliminar directamente la carpeta.
Quiero utilizar el registro, ya que me evita hacer una búsqueda larga en todos los discos.
¿Cómo puedo recuperar el dato del registro para que mi .bat lo utilice?
Está más allá de mis competencias...
Gracias por su ayuda.
14 respuestas
-
hola
con el comando reg, ver:reg query /?
-
Hola Dubcek,
Primero que nada, gracias por ayudarme una vez más. ¡Siempre estás ahí para echarme una mano, es genial!
"Reg Query" es efectivamente una parte del código que me faltaba.
Hice: Reg query "HKEY_CLASSES_ROOT\TEST"
y me encontró: C:\Program Files (x86)\DOSSIER A SUPPRIMER
Deseo usar este valor, ya sea para eliminar una carpeta (en este caso "DOSSIER A SUPPRIMER"), o para ejecutar un ".exe" que se haya identificado de la misma manera.
Pensé que sería simple, así que hice un código en bat así:
Reg query "HKEY_CLASSES_ROOT\TEST"
rd /s /q "DOSSIER A SUPPRIMER"
Pero al final debo estar equivocado. He buscado en internet pero no encontré nada que trate sobre una posible acción después de haber recuperado la ruta.
¿Alguna idea?
Gracias. -
hay que extraer el nombre de la cadena devuelta por reg query intenta:
@echo off
for /F "tokens=3* delims=\" %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (
echo la ruta de acceso es %%a
set valor=%%a
)
echo valor=%valor% -
Hola,
Cuando inicio, recibo este mensaje:
Error: Error: el sistema no encontró la clave o el valor del Registro especificado.
valor=
Presiona una tecla para continuar...
He intentado hacer algunas modificaciones, pero nada concluyente...
:/ -
La commande
Reg query "HKEY_CLASSES_ROOT\TEST"
retourne les informations sur la clé de registre spécifiée, qui est "HKEY_CLASSES_ROOT\TEST". Cela inclut les valeurs et sous-clés qui existent sous cette clé de registre. -
Hola Dubcek,
De hecho cometí un error al copiar el código.
El resultado es bastante positivo, aquí está lo que obtengo:
el camino de acceso es CARPETA A ELIMINAR
valor=CARPETA A ELIMINAR
Presiona una tecla para continuar...
Ahora, ¿en qué lugar y cómo puedo insertar un:
rd /s /q (para eliminar una carpeta)
o
call (para ejecutar una aplicación .exe contenida en la carpeta encontrada por la clave de registro)
?? -
rd /s/q "%valeur%"
-
Aquí es donde también intenté incorporar el "RD" o el "Call", pero recibo el mensaje:
"El archivo especificado no se encuentra" (y esta vez no cometí ningún error ;))
Si en su lugar hago un:
echo valor=%valor%
me dice:
la ruta de acceso es DOSSIER A SUPPRIMER
valor=DOSSIER A SUPPRIMER
Si solo hago un:
Reg query "HKEY_CLASSES_ROOT\TEST"
obtengo: C:\Program Files (x86)\DOSSIER A SUPPRIMER
Aquí está el código que hice siguiendo tus indicaciones:
echo off
for /F "tokens=3* delims=\" %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (
echo la ruta de acceso es %%a
set valor=%%a
)
rd /s /q "%valor%"
pause
end
¿El valor de "RD" tiene en cuenta toda la ruta dada por "reg query"?
Estamos realmente cerca del objetivo ahora... -
Está claro que hay que usar la ruta completa, intenta
echo off
for /F %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (
echo la ruta de acceso es %%a
set valor=%%a
)
echo rd /s /q "%valor%"
pause
end -
He intentado, obtengo:
Error: Error: el sistema no pudo encontrar la clave o el valor de Registro especificado.
Venceremos...
:/ -
('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') -
Si simplemente hago:
('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_')
Obtengo:
D:\Escritorio>('reg query HKEY_CLASSES_ROOT\OKOK | findstr REG_' )
''reg' no se reconoce como un comando interno
o externo, un programa ejecutable o un archivo por lotes.-
-
Hola,
He hecho:
For /F %a in ('reg query HKEY_CLASSES_ROOT\TEST | findstr REG_') do (e
cho la ruta de acceso es %a )
Y obtengo:
(echo la ruta de acceso es (por )
la ruta de acceso es (por
Encuentra una ruta de acceso que es "Por", ¿corresponde a algo en .bat?
De todos modos, ahí responde algo, no hay error. -
-
Estoy trabajando en ".bat" porque me gustaría obtener el resultado en un archivo .bat.
Si ejecuto (en .bat) el último código que me enviaste, todo parece estar bien, encuentra el camino correcto a partir del registro:
la ruta de acceso es (por defecto) REG_SZ C:\Program Files (x86)\DOSSIER A SUPPRIMER
Presiona una tecla para continuar...
He intentado agregar un RD /q /s al final en varios intentos, pero no ha funcionado.
Lo que es seguro es que estamos recuperando la ruta correcta a partir del registro.
Y lo que está bloqueando es reutilizar esta ruta para eliminar la carpeta... -
-
-
Hola,
Me permito reabrir este tema, porque después de usar este comando en .bat que funciona perfectamente, me encontré con un problema:
Si a partir de una clave de registro definida, hago:
For /F "tokens=3,*" %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (echo rd /s /q "%%b")
Voy a obtener por ejemplo:
C:\\Program Files (x86)\\DOSSIER 1\\DOSSIER2
El comando me va a eliminar "DOSSIER 2", pero me gustaría eliminar directamente la raíz, es decir: DOSSIER1 (que comprende DOSSIER 2 y lo que hay dentro)
Mi pregunta es, ¿cómo con este comando tener una retroacción?
Gracias por su ayuda -
Hola Dubcek,
Solo una última pregunta sobre el código.
Entonces utilizo este código que funciona muy bien:
@Echo off
setlocal enableDelayedExpansion
For /F "tokens=3,*" %%a in ('reg query "CLAVE REGISTRO" ^| findstr REG_') do (
for /f "delims=" %%c in ("%%b") do (
set L=%%~dc
set ff=%%~pc
set ff=!ff:~0,-1!
for /f "delims=" %%d in ("!ff!") do (
rd /s/q "!L!%%~pd" >NUL 2>&1
)
)
)
Si quiero avanzar en la ruta que me da el registro lo hago así:
"!L!%%~pd\CARPETA 3\CARPETA 4" eso funciona muy bien y no hay problema.
Pero, ¿cómo puedo hacer para designar una carpeta que se encuentra hacia atrás?
Por ejemplo, si la ruta que me da el registro es:
c:\TEST\CARPETA 1\CARPETA 2
¿Cómo puedo designar "CARPETA 1" o "TEST"?
Gracias.-
-
-
¿Así? :
@Echo off
setlocal enableDelayedExpansion
For /F "tokens=3,*" %%a in ('reg query "CLAVE REGISTRO" ^| findstr REG_') do (
for /f "delims=" %%c in ("%%b") do (
set L=%%~dc
set ff=%%~pc
set ff=!ff:~0,-1!
for /f "delims=" %%d in ("!ff!") do (
C:> set c=C:\TEST\DOSSIER 1\DOSSIER 2
C:> for /F "tokens=1-16 delims=:\" %a in ("%c%") do @echo %b
TEST
C:> for /F "tokens=1-16 delims=:\" %a in ("%c%") do @echo %c
DOSSIER 1
C:> for /F "tokens=1-16 delims=:\" %a in ("%c%") do @echo %d
DOSSIER 2
rd /s/q "!L!%%~pd" >NUL 2>&1
)
)
) -
estaba mostrando un ejemplo de forma interactiva en mi disco C:
si reg query devuelve C:\TEST\DOSSIER 1\DOSSIER 2
entoncesFor /F "tokens=3,*" %%a in ('reg query "CLAVE REGISTRO" ^| findstr REG_') do (
for /F "tokens=1-16 delims=:\" %%p in ("%%b") do (
%%p contiene C, %%q TEST, %%r DOSSIER 1, %%s DOSSIER 2 -
Hola Dubcek,
Entiendo bien el método, pero sigo teniendo problemas con la sintaxis.
He hecho:
@Echo off
setlocal enableDelayedExpansion
For /F "tokens=3,*" %%a in ('reg query "CLAVE REGISTRO" ^| findstr REG_') do (
for /F "tokens=1-16 delims=:\" %%q in ("%%b") do (
echo rd /s/q "%%q"
)
)
pause
Recibo como respuesta: rd /s/q "C"
¿Es normal o he vuelto a cometer un error en la sintaxis del código?
gracias.
-