Recherche dossier en Bat (Manque connaissance)

Résolu/Fermé
micromega
Messages postés
131
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 avril 2020
- 26 févr. 2013 à 19:48
 Albert49 - 5 avril 2013 à 17:49
Bonjour,


J'ai construit ce bat en glanant des informations sur le net :


@echo off
set FILENAME="Nom du fichier.txt"
set LOOKPATH=%LOOKIN%%FILENAME%
set DRIVERLIST= A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
set FILEPATH = ''

FOR %%d in (%DRIVERLIST%) do (

Echo Recherche en cours... %%d:\%FILENAME%

FOR /F "delims=" %%f in ('dir /B /S %%d:\%FILENAME%') do (
set FILEPATH=%%f
)
)
del %FILEPATH%
echo.
echo. ! SUPPRIME !
echo.
TIMEOUT 10




Il y a juste un endroit où je sèche, c'est que cette commande ne fonctionne qu'avec des fichiers, j'aimerais qu'elle puisse fonctionner avec des dossier (supprimer le dossier trouvé).
Je pense qu'il faut agir sur le "Set FILENAME", mais je n'ai pas les connaissances suffisantes.

Merci de m'aider à terminer la construction de ce bat.

13 réponses

dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
27 févr. 2013 à 08:22
hello
del supprime un fichier, pour supprimer un répertoire et tout ce qu'il contient (danger !!!) utiliser rd /s/q
0
micromega
Messages postés
131
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 avril 2020
1
27 févr. 2013 à 12:32
Bonjour Dubcek,

Merci de ta réponse.
J'avais déjà essayé cela (et d'autres manières également), mais cela ne fonctionne pas. Il ne me trouve pas le dossier. Avec un fichier et "DEL" cela fonctionne parfaitement, mais peut-être cela est dû à la ligne "set FILENAME=".

Voici le code que j'ai essayé avec tes indications (DOSSIER A SUPPR = nom du dossier à supprimer et tous ce qu'il contient > J'aime le Danger !!!) :




@echo off
set FILENAME="DOSSIER A SUPPR"
set LOOKPATH=%LOOKIN%%FILENAME%
set DRIVERLIST= A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
set FILEPATH = ''

FOR %%d in (%DRIVERLIST%) do (

Echo Recherche en cours... %%d:\%FILENAME%

FOR /F "delims=" %%f in ('dir /B /S %%d:\%FILENAME%') do (
set FILEPATH=%%f
)
)
rd /s/q %FILEPATH%
echo.
echo. ! SUPPRIME !
echo.
TIMEOUT 10




Merci encore
0
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
27 févr. 2013 à 12:50
le nom contient des espaces ? mettre des "
FOR /F "delims=" %%f in ('dir /B /S "%%d:\%FILENAME%"') do ( 
0
micromega
Messages postés
131
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 avril 2020
1
27 févr. 2013 à 14:33
J'ai mis "DOSSIER A SUPPR" pour exemple, j'avais également essayé avec "test", mais dans tous les cas même si je met les " cela ne change rien.

Il y a un vrai problème de détection du dossier, alors qu'avec des fichiers (.exe, .txt, .dll ,...), le bat fonctionne très bien.

FILENAME > ce n'est pas uniquement pour des fichiers ?

Merci
0

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

Posez votre question
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
Modifié par dubcek le 27/02/2013 à 14:40
non, ça doit fonctionner
et manuellement, ca marche ?
dir /b/s \nom-du-dossier

par contre si il en a plusieurs, il ne prend que le dernier
0
micromega
Messages postés
131
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 avril 2020
1
27 févr. 2013 à 17:26
Si je fais seulement un bat :

@echo off
rd /s /q "TEST"

cela fonctionne.

Dans l'autre fichier bat, avec recherche cela ne fonctionne pas.

Je suis sous Win 7 64bit
0
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
28 févr. 2013 à 10:21
le nom contient des accents ?
0
micromega
Messages postés
131
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 avril 2020
1
28 févr. 2013 à 16:53
Bonjour Dubcek,

Non il n'y a pas d'accent. Pour voir si cela fonctionne j'utilise dans un premier temps un nom de dossier appelé "Test", il n'y a donc pas d'accent ni d'espace qui pourrait poser problème.

La commande fonctionne chez toi ?
0
micromega
Messages postés
131
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 avril 2020
1
28 févr. 2013 à 18:06
Bon je tourne en rond...

Je réfléchis à un nouveau code différent:

Est-ce que tu sais comment créer un nouveau bat qui permet de supprimer le dossier dans lequel est le bat exécuter :

Dossier > test.Bat

J'ai essayé :

rd /s /q "dossier"

Mais il n'efface pas le dossier. Le bat est bien dans le dossier qu'il faut supprimer donc il faut faire une rétro-action... je colle là dessus aussi.

Merci
0
micromega
Messages postés
131
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 avril 2020
1
28 févr. 2013 à 23:33
Bon j'ai trouvé une solution différente de l'origine mais qui agit de la même sorte et même mieux.


@echo off
for %%i in (C,D) do (
if exist "%%i:\" set VrLetter=%%i& call :search %%i
)
goto FinBoucle
:search
for /r "%VrLetter%:\" %%j in (NOM DOSSIER) do (
if exist "%%j" RMDIR %%j /S /Q
)
goto :eof
:FinBoucle


