.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
Micromega - 25 févr. 2014 à 17:57
A voir également:
- Récupérer clé de registre cmd
- Clé de registre - Guide
- Cmd - Guide
- Clé windows 10 gratuit - Guide
- Cle usb non reconnu - Guide
- Récupérer clé windows cmd - Guide
14 réponses
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
22 oct. 2013 à 09:17
22 oct. 2013 à 09:17
hello
avec la commande reg, voir :
avec la commande reg, voir :
reg query /?
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
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.
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.
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
23 oct. 2013 à 09:46
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%
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
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
23 oct. 2013 à 15:47
23 oct. 2013 à 15:47
en interactif, que retourne la commande
Reg query "HKEY_CLASSES_ROOT\TEST"
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)
??
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
24 oct. 2013 à 08:06
24 oct. 2013 à 08:06
remplacer
echo valeur=%valeur%par
rd /s/q "%valeur%"
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...
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
24 oct. 2013 à 14:37
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
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...
:/
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
24 oct. 2013 à 14:54
24 oct. 2013 à 14:54
avec cette commande ?
('reg query HKEY_CLASSES_ROOT\TEST ^| findstr REG_')
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.
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
25 oct. 2013 à 08:06
25 oct. 2013 à 08:06
cette commande ne fonctionne que avec FOR (avec les ('
cete commande retourne une erreur ?
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
)
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.
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
25 oct. 2013 à 12:16
25 oct. 2013 à 12:16
dans un .bat ou interactivement ?
et ca dans un bat
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 )
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...
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
25 oct. 2013 à 13:55
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
J'obtiens : C:\Program Files (x86)\DOSSIER A SUPPRIMER
pas de REG...
quel est la ligne exacte
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
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
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
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
1 févr. 2014 à 11:34
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:>
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
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
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
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
3 févr. 2014 à 09:27
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
)
)
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 :)
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
4 févr. 2014 à 09:40
4 févr. 2014 à 09:40
donc avec C:\\Program Files (x86)\\DOSSIER 1\\DOSSIER2 tu veux récupérer C:\\Program Files (x86) ?
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
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
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
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
Modifié par dubcek le 20/02/2014 à 08:28
Modifié par dubcek le 20/02/2014 à 08:28
mettre dans une variable :\TEST ou \DOSSIER 1 ou aller dedans ?
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
20 févr. 2014 à 08:34
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
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
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
)
)
)
@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
)
)
)
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 620
22 févr. 2014 à 08:22
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
%%p contient C, %%q TEST, %%r DOSSIER 1, %%s DOSSIER 2
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
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.