Recherche dossier en Bat (Manque connaissance)

Résolu
micromega Messages postés 141 Statut Membre -  
 Albert49 -
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

Résumé de la discussion

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.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    del supprime un fichier, pour supprimer un répertoire et tout ce qu'il contient (danger !!!) utiliser rd /s/q
    0
  2. micromega Messages postés 141 Statut Membre 1
     
    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
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    le nom contient des espaces ? mettre des "
    FOR /F "delims=" %%f in ('dir /B /S "%%d:\%FILENAME%"') do ( 
    0
  4. micromega Messages postés 141 Statut Membre 1
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
  7. micromega Messages postés 141 Statut Membre 1
     
    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
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    le nom contient des accents ?
    0
  9. micromega Messages postés 141 Statut Membre 1
     
    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
  10. micromega Messages postés 141 Statut Membre 1
     
    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
  11. micromega Messages postés 141 Statut Membre 1
     
    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
  12. Albert49
     
    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
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      qu'entends-tu par rien à supprimer ? que les dossiers IMAGES n'existent pas ou qu'ils soient vides ?
      0
    2. Albert49
       
      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
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      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
    4. Albert49
       
      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
    5. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      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
  13. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
    1. Albert49
       
      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
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      corriger cette ligne, il manque les %
      if %cherche% EQU 1 ( 
      0
    3. Albert49
       
      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
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      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
    5. Albert49
       
      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
  14. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      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
    2. Albert49
       
      Bonjour...

      La recherche ne fonctionne toujours pas avec ce code là.
      Rien ne se passe lorsque je l'éxécute.
      0
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      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
    4. Albert49
       
      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
    5. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      c'est un gros disque ? il faut lui laisser le temps
      et avec juste:
      dir /a:d /b/s D:\dossier
      0