Merci à toi Dubcek de m'avoir aidé.
Par contre j'ai de nouveau un problème (suppression d'un dossier où le bat est exécuté), j'ai créé un nouveau sujet pour cela. Si tu as le coeur à creuser voici le lien :

https://forums.commentcamarche.net/forum/affich-27253575-bat-supprimer-dossier-dans-lequel-le-bat-est-execute

Merci encore !
0
Bonjour,

Je suis interessé pour utiliser le code donné au-dessus, mais je souhaiterais que le fichier commence par effacer ces fichiers :

rd /s /q "%ALLUSERSPROFILE%\Menu D'marrer\Programmes\IMAGES"
rd /s /q "%ALLUSERSPROFILE%\Start Menu\Programs\IMAGES"

Et que si il n'a rien de supprimer, alors il entreprend la recherche comme indiqué plus haut (si les dossiers ont été effacés alors le bat se termine après cela).

Comment puis-je insérer ceci dans le code précédent?

Merci
0
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
16 mars 2013 à 08:51
qu'entends-tu par rien à supprimer ? que les dossiers IMAGES n'existent pas ou qu'ils soient vides ?
0
Rien à supprimer = Le dossier IMAGES n'existe pas.
Donc si le dossier IMAGES n'existe pas et qu'aucunes opérations à été faites alors le bat continu en faisant une recherche dans tous les lecteurs (comme dans dernier message de Micromega).
Merci
0
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
17 mars 2013 à 09:47
set R1=%ALLUSERSPROFILE%\Menu D'marrer\Programmes\IMAGES
set R2=%ALLUSERSPROFILE%\Start Menu\Programs\IMAGES
if exist "%R1%" (
        rd /s /q "%R1%"
) else (
        ici lancer la recherche)

if exist "%R2%" (
        rd /s /q "%R2%"
) else (
        ici lancer la recherche)
0
C'est bien comme ça qu'il fallait écrire le code ? :

set R1="D:\IMAGES"
set R2="C:\Program Files (x86)\IMAGES"

if exist "%R1%" (
rd /s /q "%R1%"
) else (
for %%i in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
if exist "%%i:\" set VrLetter=%%i& call :search %%i
)
goto FinBoucle
:search
for /r "%VrLetter%:\" %%j in (IMAGES) do (
if exist "%%j" RMDIR %%j /S /Q
)
goto :eof
:FinBoucle



if exist "%R2%" (
rd /s /q "%R2%"
) else (
for %%i in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
if exist "%%i:\" set VrLetter=%%i& call :search %%i
)
goto FinBoucle
:search
for /r "%VrLetter%:\" %%j in (IMAGES) do (
if exist "%%j" RMDIR %%j /S /Q
)
goto :eof
:FinBoucle


rd /s /q "%ALLUSERSPROFILE%\Menu D'marrer\Programmes\IMAGES" >NUL 2>&1
rd /s /q "%ALLUSERSPROFILE%\Start Menu\Programs\IMAGES" >NUL 2>&1


ça ne fonctionne pas chez moi.
J'ai changé le style d'éxécution, finalement il doit supprimer R1 ou R2 (s'il ne les supprimes pas alors il les cherches sur tous les lecteurs) et il doit supprimer les raccourcies du menu démarrer dans tous les cas.
0
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
Modifié par dubcek le 18/03/2013 à 09:49
il me semble qu'il y a trop de " là, mettre
set R1="D:\IMAGES"  
set R2="C:\Program Files (x86)\IMAGES"  
if exist %R1% (  
rd /s /q %R1% 
ou
set R1=D:\IMAGES  
set R2=C:\Program Files (x86)\IMAGES  
if exist "%R1%" (  
rd /s /q "%R1%" 
vérifier le reste du script
0
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
23 mars 2013 à 14:38
j'ai simplifié le code pour éviter les doublons, essayer
set R1=D:\IMAGES
set R2=C:\Program Files (x86)\IMAGES 
set cherche=0

if exist "%R1%" ( 
               rd /s /q "%R1%"
) else ( 
	set cherche=1
)

if exist "%R2%" ( 
               rd /s /q "%R2%"
) else ( 
	set cherche=1
)
if cherche EQU 1 ( 
	for %%i in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
		if exist "%%i:\" (
			set VrLetter=%%i
        		for /r "%VrLetter%:\" %%j in (IMAGES) do (
				if exist "%%j" RMDIR "%%j" /S /Q
			)
			goto :eof
		)
	)
)

