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 :

[Batch] comment tester qu'un répertoire est vide ?


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 9
    Points
    9
    Par défaut [Batch] comment tester qu'un répertoire est vide ?
    Bonjour,

    Je veux connaitre le nombre de fichiers txt dans mon répertoire (ie vérifier qu'il n'est pas vide).

    Donc j'essaye de parcourir les fichiers txt de mon répertoire ; dès que j'en trouve un, j'incrémente la variable n.

    Pour le moment j'ai le code suivant :
    ...
    set /a n=0
    for /R "%chemin%\monRepertoire\" %%i in ("*.txt") do (set /a n=%n%+1)
    if %n%==0 goto :err_fichiers_absents
    ...

    Le problème, c'est que l'incrémentation ne semble pas s'effectuer, j'ai toujours n=1 (avec 3 fichiers txt dans mon répertoire).

    Si vous avez un avis sur ce boui-boui

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code BATCH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cd C:\dossier à lister\
    dir *.txt /A-D /B | find /V /C "::"
    ou
    Code BATCH : Sélectionner tout - Visualiser dans une fenêtre à part
    dir C:\dossier à lister\*.txt /A-D /B | find /V /C "::"

    dir *.txt : liste le contenu du répertoire courant (ayant un nom se terminant par .txt) avec comme options :
    /A-D : liste tout sauf les répertoires
    /B : utiliser le format abrégé (nom de fichier uniquement)
    | : transmet le résultat de la commande précédente à find

    find : cherche toutes les occurences :
    /V : n'étant pas vides ("::")
    /C : affiche le nombre de résultats trouvés


    Ce qui revient à afficher le nombre de fichiers contenant un dossier

    edit: j'avais oublié qu'il ne fallait compter que les fichiers .txt
    C'est corrigé

    Et ma solution pour "Comment récupérer des fichiers sur une autre machine ?" ça a donné quoi ?
    Dernière modification par Invité ; 26/08/2009 à 17h47.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Eh bien merci Karzoff !
    On peut dire que tu es un rapide toi !

    Je n'ai même pas eu le temps d'éditer pour signaler que j'avais transformé le code comme suit :
    Code BATCH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /R "%chemin%\monRepertoire\" %%i in ("*.txt") do (set /a n+=1)

    Pourquoi set /a n+=1 fonctionne et pas set /a n=%n%+1 mystère

    En tout cas, je vais tenter ta méthode, ça va sûrement m'économiser quelques lignes

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par JiCeBe Voir le message
    Pourquoi set /a n+=1 fonctionne et pas set /a n=%n%+1 mystère
    La commande set /a attend une expression, pas une variable

    Code BATCH - set /? : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    set /?
    [...]
        SET /A expression
        SET /P variable=[ChaîneInvite]
    
    L'option /A spécifie que la chaîne à droite du signe égal est une
    expression numérique qui est évaluée.[...]

  5. #5
    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
    un petit exemple:
    Citation Envoyé par JiCeBe Voir le message
    Pourquoi set /a n+=1 fonctionne et pas set /a n=%n%+1 mystère
    non il n'y a pas de mystère si tu lis la doc et dans le forum tu trouveras de bon cours sur l'ERV:





    En général on parle d'expansion retardée de variable "ERV" dans le contexte d'une boucle FOR..

    Grosso modo la variable par défaut "expansion désactivée" dans une boucle reste inchangée "constante"..il faut activer l'ERV pour que les changement "naturels" s'effectuent..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off
    setlocal enabledelayedexpansion
    
    for /L %%a in (1=1=10) do (
      echo DisableExpansion=%time%  EnableExpansion=!time!
      (echo+|pause|echo+) 2>nul  
    )
    
    pause

  6. #6
    Invité
    Invité(e)
    Par défaut
    Woaw

    Merci pour ces précisions, t'as vraiment l'air calé

  7. #7
    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 Karzoff Voir le message
    t'as vraiment l'air calé
    pas du tout, je débute encore, mais merci..

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

Discussions similaires

  1. Comment savoir si un répertoire est vide
    Par mundu dans le forum Général Python
    Réponses: 5
    Dernier message: 06/05/2008, 11h51
  2. Réponses: 2
    Dernier message: 21/02/2007, 10h27
  3. comment tester si un formulaire est vide?
    Par stéphane_ais2 dans le forum Access
    Réponses: 5
    Dernier message: 22/09/2005, 10h28
  4. [langage] Comment tester si une chaine est vide
    Par |Bio dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2005, 15h05
  5. Comment tester si un repertoire est vide sous Linux
    Par chouchouappc dans le forum Linux
    Réponses: 3
    Dernier message: 24/02/2005, 12h03

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