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 listeur de répertoires bogué


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Par défaut batch listeur de répertoires bogué
    Bonjour,

    J'ai codé un script listant récursivement les dossiers d'un répertoire. Je souhaite ne pas lister les dossier dont le chemin d'accès (sans le nom du dossier) est le même que celui du batch. J'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    @echo off
    setlocal enabledelayedexpansion
    set /a c="1"
    
    echo.
    for /d /r %%i in (*) do (
    echo 	dossier !c!
    
    echo alb : 	'%%~pi'
    echo path : 	'%~p0%'
    
    echo comparaison ...
    if %%~pi == %~p0% (
    echo same
    )
    else (
    echo diff
    )
    
    set /a c+=1
    echo --------
    )
    
    pause
    Déja le IF pose problème : on a tout le temps "dossier 1" à l'exécution du script au lieu de "dossier 1", "dossier 2" etc...
    Si on l'enleve, ça marche.
    En plus, le else provoque à la derniere ligne ce message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'else' n'est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.
    Si je met le ELSEaprès le ')' du IF, dos me dit "else "tait inattendu".

    Pour finir, le IF est toujours "vrai" si on en croit dos, alors que les chemins sont parfois différents...

    C'est pas vital, mais un coup de main serait le bienvenu.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Par défaut
    Il n'y a effectivement pas de ELSE sous DOS
    Il faut "tricher", par ex. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echo comparaison ...
    if %%~pi == %~p0% (
    echo same
    goto fin
    )
    
    :fin
    echo diff
    Pour le reste, ton code n'est pas récursif, il ne parcourt pas les sous-dossiers

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Par défaut
    La doc de IF indique l'existance d'une structure ELSE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    La clause ELSE doit être sur la même ligne que la commande suivant IF. Par
    exemple:
    
        IF EXIST nomfichier. (
            del nomfichier.
        ) ELSE (
            echo nomfichier. introuvable.
        )
    Merci quand même

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Par défaut
    Exact, la syntaxe de départ est erronée, mais ELSE existe bet et bien
    J'ai confondu avec les premières versions de DOS qui n'avaient pas le ELSE (c'est si loin tout ça )

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Par défaut
    et oui, le temps passe vite =(

    Sinon, dans ton code, le label ":fin" devrait être en dernière ligne au lieu d'avant dernière.

    Pour en revenir à mon script, aucune syntaxe ne fonctionne :
    - if et else sur la meme ligne
    - sur plusieurs lignes
    - avec et sans paranthèses
    - avec 2 if au lieu d'un else...

    rien ne marche...

    Le message "'and' n'est pas reconnu en tant que commande interne..." revient souvent à la fin du programme...

    J'essayerai peut être un autre algorithme :

    scruter les répertoire en mode non récursif dans une boucle for, puis pour chacun des répertoires trouvé, scruter les dossiers contenus et les répertorier...

  6. #6
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    @echo off
    setlocal enabledelayedexpansion
    set /a c=1
    
    echo.
    for /d /r %%i in (*) do (
        echo 	dossier !c!
    
        echo alb : 	'%%~pi'
        echo path : 	'%~p0%'
    
        echo comparaison ...
        if %%~pi == %~p0% (
            echo same
        ) else (
            echo diff
        )
    
        set /a c+=1
        echo --------
    )
    Cela fonctionne parfaitement chez moi.
    Les modifs effectuées :

    Passage du set /a c="1" en set /a c=1. /a implique du numérique, pourquoi lui ajouter des quotes ?

    Le else doit etre sur la même ligne que le if comme tu l'as mentionné, c'est à dire en pratique que tu dois avoir en une ligne la parenthèse fermante du if, le else et la parenthèse ouvrante du else.

    Enjoy!

Discussions similaires

  1. Batch trie de répertoire
    Par julien41 dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 08/02/2012, 10h52
  2. Réponses: 3
    Dernier message: 04/12/2007, 12h22
  3. Réponses: 4
    Dernier message: 01/08/2006, 08h34
  4. Batch : copy d'un répertoire avec des espaces
    Par krfa1 dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 26/10/2005, 12h47
  5. Réponses: 2
    Dernier message: 08/07/2005, 10h40

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