.BAT - Récupérer "Données" du Registre WINDOWS
Résolu
micromega
Messages postés
131
Date d'inscription
Statut
Membre
Dernière intervention
-
Micromega -
Micromega -
Bonjour,
J'ai créé une entrée dans le registre Windows qui se présente ainsi :
[HKEY_CLASSES_ROOT\TEST]
@="C:\\Program Files (x86)\\DOSSIER A SUPPRIMER"
D'un autre côté j'ai un .bat qui souhaiterait récupérer la donnée : "C:\\Program Files (x86)\\DOSSIER A SUPPRIMER" afin de supprimer directement le dossier.
Je souhaite utiliser le registre, cela m'évite de faire une recherche longue dans tous les disques.
Comment puis-je récupérer la donnée du registre pour que mon .bat l'utilise ?
C'est au-delà de mes compétences...
Merci pour vos aides.
J'ai créé une entrée dans le registre Windows qui se présente ainsi :
[HKEY_CLASSES_ROOT\TEST]
@="C:\\Program Files (x86)\\DOSSIER A SUPPRIMER"
D'un autre côté j'ai un .bat qui souhaiterait récupérer la donnée : "C:\\Program Files (x86)\\DOSSIER A SUPPRIMER" afin de supprimer directement le dossier.
Je souhaite utiliser le registre, cela m'évite de faire une recherche longue dans tous les disques.
Comment puis-je récupérer la donnée du registre pour que mon .bat l'utilise ?
C'est au-delà de mes compétences...
Merci pour vos aides.
A voir également:
- Récupérer clé de registre cmd
- Clé de registre - Guide
- Clé usb non détectée - Guide
- Récupérer clé windows cmd - Guide
- Clé windows 8 - Guide
- Cmd - Guide
14 réponses
Salut Dubcek,
Tout d'abord merci à toi pour m'aider une fois de plus. Tu es toujours là pour filer un coup de pouce, c'est cool !
"Reg Query", c'est bien une partie de code qui me manquait.
J'ai fait : Reg query "HKEY_CLASSES_ROOT\TEST"
et il m'a bien trouvé : C:\Program Files (x86)\DOSSIER A SUPPRIMER
Je souhaite utiliser cette valeur, soit pour effacer un dossier (ici "DOSSIER A SUPPRIMER"), soit lancer un ".exe" qui aura été identifié de la même manière.
Je pensais que c'était simple, j'ai donc fait un code en bat comme ça :
Reg query "HKEY_CLASSES_ROOT\TEST"
rd /s /q "DOSSIER A SUPPRIMER"
Mais je dois être à côté de la plaque finalement. J'ai fait des recherches sur internet mais j'ai rien trouvé qui traite d'une possible action après avoir récupéré le chemin.
Une idée ?
Merci.
Tout d'abord merci à toi pour m'aider une fois de plus. Tu es toujours là pour filer un coup de pouce, c'est cool !
"Reg Query", c'est bien une partie de code qui me manquait.
J'ai fait : Reg query "HKEY_CLASSES_ROOT\TEST"
et il m'a bien trouvé : C:\Program Files (x86)\DOSSIER A SUPPRIMER
Je souhaite utiliser cette valeur, soit pour effacer un dossier (ici "DOSSIER A SUPPRIMER"), soit lancer un ".exe" qui aura été identifié de la même manière.
Je pensais que c'était simple, j'ai donc fait un code en bat comme ça :
Reg query "HKEY_CLASSES_ROOT\TEST"
rd /s /q "DOSSIER A SUPPRIMER"
Mais je dois être à côté de la plaque finalement. J'ai fait des recherches sur internet mais j'ai rien trouvé qui traite d'une possible action après avoir récupéré le chemin.
Une idée ?
Merci.
il faut extraire le nom de la chaine retournée par reg query essayer:
@echo off
for /F "tokens=3* delims=\" %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (
echo le chemin d'accès est %%a
set valeur=%%a
)
echo valeur=%valeur%
Bonjour,
Lorsque je lance, j'ai ce message :
Erreur : Erreur : le système n'a pas trouvé la clé ou la valeur de Registre spéc
ifiée.
valeur=
Appuyez sur une touche pour continuer...
j'ai essayé de bidouiller, mais rien de concluant...
:/
Lorsque je lance, j'ai ce message :
Erreur : Erreur : le système n'a pas trouvé la clé ou la valeur de Registre spéc
ifiée.
valeur=
Appuyez sur une touche pour continuer...
j'ai essayé de bidouiller, mais rien de concluant...
:/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut Dubcek,
En fait j'avais commis une erreur en recopiant le code.
Le résultat est plutôt positif, voici ce que j'obtiens :
le chemin d'accÞs est DOSSIER A SUPPRIMER
valeur=DOSSIER A SUPPRIMER
Appuyez sur une touche pour continuer...
Maintenant à quel endroit et comment puis-je insérer un :
rd /s /q (pour supprimer un dossier)
ou
call (pour lancer une application .exe contenu dans le dossier trouvé par la clef registre)
??
En fait j'avais commis une erreur en recopiant le code.
Le résultat est plutôt positif, voici ce que j'obtiens :
le chemin d'accÞs est DOSSIER A SUPPRIMER
valeur=DOSSIER A SUPPRIMER
Appuyez sur une touche pour continuer...
Maintenant à quel endroit et comment puis-je insérer un :
rd /s /q (pour supprimer un dossier)
ou
call (pour lancer une application .exe contenu dans le dossier trouvé par la clef registre)
??
C'est ici que j'avais essayé également d'incorporer le "RD" ou le "Call", mais je reçois comme message :
"Le fichier spécifié est introuvable" (et cette fois-ci j'ai pas fait d'erreur ;))
Si je fais à la place un :
echo valeur=%valeur%
il me dit :
le chemin d'acc?¿s est DOSSIER A SUPPRIMER
valeur=DOSSIER A SUPPRIMER
Si je fais seulement un :
Reg query "HKEY_CLASSES_ROOT\TEST"
J'obtiens : C:\Program Files (x86)\DOSSIER A SUPPRIMER
Voici le code que j'ai fait en suivant tes indications :
La valeur de "RD" tient compte de tout le chemin donné par "reg query"?
On est vraiment proche du but maintenant...
"Le fichier spécifié est introuvable" (et cette fois-ci j'ai pas fait d'erreur ;))
Si je fais à la place un :
echo valeur=%valeur%
il me dit :
le chemin d'acc?¿s est DOSSIER A SUPPRIMER
valeur=DOSSIER A SUPPRIMER
Si je fais seulement un :
Reg query "HKEY_CLASSES_ROOT\TEST"
J'obtiens : C:\Program Files (x86)\DOSSIER A SUPPRIMER
Voici le code que j'ai fait en suivant tes indications :
echo off
for /F "tokens=3* delims=\" %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (
echo le chemin d'accès est %%a
set valeur=%%a
)
rd /s /q "%valeur%"
pause
end
La valeur de "RD" tient compte de tout le chemin donné par "reg query"?
On est vraiment proche du but maintenant...
c'est clair qu'il faut le chemin complet, essayer
echo off
for /F %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (
echo le chemin d'accès est %%a
set valeur=%%a
)
echo rd /s /q "%valeur%"
pause
end
Essayé, j'obtiens :
Erreur : Erreur : le système n'a pas trouvé la clé ou la valeur de Registre spécifiée.
Nous vaincrons...
:/
Erreur : Erreur : le système n'a pas trouvé la clé ou la valeur de Registre spécifiée.
Nous vaincrons...
:/
Si je fais simplement :
('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_')
J'obtiens :
D:\Bureau>('reg query HKEY_CLASSES_ROOT\OKOK | findstr REG_' )
''reg' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_')
J'obtiens :
D:\Bureau>('reg query HKEY_CLASSES_ROOT\OKOK | findstr REG_' )
''reg' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
Bonjour,
J'ai fait :
For /F %a in ('reg query HKEY_CLASSES_ROOT\TEST | findstr REG_') do (e
cho le chemin d'accès est %a )
Et j'obtiens :
(echo le chemin d'accès est (par )
le chemin d'accès est (par
Il me trouve un chemin d'accès qui est "Par", ça correspond à quelque chose en .bat ?
En tout cas là il répond quelque chose, il n'y a pas d'erreur.
J'ai fait :
For /F %a in ('reg query HKEY_CLASSES_ROOT\TEST | findstr REG_') do (e
cho le chemin d'accès est %a )
Et j'obtiens :
(echo le chemin d'accès est (par )
le chemin d'accès est (par
Il me trouve un chemin d'accès qui est "Par", ça correspond à quelque chose en .bat ?
En tout cas là il répond quelque chose, il n'y a pas d'erreur.
Je travaille en ".bat" car je souhaiterais avoir le résultat en tant que fichier .bat.
Si j'exécute (en .bat) le dernier code que tu m'as transmis tout semble ok, il trouve bien le bon chemin à partir du registre :
le chemin d'accès est (par défaut) REG_SZ C:\Program Files (x86)\DOSSIER A SUPPRIMER
Appuyez sur une touche pour continuer...
J'ai rééssayé d'ajouter un RD /q /s à la suite sous divers tentatives, mais ça n'a pas fonctionné.
Ce qui est sûre c'est que l'on récupère le bon chemin à partir du registre.
Et ce qui bloque c'est de réutiliser ce chemin afin de supprimer le dossier...
Si j'exécute (en .bat) le dernier code que tu m'as transmis tout semble ok, il trouve bien le bon chemin à partir du registre :
le chemin d'accès est (par défaut) REG_SZ C:\Program Files (x86)\DOSSIER A SUPPRIMER
Appuyez sur une touche pour continuer...
J'ai rééssayé d'ajouter un RD /q /s à la suite sous divers tentatives, mais ça n'a pas fonctionné.
Ce qui est sûre c'est que l'on récupère le bon chemin à partir du registre.
Et ce qui bloque c'est de réutiliser ce chemin afin de supprimer le dossier...
Bonjour,
Je me permets de ré-ouvrir ce sujet, car après utilisation de cette commande en .bat qui marche parfaitement, je suis tombé sur un problème :
Si à partir d'une clef registre définie, je fais :
For /F "tokens=3,*" %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (echo rd /s /q "%%b")
Je vais obtenir par exemple :
C:\\Program Files (x86)\\DOSSIER 1\\DOSSIER2
La commande va me supprimer le "DOSSIER 2", mais je voudrais supprimer directement la racine, donc : DOSSIER1 (qui comprend DOSSIER 2 et le reste à l'intérieur)
Ma question est, comment avec cette commande avoir une rétro action ?
Merci de vos aides
Je me permets de ré-ouvrir ce sujet, car après utilisation de cette commande en .bat qui marche parfaitement, je suis tombé sur un problème :
Si à partir d'une clef registre définie, je fais :
For /F "tokens=3,*" %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (echo rd /s /q "%%b")
Je vais obtenir par exemple :
C:\\Program Files (x86)\\DOSSIER 1\\DOSSIER2
La commande va me supprimer le "DOSSIER 2", mais je voudrais supprimer directement la racine, donc : DOSSIER1 (qui comprend DOSSIER 2 et le reste à l'intérieur)
Ma question est, comment avec cette commande avoir une rétro action ?
Merci de vos aides
Encore une fois bonjour à toi Dubcek et merci.
J'ai fais :
For /F "tokens=3,*" %%a in ('reg query "HKEY_CLASSES_ROOT\TEST" ^| findstr REG_') do (rd /s /q "%%~pb")
Cela semble avoir fonctionné (je ne suis pas encore tout à fait sûr), mais j'aurais besoin de retourner encore une fois en arrière, que faut-il ajouter pour retourner en arrière?
Merci
J'ai fais :
For /F "tokens=3,*" %%a in ('reg query "HKEY_CLASSES_ROOT\TEST" ^| findstr REG_') do (rd /s /q "%%~pb")
Cela semble avoir fonctionné (je ne suis pas encore tout à fait sûr), mais j'aurais besoin de retourner encore une fois en arrière, que faut-il ajouter pour retourner en arrière?
Merci
Désolé, mais je n'ai pas bien compris... :s
Il n'y a pas moyen à partir de ça :
For /F "tokens=3,*" %%a in ('reg query "HKEY_CLASSES_ROOT\TEST" ^| findstr REG_') do (rd /s /q "%%~pb")
d'avoir quelque chose de plus simple pour désigner des dossiers précédents au dossier que désigne la clef registre?
Merci :)
Il n'y a pas moyen à partir de ça :
For /F "tokens=3,*" %%a in ('reg query "HKEY_CLASSES_ROOT\TEST" ^| findstr REG_') do (rd /s /q "%%~pb")
d'avoir quelque chose de plus simple pour désigner des dossiers précédents au dossier que désigne la clef registre?
Merci :)
Bonjour Dubcek,
Juste une dernière question à propos du code.
J'utilise donc ce code là qui fonctionne très bien :
@Echo off
setlocal enableDelayedExpansion
For /F "tokens=3,*" %%a in ('reg query "CLEF REGISTRE" ^| 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 je veux aller en avant du chemin que me donne le registre je fais :
"!L!%%~pd\DOSSIER 3\DOSSIER 4" ça fontionne très bien et il n'y a pas de souci.
Mais comment je peux faire pour désigner un dossier qui se trouve en arrière ?
Par exemple si le chemin que me donne le registre est :
c:\TEST\DOSSIER 1\DOSSIER 2
Comment faire pour désigner "DOSSIER 1" ou "TEST" ?
Merci
Juste une dernière question à propos du code.
J'utilise donc ce code là qui fonctionne très bien :
@Echo off
setlocal enableDelayedExpansion
For /F "tokens=3,*" %%a in ('reg query "CLEF REGISTRE" ^| 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 je veux aller en avant du chemin que me donne le registre je fais :
"!L!%%~pd\DOSSIER 3\DOSSIER 4" ça fontionne très bien et il n'y a pas de souci.
Mais comment je peux faire pour désigner un dossier qui se trouve en arrière ?
Par exemple si le chemin que me donne le registre est :
c:\TEST\DOSSIER 1\DOSSIER 2
Comment faire pour désigner "DOSSIER 1" ou "TEST" ?
Merci
Comme ça ? :
@Echo off
setlocal enableDelayedExpansion
For /F "tokens=3,*" %%a in ('reg query "CLEF REGISTRE" ^| 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
)
)
)
@Echo off
setlocal enableDelayedExpansion
For /F "tokens=3,*" %%a in ('reg query "CLEF REGISTRE" ^| 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
)
)
)
Bonjour Dubcek,
Je comprends bien la méthode, mais je bloque toujours sur la syntaxe.
J'ai fait :
@Echo off
setlocal enableDelayedExpansion
For /F "tokens=3,*" %%a in ('reg query "CLEF REGISTRE" ^| findstr REG_') do (
for /F "tokens=1-16 delims=:\" %%q in ("%%b") do (
echo rd /s/q "%%q"
)
)
)
pause
J'obtiens en réponse : rd /s/q "C"
C'est normal ou je me suis encore trompé dans la syntaxe du code ?
merci.
Je comprends bien la méthode, mais je bloque toujours sur la syntaxe.
J'ai fait :
@Echo off
setlocal enableDelayedExpansion
For /F "tokens=3,*" %%a in ('reg query "CLEF REGISTRE" ^| findstr REG_') do (
for /F "tokens=1-16 delims=:\" %%q in ("%%b") do (
echo rd /s/q "%%q"
)
)
)
pause
J'obtiens en réponse : rd /s/q "C"
C'est normal ou je me suis encore trompé dans la syntaxe du code ?
merci.