Recherche dossier en Bat (Manque connaissance)
RésoluAlbert49 -
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
Des échanges décrivent un script batch qui cherche un fichier sur toutes les lettres de lecteur et qui supprime le chemin trouvé, mais le script ne gère pas encore les dossiers. Les solutions les plus pertinentes évoquent d'étendre la détection aux répertoires en testant l'existence des lecteurs et des dossiers via if exist, puis d'employer rd /s /q pour supprimer. D'autres échanges proposent d'ajuster le script sur la variable FILENAME et d'utiliser une boucle for pour parcourir les chemins ciblés, avec des options dir /a:d pour limiter au dossier. En cas d'erreur potentielle, certains rappellent l'importance de tester sur des répertoires non critiques et soulignent des détails de syntaxe comme l'usage des guillemets et de l'échappement des espaces.
-
hello
del supprime un fichier, pour supprimer un répertoire et tout ce qu'il contient (danger !!!) utiliser rd /s/q -
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 -
le nom contient des espaces ? mettre des "
FOR /F "delims=" %%f in ('dir /B /S "%%d:\%FILENAME%"') do ( -
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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 -
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 -
le nom contient des accents ?
-
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 ? -
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 -
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 ! -
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-
-
-
-
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. -
-
-
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-
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 -
-
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
) -
-
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.
-
-
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 ) )-
-
-
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 ) ) -
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. -
-