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 :

Une FOR contient quatre FOR : Pb return valeurs


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Par défaut Une FOR contient quatre FOR : Pb return valeurs
    Bonjour à tous et à toutes !

    Encore besoin de vous ! (Décidément, seul, j'suis pas productif...)

    Voici d'abord le code, après je m'explique :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    @echo off & cls
    set source1=%userprofile%\Desktop
    set source2=%userprofile%\Downloads
    set source3=%userprofile%\Music
    set source4=%userprofile%\Pictures
    set source5=%userprofile%\Videos
    set source6=%userprofile%\Documents
    
    rem ************Boucles FOR pour compter fichiers+dossiers+jonctions+TAILLETOTALE!**************
    for /l %%g in (1,1,6) do (
    echo Je viens de rentrer dans la GROSSE boucle [passage num%%g]
    set /a cptfichiers=0
    set /a cptdossiers=0
    set /a cptjonctions=0
    set /a totaloctets=0
    echo Je viens de rentrer dans la 1ere boucle [passage num%%g]
    for /f %%a in ('dir /s /b /a:-d "%source%%g%"\*.*') do set /a cptfichiers+=1
    echo Je viens de rentrer dans la 2eme boucle [passage num%%g]
    for /f %%a in ('dir /s /b /a:d "%source%%g%"\*.*') do set /a cptdossiers+=1
    echo Je viens de rentrer dans la 3eme boucle [passage num%%g]
    for /f %%a in ('dir /s /b /a:l "%source%%g%"\*.*') do set /a cptjonctions+=1
    setlocal enabledelayedexpansion
    echo Je viens de rentrer dans la 4eme boucle [passage num%%g]
    for /f "delims=" %%a in ('dir /b /a-d /s  "%source%%g%"') do  set /a totaloctets=!totaloctets!+%%~za
    echo disabledelayedexpansion
    setlocal disabledelayedexpansion
    echo set totaldossiers = cptdossiers - cptjonctions
    set /a totaldossiers=%cptdossiers%-%cptjonctions%
    echo set testf%%g = %cptfichiers%
    set testf%%g=%cptfichiers%
    echo set testg%%g = %cptdossiers%
    set testd%%g=%cptdossiers%
    echo set testj%%g = %cptjonctions%
    set testj%%g=%cptjonctions%
    echo set testt%%g = %totaloctets%
    set testt%%g=%totaloctets%
    @echo off
    )
    rem ***********************************FIN FCKING BOUCLES!************************************
    echo TOUTES LES BOUCLES SONT FINIES ! & timeout /t 2 > nul
    
    for /l %%g in (1,1,6) do (
    echo %%g : %testf%%g% fichiers %testd%%g% dossiers %testj%%g% jonctions %testt%%g% octets
    echo.
    )
    
    pause
    Bon voilà j'espère que je suis pas trop mauvais codeur pour ce qui est de la compréhension de mon code (pas très commenté j'avoue!).

    Le problème :
    Ce que je veut faire :
    J'ai 6 dossiers sources, et je veux connaître pour CHAQUE dossiers des valeurs (nbfichiers/nbdossiers/nbjonctions/tailledossier).
    J'utilise donc 4 boucles FOR à la suite pour les 4 valeurs citées ci-dessus! Chacune de ses boucles (indépendantes) me retournent bien la valeur à compter! No soucy!
    Le truc c'est que j'ai 6 dossiers à analyser, donc j'ai pas envie de copier 6 fois mes 10lignes de traitement => trop gros fichier et c'est pas ça l'informatique!
    Donc je crée une ENOORME FOR qui englobe mes 10lignes de traitement! Pour que mes 6 dossiers soient analysés les un après les autres!

    Maaais j'arrive pas à ce qu'il me retourne la valeur des 4 "petites" FOR (indépendantes) avant qu'il ne boucle sur l'ENOORME FOR qui englobe tout! J'suis clair là?!
    Par exemple :
    - 1er passage ENOORME FOR : Dossier bureau = 28 fichiers , 2 dossiers, 0 jonctions, 40000 octets ! => ça je veux le garder en mémoire !
    PUIS re-bouclage
    -2eme passage ENOORME FOR : Dossier Downloads = XX fichiers, YY dossiers, ZZ jonctions, BLA octets ! => pareil, en mémoire !
    Puis re-bouclage etc etc etc...

    Au final, je voudrais afficher mes "valeurs" de chaque dossiers, puis calculer le total (mais bon ça c'est facile), pour afficher "Les dossiers ça+ça+ça ont XX fichiers, YY dossiers, ZZ jonctions, BLA octets !"

    J'espère être clair et concis dans ce que je demande!

    Apparemment, il faudrait faire un tableau à 2 dimensions (d'après un collègue au boulot qui ne connais pas le batch) ! J'aurais dit 4 pour mes 4 valeurs à retourner, mais je ne sais pas comment faire des tableaux, ni comment stocker ses variables... ! :/

    Je vous remercie d'avance de prendre en compte ma demande d'aide, mon projet est à rendre dans pas longtemps !
    Merci beaucoup !

    >>>>>>>>>>>>>>>>>>>>>>>>> Merci d'avoir lu mon post jusqu'ici !
    >>>>>>>>>>>>>>>>>>>>>>>>> Merci à tous ceux/celles qui me répondront !

    Je vous souhaite une agréable journée !

  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,

    2 choses :

    1- La variable utilisé dans ton 1er FOR est %%g et non %g% , donc tu peux corriger tout tes -> dir /s /b /a:-d "%source%%g%" par dir /s /b /a:-d "%source%%%g"

    2- Tu dois activer l'expansion retardée avant ton premier FOR pour les compteurs


  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Par défaut Merci du coup de main!
    Citation Envoyé par sachadee Voir le message
    Salut,

    2 choses :

    1- La variable utilisé dans ton 1er FOR est %%g et non %g% , donc tu peux corriger tout tes -> dir /s /b /a:-d "%source%%g%" par dir /s /b /a:-d "%source%%%g"

    2- Tu dois activer l'expansion retardée avant ton premier FOR pour les compteurs

    Salut sachadee et merci pour ta réponse!

    1 - Je fesais %source%%g% dans ma tête! Mais pas pour l'ordi apparemment! Merci beaucoup pour cette aide ô combien précieuse! Donc 3% d’affilé! Noté

    2 - Je ne comprends toujours pas à quoi ça sert l'expansion retardée! :/

    Merci beaucoup pour cette avance considérable! Mais je pense avoir encore besoin d'un coup de pouce plus tard! Je mettrais à jour sur ce post si je rencontre d'autres soucis!

    Merci beaucoup! Kisses

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Par défaut
    Bon bah merci sachadee pour ta réponse mais cela ne marche toujours pas...

    Je viens de faire quelques tests, et le problème vient de là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @echo off & cls
    setlocal enabledelayedexpansion
    set source1=%userprofile%\Desktop
    set source2=%userprofile%\Downloads
    set source3=%userprofile%\Music
    set source4=%userprofile%\Pictures
    set source5=%userprofile%\Videos
    set source6=%userprofile%\Documents
    
    for /l %%g in (1,1,6) do (
    echo %%g passage !
    echo "%source%%%g"
    )
    Ce sont les toutes premières lignes de mon script qui bugg :/

    Il m'affiche : 1 passage ! , puis "1"
    Ensuite : 2 passage ! , puis "2" , etc etc ....

    Donc déjà, il veut pas reconnaître source1 puis source2 puis source3 etc etc ...
    Donc mes variables %source%%%g ne sont pas %source1% puis %source2% puis %source3% etc etc....
    Donc encore moins %userprofile%\Desktop puis %userprofile%\Downloads puis %userprofile%\Music etc etc....
    Donc j'arriverais pas à faire la moindre chose dans mes ('dir /b /a-d /s "%source%%%g"') si mes sources ne sont pas bonnes....

    NEED HELP PLZ! Je continue de tester des trucs....

  5. #5
    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
    En fait tu dois utiliser :


  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Par défaut
    OK!

    Je commence à comprendre un peu cette histoire d'expansion retardée!

    Merci beaucoup!

    Je teste ça d'ici ce soir, là, jsuis un peu pressé...

    Merci en tout cas pour ta réponse rapide!

    Je te/vous tiens au jus de l'avancement du projet!

    MERCI BEAUCOUP SACHADEE!

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Par défaut
    Bon du coup j'ai quelques autres soucis!

    Au passage de ma 4eme boucle : Il manque un opérande.
    Nom : essaifab.jpg
Affichages : 187
Taille : 265,8 Ko

    Donc il m'affiche des tailles négative en octets (ce qui m'arrange pas vraiment) et ce qui est complètement flou pour moi!
    Sauf pour le dossier Videos (mais la taille n'est pas bonne non plus!).
    Une idée d'où vient le problème?

    Voici le code utilisé, qui marche très bien mis à part le "set /a totaloctets=!totaloctets!+%%~za" de ma 4ème boucle!
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    @echo off & cls
    setlocal enabledelayedexpansion
    
    set source1=%userprofile%\Desktop
    set source2=%userprofile%\Downloads
    set source3=%userprofile%\Music
    set source4=%userprofile%\Pictures
    set source5=%userprofile%\Videos
    set source6=%userprofile%\Documents
    
    for /l %%g in (1,1,6) do (
    echo !source%%g!
    set /a cptfichiers=0
    set /a cptdossiers=0
    set /a cptjonctions=0
    set /a totaloctets=0
    echo Je viens de rentrer dans la 1ere boucle [passage num%%g]
    for /f %%a in ('dir /s /b /a:-d "!source%%g!"\*.*') do set /a cptfichiers+=1
    echo Je viens de rentrer dans la 2eme boucle [passage num%%g]
    for /f %%a in ('dir /s /b /a:d "!source%%g!"\*.*') do set /a cptdossiers+=1
    echo Je viens de rentrer dans la 3eme boucle [passage num%%g]
    for /f %%a in ('dir /s /b /a:l "!source%%g!"\*.*') do set /a cptjonctions+=1
    echo Je viens de rentrer dans la 4eme boucle [passage num%%g]
    for /f "delims=" %%a in ('dir /b /a-d /s  "!source%%g!"') do  set /a totaloctets=!totaloctets!+%%~za
    set /a testf%%g=!cptfichiers!
    set /a testd%%g=!cptdossiers!
    set /a testj%%g=!cptjonctions!
    set /a testt%%g=!totaloctets!
    echo cptfichiers = !cptfichiers!
    echo cptdossiers = !cptdossiers!
    echo cptjonctions = !cptjonctions!
    echo totaloctets = !totaloctets!
    )
    echo TOUTES LES BOUCLES SONT FINIES ! & timeout /t 5
    cls
    for /l %%g in (1,1,6) do (
    echo Dans !source%%g! :
    echo Il y a : !testf%%g! fichiers !testd%%g! dossiers !testj%%g! jonctions et !testt%%g! octets
    echo.
    )
    pause
    pause
    Sinon, comment enlever les jonctions qui n'existent pas : il m'affiche "Fichier introuvable". Je ne veux pas qu'il m'affiche ce résultat. un "> nul" suffit?

    Merci de vous soucier de mon problème! Bonne soirée

Discussions similaires

  1. Verifier le type d'une string contient une valeur double
    Par tangueros dans le forum VBA Access
    Réponses: 2
    Dernier message: 19/06/2007, 12h56
  2. Réponses: 1
    Dernier message: 21/11/2006, 13h28
  3. [SQL Server] parcourir une Table avec un FOR
    Par papouAlain dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2006, 11h49
  4. Réponses: 37
    Dernier message: 02/03/2006, 01h58
  5. Nom de Champ dans une table pour utiliser For/Next
    Par Mulele dans le forum Access
    Réponses: 6
    Dernier message: 30/10/2004, 13h28

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