.BAT - Récupérer "Données" du Registre WINDOWS

Résolu/Fermé
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 - 21 oct. 2013 à 19:57
 Micromega - 25 févr. 2014 à 17:57
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.
A voir également:

14 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
22 oct. 2013 à 09:17
hello
avec la commande reg, voir :
reg query /?
0
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 1
22 oct. 2013 à 21:51
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.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
23 oct. 2013 à 09:46
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%
0
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...

:/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
23 oct. 2013 à 15:47
en interactif, que retourne la commande
Reg query "HKEY_CLASSES_ROOT\TEST" 
0
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)
??
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
24 oct. 2013 à 08:06
remplacer
 echo valeur=%valeur%
par
 rd /s/q "%valeur%"
0
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 :

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...
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
24 oct. 2013 à 14:37
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
0
Essayé, j'obtiens :

Erreur : Erreur : le système n'a pas trouvé la clé ou la valeur de Registre spécifiée.


Nous vaincrons...

:/
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
24 oct. 2013 à 14:54
avec cette commande ?
('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_')
0
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.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
25 oct. 2013 à 08:06
cette commande ne fonctionne que avec FOR (avec les ('
cete commande retourne une erreur ?
for /F  %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (
echo le chemin d'accès est %%a
)
0
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.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
25 oct. 2013 à 12:16
dans un .bat ou interactivement ?
et ca dans un bat
@echo off
For /F "delims=" %%a in ('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_') do (echo le chemin d'accès est %%a )

    
0
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...
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
25 oct. 2013 à 13:55
au post #8, tu écris
J'obtiens : C:\Program Files (x86)\DOSSIER A SUPPRIMER
pas de REG...
quel est la ligne exacte
0
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 1
31 janv. 2014 à 23:31
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
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
1 févr. 2014 à 11:34
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
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 1
1 févr. 2014 à 23:16
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
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
3 févr. 2014 à 09:27
une méthode, on enlève le \ de fin et on repasse dans une boucle 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
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 :)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
4 févr. 2014 à 09:40
donc avec C:\\Program Files (x86)\\DOSSIER 1\\DOSSIER2 tu veux récupérer C:\\Program Files (x86) ?
0
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 1
19 févr. 2014 à 13:29
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
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 20/02/2014 à 08:28
mettre dans une variable :\TEST ou \DOSSIER 1 ou aller dedans ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
20 févr. 2014 à 08:34
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
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 1
21 févr. 2014 à 13:52
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

)
)
)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
22 févr. 2014 à 08:22
je montrais un exemple en interactif sur mon disque C:
si reg query retourne C:\TEST\DOSSIER 1\DOSSIER 2
alors
For /F "tokens=3,*" %%a in ('reg query "CLEF REGISTRE" ^| findstr REG_') do (
for /F "tokens=1-16 delims=:\" %%p in ("%%b") do (

%%p contient C, %%q TEST, %%r DOSSIER 1, %%s DOSSIER 2
0
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.
0