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 :

2 boucles FOR imbriquées et GOTO [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Points : 156
    Points
    156
    Par défaut 2 boucles FOR imbriquées et GOTO
    Bonjour,
    Je coince dans l'élaboration d'un petit script batch.
    La première boucle lit les données dans un fichier structuré "liste.txt" qui possède cette structure "Client;Chemin;ExtensionFichier;Date;Heure" et qui dispose de plusieurs lignes de données.

    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
    25
    26
    27
    28
    29
    30
    31
    @ECHO OFF
    
    SETLOCAL ENABLEDELAYEDEXPANSION
    
    
    FOR /F "skip=1 delims=; tokens=1,2,3,4,5" %%a IN (liste.txt) DO (
    
    	SET Client=%%a
    	SET CheminDossier=%%b
    	SET ExtensionFichiers=%%c
    	SET DateTrigger=%%d
    	SET HeureTrigger=%%e
    	SET DateCompleteTrigger=!DateTrigger!_!HeureTrigger!
    
    
      FOR /F "tokens=1,2" %%i IN ('dir !CheminDossier!\*.!ExtensionFichiers! /O-D ^| FIND "/"') DO (
    	SET DateDernierFichier=%%i
    	SET HeureDernierFichier=%%j
    	ECHO !DateDernierFichier!_!HeureDernierFichier!
    	GOTO :Next
      )
    
    :Next
      ECHO Client=!Client!
      ECHO !DateDernierFichier!
    
    )
    
    
    ENDLOCAL
    PAUSE
    Mon problème se situe au niveau du GOTO :Next qui me fait en fait sortir des 2 boucles !!! et pas juste de la deuxième comme souhaité.
    Du coup il ne parcourt que la première ligne de données du fichier "liste.txt"
    Si je supprime la partie avec GOTO :Next... il me parcourt bien tout le fichier liste.txt mais alors je n'obtiens plus le résultat souhaité.

    Le GOTO :Next a pour objectif de ne lister que le fichier le plus récent de la fonction DIR


    Voilà j'espère avoir était assez clair pour que quelqu'un puisse m'aider.
    Merci
    A+
    Dams'

  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
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut,

    ton label :next est contenu dans la première boucle !!!!

    essaye ça:


    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
    25
    26
    27
    28
    29
    30
    31
    32
    @ECHO OFF
    
    SETLOCAL ENABLEDELAYEDEXPANSION
    
    
    FOR /F "skip=1 delims=; tokens=1,2,3,4,5" %%a IN (liste.txt) DO (
    
    	SET Client=%%a
    	SET CheminDossier=%%b
    	SET ExtensionFichiers=%%c
    	SET DateTrigger=%%d
    	SET HeureTrigger=%%e
    	SET DateCompleteTrigger=!DateTrigger!_!HeureTrigger!
    
    
      FOR /F "tokens=1,2" %%i IN ('dir !CheminDossier!\*.!ExtensionFichiers! /O-D ^| FIND "/"') DO (
    	SET DateDernierFichier=%%i
    	SET HeureDernierFichier=%%j
    	ECHO !DateDernierFichier!_!HeureDernierFichier!
    	GOTO :Next
      )
    )
    
    endlocal
    echo done!!!
    exit/b
    
    
    :Next
      ECHO Client=!Client!
      ECHO !DateDernierFichier!
      pause

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Points : 156
    Points
    156
    Par défaut
    ben non, ça ne marche pas... seule la 1ère ligne du fichier "liste.txt" est lue.

    La 1ère boucle se ferme à la 1ère parenthèse fermante ")"
    La 2ème boucle se ferme à la 2ème parenthèse fermante.

    Or tout ce que tu as rajouté se trouve après la 2ème parenthèse fermante... donc ça ne marche pas

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Bonjour damsmut, salut sachadee,

    En fait tu n'as pas besoin de sortir de la deuxième boucle, il suffit d'inverser l'ordre de tri et de récupérer le dernier résultat :

    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
    25
    26
    @ECHO OFF
    
    SETLOCAL ENABLEDELAYEDEXPANSION
    
    FOR /F "skip=1 delims=; tokens=1,2,3,4,5" %%a IN (liste.txt) DO (
    
    	SET Client=%%a
    	SET CheminDossier=%%b
    	SET ExtensionFichiers=%%c
    	SET DateTrigger=%%d
    	SET HeureTrigger=%%e
    	SET DateCompleteTrigger=!DateTrigger!_!HeureTrigger!
    
    
      FOR /F "tokens=1,2" %%i IN ('dir "!CheminDossier!\*.!ExtensionFichiers!" /OD ^| FIND "/"') DO (
    	SET DateDernierFichier=%%i
    	SET HeureDernierFichier=%%j
      )
    
      ECHO Client=!Client!
      ECHO !DateDernierFichier!_!HeureDernierFichier!
    
    )
    
    ENDLOCAL
    PAUSE

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Points : 156
    Points
    156
    Par défaut
    salut barnabe0057,

    c'est en fait la solution provisoire que j'avais mis en place en attendant de recevoir une solution à mon problème :-)

  6. #6
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    met un compteur dans ta deuxime boucle qui se reinitialise dans la première et ça marchera tranquille !

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Points : 156
    Points
    156
    Par défaut
    tu peux être plus précis avec ton idée de compteur sachadee ?
    un ptit bout de code ?

  8. #8
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    qqe chose comme ça :

    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
    25
    26
    27
    28
    29
    30
    @ECHO OFF
    
    SETLOCAL ENABLEDELAYEDEXPANSION
    
    
    FOR /F "skip=1 delims=; tokens=1,2,3,4,5" %%a IN (liste.txt) DO (
    
    	SET Client=%%a
    	SET CheminDossier=%%b
    	SET ExtensionFichiers=%%c
    	SET DateTrigger=%%d
    	SET HeureTrigger=%%e
    	SET DateCompleteTrigger=!DateTrigger!_!HeureTrigger!
    	set /a $c=1
    
      FOR /F "tokens=1,2" %%i IN ('dir !CheminDossier!\*.!ExtensionFichiers! /O-D ^| FIND "/"') DO (
    	SET DateDernierFichier=%%i
    	SET HeureDernierFichier=%%j
    	ECHO !DateDernierFichier!_!HeureDernierFichier!
    	if !$c!==1 (
    		ECHO Client=!Client!
    		ECHO !DateDernierFichier!
    		set /a $c+=1
    		pause
    		)
      )
    )
    
    echo done!!!

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Points : 156
    Points
    156
    Par défaut
    bon, finalement je suis resté sur l'idée de contournement...
    En fait tu n'as pas besoin de sortir de la deuxième boucle, il suffit d'inverser l'ordre de tri et de récupérer le dernier résultat :

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

Discussions similaires

  1. Boucles for imbriquées
    Par The eye dans le forum ASP
    Réponses: 2
    Dernier message: 19/07/2007, 12h00
  2. Boucle for imbriqué
    Par boula dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 18/07/2007, 12h42
  3. 2 boucles for imbriquées
    Par karimphp dans le forum Langage
    Réponses: 8
    Dernier message: 02/12/2006, 14h46
  4. Batch - Deux boucle For imbriquées plus un FC
    Par Lorponos dans le forum Windows
    Réponses: 17
    Dernier message: 27/07/2006, 14h58
  5. [Syntaxe] Boucle For imbriquées en 1.5
    Par Piolet dans le forum Langage
    Réponses: 5
    Dernier message: 09/01/2005, 00h49

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