.BAT - Recuperar "Datos" del Registro de WINDOWS

Resuelto
micromega Mensajes publicados 141 Estado Miembro -  
 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.

14 respuestas

  1. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    hola
    con el comando reg, ver:
    reg query /?
    0
  2. micromega Mensajes publicados 141 Estado Miembro 1
     
    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.
    0
  3. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    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%
    0
  4. Micromega
     
    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...

    :/
    0
  5. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    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.
    0
  6. Micromega
     
    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)
    ??
    0
  7. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
     rd /s/q "%valeur%"
    0
  8. Micromega
     
    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...
    0
  9. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    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
    0
  10. Micromega
     
    He intentado, obtengo:

    Error: Error: el sistema no pudo encontrar la clave o el valor de Registro especificado.

    Venceremos...

    :/
    0
  11. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_')
    0
  12. Micromega
     
    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.
    0
    1. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       
      esta orden solo funciona con FOR (con los ('
      ¿esta orden devuelve un error?
      for /F %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (
      echo la ruta es %%a
      )
      0
    2. Micromega
       
      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.
      0
    3. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       
      en un .bat o interactivamente ?
      y esto en un bat
      @echo off
      For /F "delims=" %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (echo el camino de acceso es %%a )
      
          
      0
    4. Micromega
       
      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...
      0
    5. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       

      Obtengo: C:\Program Files (x86)\DOSSIER A SUPPRIMIR
      sin REG...
      ¿cuál es la línea exacta?
      0
  13. micromega Mensajes publicados 141 Estado Miembro 1
     
    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
    0
    1. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       
      tester en remplaçant %%b par %%~pb
      C:> for /f "delims=" %%b in ("C:\\Program Files (x86)\\DOSSIER 1\\DOSSIER2") do @echo %%~pb
      \Program Files (x86)\DOSSIER 1\
      C:>
      0
    2. micromega Mensajes publicados 141 Estado Miembro 1
       
      Una vez más, hola a ti Dubcek y gracias.

      He hecho:

      For /F "tokens=3,*" %%a in ('reg query "HKEY_CLASSES_ROOT\TEST" ^| findstr REG_') do (rd /s /q "%%~pb")

      Parece que ha funcionado (aún no estoy del todo seguro), pero necesitaría retroceder una vez más, ¿qué hay que añadir para retroceder?

      Gracias
      0
    3. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       
      una método, se quita la \ al final y se vuelve a pasar por un bucle FOR
      C:> cc
      \a\b\

      C:> type cc.bat
      @echo off
      setlocal enableDelayedExpansion
      set f=\a\b\c\d
      for /f "delims=" %%b in ("%f%") do (
      set ff=%%~pb
      set ff=!ff:~0,-1!
      for /f "delims=" %%c in ("!ff!") do (
      echo %%~pc
      )
      )
      0
    4. Micromega
       
      Lo siento, pero no entendí bien... :s

      No hay forma a partir de esto:

      For /F "tokens=3,*" %%a in ('reg query "HKEY_CLASSES_ROOT\TEST" ^| findstr REG_') do (rd /s /q "%%~pb")

      de tener algo más simple para designar carpetas anteriores a la carpeta que designa la clave del registro?

      Gracias :)
      0
    5. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       
      ¿Entonces con C:\\Program Files (x86)\\DOSSIER 1\\DOSSIER2 quieres recuperar C:\\Program Files (x86)?
      0
  14. micromega Mensajes publicados 141 Estado Miembro 1
     
    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.
    0
    1. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       
      ¿poner en una variable: \TEST o \DOSSIER 1 o entrar en ella?
      0
    2. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       
      ```html avec une boucle comme ça
      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

      ```
      0
    3. micromega Mensajes publicados 141 Estado Miembro 1
       
      ¿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

      )
      )
      )
      0
    4. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       
      estaba mostrando un ejemplo de forma interactiva en mi disco C:
      si reg query devuelve C:\TEST\DOSSIER 1\DOSSIER 2
      entonces
      For /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
      0
    5. Micromega
       
      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.
      0