IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows XP Discussion :

Dos Suppression dossier niveau inférieur


Sujet :

Windows XP

  1. #1
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 233
    Points : 82
    Points
    82
    Par défaut Dos Suppression dossier niveau inférieur
    Bonjour.
    Je me place dans mon arbo et j'aimerai supprimé tous dossiers du niveau inférieur.
    Exemple je suis dans mon dossier "Test" qui contient les dossiers "Test1" et "Test2" qui eux mêmes contiennent "test11" et "test22".
    et je souhaiterai supprimer "test11" et "test22" sans devoir rentrer dans les dossiers "Test1" et "Test2"...
    Est-ce possible??
    Merci d'avance pour votre aide

  2. #2
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Points : 2 778
    Points
    2 778
    Billets dans le blog
    2
    Par défaut
    oui,

    normalement tu peux supprimer tes répertoires en donnant le chemin absolue de chacun d'eux sans que lors de l'exécution de ton script tu sois dans le répertoire plus haut...

    pour plus d'info, dans une commande dos tu fais del /?
    Bien reçu, tous les messages. Ils disent qu’ils ont compris, qu’il n’y a plus le choix. Que l’esprit qui souffle, guidera leurs pas. Qu’arrivent les derniers temps où nous pourrons parler. Alors soyons désinvoltes, n’ayons l’air de rien

  3. #3
    Expert éminent sénior

    Avatar de Djug
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    2 980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 980
    Points : 17 970
    Points
    17 970
    Par défaut
    essayes cette commande:


  4. #4
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 233
    Points : 82
    Points
    82
    Par défaut
    D'accord. Mais en fait justement, je voulais éviter de rentrer chaque chemin absolu... Justement pour balayer tous le contenu de tous les sous dossier d'un dosser en une seule commande... C'est possible?
    Pour la commande rd elle ne devrait pas marché car les dossiers ne sont pas vide, il faudrait alors que je les vide au préalable...
    J'espère qu'il y a une petite astuce...
    Merci pour votre aide

  5. #5
    Invité
    Invité(e)
    Par défaut
    On appelle cela la suppression récursive

    La commande deltree aurait fait l'affaire sous Windows 2000 et inférieurs :
    Code Commande MS-DOS : Sélectionner tout - Visualiser dans une fenêtre à part
    deltree[/Y] [lecteur:]chemin [[lecteur:]chemin[...]]
    exemple :
    Code Commande MS-DOS : Sélectionner tout - Visualiser dans une fenêtre à part
    deltree /Y test1
    Aurait supprimé tout le dontenu de
    le switch /Y servant à passer outre la demande de confirmation de suppression (attention ).


    Désormais il y a la commande rd ou rmdir comme l'a suggéré Djug.

    Pour un effacement récursif il faut ajouter le switch /S :
    Code Commande MS-DOS : Sélectionner tout - Visualiser dans une fenêtre à part
    rd /S /Q test1
    Supprimera test1 et tout son contenu
    Le switch /Q permet de passer outre la demande de confirmation (là aussi, attention hein )

    Citation Envoyé par Angeldu74 Voir le message
    je voulais éviter de rentrer chaque chemin absolu... Justement pour balayer tous le contenu de tous les sous dossier d'un dosser en une seule commande
    Attention ma commande supprime TOUT le contenu de test1, les dossiers test11 et test22 seront supprimés aussi

    Pour ne supprimer que le contenu des dossiers, mais pas les dossier, il faudra faire un petit script, en batch par exemple
    Dernière modification par Invité ; 17/08/2009 à 12h15.

  6. #6
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 233
    Points : 82
    Points
    82
    Par défaut
    Merci, mais il y a juste un petit détail. Je souhaiterai supprimer tout le contenu d'un dossier mais pas le dossier lui-même (contenant).
    Comment faire??

  7. #7
    Invité
    Invité(e)
    Par défaut
    J'ai essayé plusieurs choses mais je n'ai pas réussi

    En supposant l'arborescence suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    C:\dossier_contenant\
    ├───dossier_a\
    │   ├─── fichier_1
    │   ├─── fichier_2
    │   └─── fichier_3
    │
    ├───dossier_b
    │   ├───dossier_b1\
    │   └───dossier_b2\
    │
    ├───dossier_c\
    │
    └───fichier
    en supposant que le chemin de dossier_contenant soit : C:\dossier_contenant\

    J'ai essayé en créant un "répertoire poubelle" temporaire
    Déplacer tout le contenu de dossier_contenant dans le répertoire temporaire, puis d'exécuter la commande rd :
    Code Commande MS-DOS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    md C:\trash_temp
    move C:\dossier_contenant\*.* C:\trash_temp
    rd /Q /S C:\trash_temp
    Mais ça ne marche pas, le problème c'est que la commande move ne prend pas *.* à la fin
    Code Commande MS-DOS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C:\dossier_contenant>move C:\dossier_contenant\*.* C:\trash_temp
    Syntaxe du nom de fichier, de répertoire ou de volume incorrecte.

    Je ne sais pas si ça te convient, mais tu peux toujours faire :

    Code Commande MS-DOS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rd /Q /S C:\dossier_contenant
    md C:\dossier_contenant

    C'est quand même aberrant de pas pouvoir faire ça simplement
    Dernière modification par Invité ; 17/08/2009 à 16h25.

  8. #8
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 233
    Points : 82
    Points
    82
    Par défaut
    C'est une bonne idée je n'y avais pas pensé.
    Mais le problème c'est qu'il y a des droits sur ces dossiers et ça m'embêterai de devoir les remettre à chaque fois...
    C'est fou qu'il n'y est pas d'option...
    La meilleur méthode serait de se placer dans chaque dossier et supprimer les sous dossiers un à un... mais c'est pas terrible si on ne connait pas les noms par exemple...
    Help...

  9. #9
    Invité
    Invité(e)
    Par défaut
    je suis en train de me replonger dans la doc BATCH, finalement c'est assez complet. C'est moins puissant que le bash sous UNIX ou GNU\Linux et c'est plus compliqué

    Rien que
    c'est déroutant qu'il existe tant de possibilités, je suis vraiment étonné

    Je pense que l'on peut réussir à faire quelque chose avec un
    Code BATCH : Sélectionner tout - Visualiser dans une fenêtre à part
    FOR [conditions] IN ["balayage" des dossier] DO[suppression des éléments à supprimer

    edit :

    Il faut :
    • Créer une variable %%dossier qui prendra les différentes valeurs
    • On changera ces valeurs avec for (ne pas confondre avec les boucles FOR)
    • On supprimera les dossiers %%dossier avec rd
    • On obtiendra la liste des dossiers avec dir /AD

    Si quelqu'un a trouvé comment faire je suis intéressé.

    C'est peut-être possible finalement !!
    Dernière modification par Invité ; 17/08/2009 à 18h52.

  10. #10
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    ====
    avant
    =====
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    C:\test
    +---test1
    ¦   +--- test11 (contient des fichiers/dossiers)
    ¦   +--- test12 (contient des fichiers/dossiers)
    ¦   +--- test13 (contient des fichiers/dossiers)
    ¦
    +---test2
    ¦   +--- test11 (contient des fichiers/dossiers)
    ¦   +--- test12 (contient des fichiers/dossiers)
    ¦
    +---test4
    ¦
    +---test5
    ====
    après
    ====
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    C:\test
    +---test1     
    ¦
    +---test2
    ¦   
    +---test4
    ¦
    +---test5
    ========
    script bat
    ========

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /r "C:\test" /d %%x in ("test1\*","test2\*") do (echo rd /s/q "%%x")
    enlève le ECHO avant la commande RD c'est pour vérifier le resultat c'est tout

  11. #11
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 233
    Points : 82
    Points
    82
    Par défaut
    Arf... J'ai essayé mais ça m'a mis "%%x était inattendu...
    Pourtant j'ai repris le même arbo en partant de "C:\test".
    Est-ce que la variable est mal déclaré?

  12. #12
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Citation Envoyé par Angeldu74 Voir le message
    Arf... J'ai essayé mais ça m'a mis "%%x était inattendu...
    Pourtant j'ai repris le même arbo en partant de "C:\test".
    Est-ce que la variable est mal déclaré?
    re,

    le code est censé être mis dans un fichier bat "d'extension .bat"

    ou bien si tu utilises l'invite de commandes directement tu doit mettre %x au lieu de %%x:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /r "C:\test" /d %x in ("test1\*","test2\*") do (echo rd /s/q "%x")

  13. #13
    Invité
    Invité(e)
    Par défaut
    En supposant l'arborescence de départ suivante :
    Code - Arboresence : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    C:\dossier_contenant\
    ├───dossier_a\
    │   ├─── fichier_1
    │   ├─── fichier_2
    │   └─── fichier_3
    │
    ├───dossier_b
    │   ├───dossier_b1\
    │   └───dossier_b2\
    │
    ├───dossier_c\
    │
    └───fichier

    Code BATCH : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=*" %%i in ('dir C:\dossier_contenant\*.* /AD /B') do (RD "C:\dossier_contenant\%%i" /S /Q)

    Ça fonctionne chez moi !

    edit :

    Le code final :
    Code SUPPRESSION.BAT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    @echo off
    ::
    :: Suppression des fichiers situés dans C:\dossier_contenant\ (sans confirmation)
    ::
    echo Suppression des fichiers...
    del C:\dossier_contenant\*.* /Q
    
    ::
    :: Suppression des dossiers situés dans C:\dossier_contenant\
    ::
    echo Suppression des dossiers...
    for /f "tokens=*" %%i in ('dir C:\dossier_contenant\*.* /AD /B') do (RD "C:\dossier_contenant\%%i" /S /Q)
    
    echo.
    echo Termine
    Dernière modification par Invité ; 18/08/2009 à 09h39.

  14. #14
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 233
    Points : 82
    Points
    82
    Par défaut
    chapeau bas!
    Je ne savais pas qu'en ligne de commande direct il fallait mettre un seul '%' et en fichier batch il faut en mettre 2.
    Merci pour tout c'est top du top!

  15. #15
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    sans oublié le mérite de "Karzoff" qui a fait des efforts pour t'aider.

  16. #16
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 233
    Points : 82
    Points
    82
    Par défaut
    C'est vrai! Merci beaucoup!

  17. #17
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    voici un code plus simple si vous utiliser l'invite de commandes:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /d %a in (c:\test\test1\* c:\test\test2\*) do echo rd /s/q "%a"

  18. #18
    Invité
    Invité(e)
    Par défaut
    Ah oui effectivement ! C'est plus simple

    Nice Job

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XPATH] obtenir nom attribut d un niveau inférieur
    Par skyangel dans le forum Format d'échange (XML, JSON...)
    Réponses: 14
    Dernier message: 01/03/2008, 16h06
  2. Suppression Dossier Javascript
    Par mulot49 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/06/2007, 11h47
  3. [C#][MDI] Désactiver la fonctionnalité "niveau inférieur"
    Par nicolas.pied dans le forum Windows Forms
    Réponses: 3
    Dernier message: 13/04/2007, 16h39
  4. Dossier niveau supérieur
    Par Vodkha dans le forum Langage
    Réponses: 3
    Dernier message: 05/12/2005, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo