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 :

Problème avec boucle FOR [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2016
    Messages : 63
    Par défaut Problème avec boucle FOR
    Bonjour à tous,

    Nouvelles difficultés avec l’utilisation d’une boucle FOR.
    Le code suivant va analyser des répertoires sous [D:\Exemple] du type [Test_AAAA_MM_JJJJ_XXX ] où AAAA_MM_JJJJ sont des dates et XXX sont des nombres. Je voudrais connaître le nombre le plus grand [NumMax].

    La première version fonctionne mais la boucle n’est pas bien utilisée car elle peut me fournir que la dernière information.

    Code 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
    16
    17
    18
    @ECHO OFF
     
    SETLOCAL EnableDelayedExpansion
     
    SET OldTarget="D:\Exemple\Test_"
    SET /a Longueur=17
     
    SET /a Num=0
    SET /a NumMax=0
    SET /a Longueur=%Longueur%+10
     
    FOR /d %%G IN ("%OldTarget%*") DO SET NomRep=%%~G
    SET /a Num=!NomRep:~%Longueur%,3!
    IF %Num% GTR %NumMax% SET /a NumMax=%Num%
     
    ECHO %NumMax%
     
    PAUSE
    La deuxième version ne fonctionne pas mais elle devrait me permettre, une fois le problème trouvé, d’obtenir la bonne information. Après quelques tests, la variable [NomRep] ne semble pas prendre le nom du répertoire.
    Elle fournit une info. avec [ECHO !NomRep!] mais rien dans le [SET /a Num=!NomRep:~%Longueur%,3!].

    Code 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
    16
    17
    18
    19
    20
    @ECHO OFF
     
    SETLOCAL EnableDelayedExpansion
     
    SET OldTarget="D:\Exemple\Test_"
    SET /a Longueur=17
     
    SET /a Num=0
    SET /a NumMax=0
    SET /a Longueur=%Longueur%+10
     
    FOR /d %%G IN ("%OldTarget%*") DO (
    	SET NomRep=%%~G
    	SET /a Num=!NomRep:~%Longueur%,3!
    	IF %Num% GTR %NumMax% SET /a NumMax=%Num%
    )
     
    ECHO %NumMax%
     
    PAUSE

    Auriez-vous une idée ?

    Merci pour votre aide.

  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
    Tu peux récuperer les 3 derniers élément du répertoire simplement de cette manière

    !NomRep:~-3!

    ça t'évite les comptages inutils.


    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    setlocal enabledelayedexpansion
    
    set "$tmp=0"
    
    FOR /d %%G IN ("%OldTarget%*") DO (
       SET "NomRep=%%~G"
       SET /a Num=!NomRep:~-3!
       IF !Num! GTR !$tmp! SET /a $Tmp=!Num!
    )
    
    echo le plus grand ==^> [!$Tmp!]

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2016
    Messages : 63
    Par défaut
    Cela fonctionne... sauf pour :
    - "010" qui donne 8,
    - un nombre composé d'un ou plusieurs "8" qui le message "Nombre non valide. Les constantes numériques...".

    Étonnant ?!

  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
    Effectivement je n'avais pas pensé à ça (Il compte en Octal)

    Voici le code corrigé :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @echo off
    setlocal enabledelayedexpansion
     
    set "$tmp=0"
     
    FOR /d %%G IN ("%OldTarget%*") DO (
       SET "NomRep=%%~G"
       SET "Num=!NomRep:~-3!"
       SET /a Num=10000!Num! %% 10000
       IF !Num! GTR !$tmp! SET /a $Tmp=!Num!
    )
     
    echo le plus grand ==^> [!$Tmp!]


  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2016
    Messages : 63
    Par défaut
    Merci ça marche.

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

Discussions similaires

  1. Problème avec boucle for
    Par GLDRX dans le forum LabVIEW
    Réponses: 1
    Dernier message: 14/06/2010, 21h43
  2. Problème avec boucle for
    Par kayenne77 dans le forum Débuter
    Réponses: 1
    Dernier message: 10/03/2009, 08h09
  3. [batch] problème avec boucle for
    Par TanEk dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 22/04/2008, 14h41
  4. Problème avec boucle for() et action POST
    Par Oli_Ifre dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2007, 09h52
  5. [ActionScript] Problème avec boucle 'FOR'
    Par BnA dans le forum Flash
    Réponses: 7
    Dernier message: 02/11/2006, 09h26

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