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

Scripts/Batch Discussion :

Vérification répertoire vide [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 39
    Par défaut Vérification répertoire vide
    Bonjour à tous,

    Avant toute chose je tiens à préciser que j'ai déjà cherché pendant des heures sur ce forum et sur Google sans trouver étonnamment de réponse à ce problème qui me semblait pourtant trivial.

    Mon objectif est de supprimer dans un dossier tous les répertoires et sous répertoires vides. Mes recherches m'ont amenées à écrire ce bout de script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    rem désactive l'affichage des commandes
    @echo off
    rem ràz de l'affichage
    cls
    
    for /f "delims=" %%i In ('dir /ad/b/s "D:\Test script"') DO (	
    	if not exist "%%i\*" echo Le repertoire %%i\ est vide 
    )
    La condition n'est jamais vérifiée, que ce soit pour un répertoire vide ou non. J'ai l'intime impression que cela viendrait des répertoire "." et ".." qui sont communs à tous les dossiers mais sans certitude (le batch est quasi inconnu pour moi).

    Pouvez-vous m'aiguiller vers la solution? Je précise que je ne connais pas le type des fichiers contenus dans les dossiers donc je souhaiterai que cela reste global (si il y a un fichier de n'importe quel type, pas de traitement; sinon suppression du dossier)

    Merci

  2. #2
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    
    for /f "delims=" %%i In ('dir /ad/b/s "D:\Test script"') DO (	
    	>nul 2>nul dir /a-d "%%i\*" && (echo %%i CONTIENT FICHIER) || (echo %%i REPERTOIRE VIDE))
    Amicalement

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 39
    Par défaut
    Salut sachadee,

    Merci pour ta réponse.
    J'ai testé ta solution. Elle me pose un petit problème: dans le cas où j'ai une architecture du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dossier 1
    |-------Dossier 2
               |--------Fichier
    Le dossier 1 ne contenant pas directement un fichier mais contenant un dossier, il est considéré comme vide.
    Pour ma culture personnelle, peux-tu m'expliquer ta solution ? C'est une sorte d'opération ternaire ? Que veut dire ">nul 2>nul"?

    Sinon j'ai trouvé une solution à mon problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	for /f "delims=" %%i In ('dir /ad/b/s "D:\Test script"') DO (	
    		rd "%%i"
    	)
    Cela fonctionne puisque rd ne supprime que les dossiers qui ne sont pas vide. Le problème est que seul le niveau 0 (le plus bas niveau) de l'arborescence est supprimé. C'est-à-dire dans le cas où j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dossier 1
    |-------Dossier 2 (vide)
    seul le Dossier 2 est supprimé.
    J'ai contourné le problème en rajoutant une boucle avec une valeur limite en dur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for /l %%X in (1,1,10) do (
    	for /f "delims=" %%i In ('dir /ad/b/s "D:\Test script"') DO (	
    		rd "%%i"
    	)
    )
    C'est pas très joli mais ça fonctionne.

    EDIT
    En fait ça ne fonctionne pas mais je ne vois pas pourquoi. Je n'arrive pas à supprimer certains dossiers vides; j'obtiens une erreur me disant que le dossier n'est pas vide?! J'ai mis en PJ un printscreen d'un test que j'ai réalisé: j'affiche le contenu du répertoire vide et je tente ensuite de le supprimer.
    ça a pourtant fonctionné sur d'autres dossiers...
    Images attachées Images attachées  

  4. #4
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    Effectivement il faut inverser l'ordre de test pour tester d'abord les repertoires les plus profonds. Voici une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "delims=" %%a in (`"dir /ad/b/s "D:\Test script" | sort /R"`) do (rd "%%a")
    pour ton problème de RD essaye :

    pour vérifier qu'il n'y a pas de fichier/dossier caché

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 39
    Par défaut
    Tu as raison il y a bien des fichiers cachés dans les dossiers. En plus ce ne sont pas de simples fichiers cachés, ce sont des fichiers systèmes (du genre desktop.ini).

    Du coup ça bloque l'utilisation de mon script !

  6. #6
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    salut,

    desktop.ini n'est pas un fichier critique, il peut être supprimé.

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

Discussions similaires

  1. [fileset]Inclure répertoire vide
    Par GreenJay dans le forum ANT
    Réponses: 0
    Dernier message: 10/12/2008, 15h55
  2. boucle pour vérification chalmp vides
    Par khamett dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/04/2008, 20h26
  3. Inno Setup et répertoire vide
    Par jojo86 dans le forum Outils
    Réponses: 2
    Dernier message: 05/02/2008, 12h49
  4. rechercher un répertoire vide
    Par palcoquoz dans le forum Scripts/Batch
    Réponses: 12
    Dernier message: 15/06/2007, 16h04
  5. Tâche FTP de Ant : répertoire vide
    Par sc_wizard29 dans le forum ANT
    Réponses: 1
    Dernier message: 24/09/2006, 17h38

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