rd /s /q "%ALLUSERSPROFILE%\Menu D'marrer\Programmes\IMAGES" >NUL 2>&1 
rd /s /q "%ALLUSERSPROFILE%\Start Menu\Programs\IMAGES" >NUL 2>&1
0
Bonjour,

Le bat à fait un pas en avant. Il me supprime bien les dossiers s'il les trouvent dans les adresses indiquées. Par contre si le dossier n'existe pas, la recherche ne fonctionne pas (il n'y a aucune recherche effectué...)

J'ai essayé avec un nom de dossier différent et toujours pas de recherche.

Merci
0
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
24 mars 2013 à 08:27
corriger cette ligne, il manque les %
if %cherche% EQU 1 ( 
0
J'ai corriger cela, voilà la commande :



set R1=D:\TEST
set R2=C:\Program Files (x86)\TEST
set cherche=0

if exist "%R1%" ( 
               rd /s /q "%R1%"
) else ( 
	set cherche=1
)

if exist "%R2%" ( 
               rd /s /q "%R2%"
) else ( 
	set cherche=1
)
if %cherche% EQU 1 ( 
	for %%i in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
		if exist "%%i:\" (
			set VrLetter=%%i
        		for /r "%VrLetter%:\" %%j in (TEST) do (
				if exist "%%j" RMDIR "%%j" /S /Q
			)
			goto :eof
		)
	)
)

rd /s /q "%ALLUSERSPROFILE%\Menu D'marrer\Programmes\IMAGES" >NUL 2>&1 
rd /s /q "%ALLUSERSPROFILE%\Start Menu\Programs\IMAGES" >NUL 2>&1


pause
end




Mais la recherche ne fonctionne toujours pas. La fenêtre s'ouvre et se referme automatiquement après...




Petite question, lorsque le bat fonctionnera je pourrai répéter une troisième fois l'opération en ajoutant un R3 ?

set R3=C:\Program Files (x86)\Photos


if exist "%R3%" (
rd /s /q "%R3%"
) else (
set cherche=1
)
0
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
25 mars 2013 à 15:29
c'est dangereux de tester avec des rmdir. que doit faire cette recherche ?'supprimer tout les dossiers IMAGES de tout les disques ?
pour R3, oui
0
Je n'ai qu'un seul dossier "Test" pour essayer voir si cela fonctionne, donc pas de risque particulier.

La recherche doit supprimer le dossier et tout se qu'il contient dans disques dans lequel il est présent.

J'ai essayer d'autre alternative de recherche, mais cela ne fonctionne pas non plus... étrange... de mes yeux (non experts) la commande semble correct, mais il doit certainement manquer quelque chose.
0
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
26 mars 2013 à 10:08
ce bat recherche le dossier images sur tout les disques et affiche son nom :
@echo off
set DIR=IMAGES
for %%a in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
	if exist "%%a:\" (
		for /f "delims=" %%b in ('dir /a:d /b/s \%DIR%') do echo ++ %%b
	)
)
0
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
26 mars 2013 à 12:20
correction
@echo off
set DIR=IMAGES
for %%a in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
	if exist "%%a:\" (
		for /f "delims=" %%b in ('dir /a:d /b/s %%a:\%DIR%') do echo ++ %%b
	)
)
0
Bonjour...

La recherche ne fonctionne toujours pas avec ce code là.
Rien ne se passe lorsque je l'éxécute.
0
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
27 mars 2013 à 14:36
tu as remplacé IMAGES par un dossier qui existe ?
exécuter ce code dans une fenêtre DOS, pas en double-clique
mettre des traces:
@echo off
set DIR=IMAGES
for %%a in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
       echo teste de %%a:\
	if exist "%%a:\" (
                echo recherche dans %%a:\
		for /f "delims=" %%b in ('dir /a:d /b/s %%a:\%DIR%') do echo ++ %%b
	)
)
0
Oui j'ai remplacé IMAGES par un nom de dossier bidon créé dans le disque D.
Lorsque je lance il m'indique bien la recherche dans le lecteur C, puis fichier introuvable (normal car il n'y est pas), puis passe à la recherche des autres lecteurs notamment le lecteur D, mais là il se fixe et ne continu pas.

Voilà ce que me dis la fenêtre DOS dans laquelle je l'ai exécuter :

teste de C:\
recherche dans C:\
Fichier introuvable
teste de D:\
recherche dans D:\

C:\Users\Acer>

Pour voir si cela fonctionne, j'ai limité la recherche au disque C et D dans un premier temps.
0
dubcek
Messages postés
18525
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
8 août 2022
5 553
28 mars 2013 à 09:34
c'est un gros disque ? il faut lui laisser le temps
et avec juste:
dir /a:d /b/s D:\dossier
0