Votre question

BATCh aidez moi pour "for"

Tags :
  • Batch
  • Programmation
Dernière réponse : dans Programmation
20 Décembre 2005 12:24:53

Bon voila esque quelqu'un pourait m'expliqué le plus simplement voir "débilement" possible comment utiliser ce "for" car je n'y comprend strictement rien ! J'ai chercher sur notre bon amis à tous : google mais il veu rien me dire.

Et parlons meme pas du "for/?" qui est tout simplement indigeste !

Merci !

Autres pages sur : batch aidez for

21 Décembre 2005 15:40:55

up : cricky est re venu :-D
a b L Programmation
21 Décembre 2005 20:55:26

Ben je l'avais vu ton post, mais je sais pas trop expliquer simplement ce genre de truc :-D

Le for varie selon le commutateur (le /quelquechose) que l'on met derrière.

* le for de base sans commutateur boucle sur les fichiers donnés et execute la commande:
  1. for %%i in (fichier1.txt fichier2.txt) do type

ça exécute:
  1. type fichier1.txt
  2. type fichier2.txt

L'avantage c'est qu'on peut y mettre *.txt pour lancer une commande sur tous les fichiers d'un certain type ou d'un certain nom

* Si on veut répéter une opération (par exemple echo quelquechose), il faut utiliser /L:
  1. FOR /L %%i in (1,2,10) do echo Message %%i

exécute 5x l'opération
La variable %%i commence par 1, augmente de 2 à chaque boucle, et la boucle s'arrête lorsque %%i dépasse 10.
ça exécute:
  1. echo Message 1
  2. echo Message 3
  3. echo Message 5
  4. echo Message 7
  5. echo Message 9[code2=html]
    1. </div></li><li style="font-weight: normal;"><div style="margin:0; padding:0; background:none;">&nbsp;</div></li><li style="font-weight: normal;"><div style="margin:0; padding:0; background:none;">* commutateur /D
      </div></li><li style="font-weight: normal;"><div style="margin:0; padding:0; background:none;">Apparemment c'est pour exécuter une commande sur des répertoire.
      </div></li><li style="font-weight: normal;"><div style="margin:0; padding:0; background:none;">[code]for /D %%i in (repertoire1 repertoire2) do dir</div></li></ol></pre>
    2. exécute:
    3. <pre class="html bb-code"><ol><li style="font-weight: normal;"><div style="margin:0; padding:0; background:none;">dir repertoire1
      </div></li><li style="font-weight: normal;"><div style="margin:0; padding:0; background:none;">dir repertoire2</div></li></ol></pre>
    4.  
    5. *commutateur /R
    6. apparemmetn comme /D mais en récursif sur les sous-repertoire
    7.  
    8. *commutateur /F
    9. lit le contenu d'un ou plusieurs fichiers: les autres n'ouvrent aucun fichiers, il se contentent d'appliquer une opération sur les fichier.
    10. Ce FOR applique une operation sur le contenu d'un fichier
    11. Donc après IN on met le fichier (ou la liste de fichiers) qui va être lu et où l'on va appliquer l'operation sur une partie du contenu
    12.  
    13. Avec ce commutateur on peut mettre des options qui vont indiquer comment on découpe le ou les fichiers pour savoir quelle partie on veut faire exécuter avec l'opération. Par exemple on peut découper mot par mot.
    14. Déjà sans rien ça découpe ligne par ligne.
    15.  
    16. Pour un découpage plus poussé, il faut indiquer le ou les caractères qui délimitent les zones.
    17. Par exemple pour les mots, ce sera les caractères espace, il suffira d'ajouter "delims= "
    18.  
    19. On peut dire que tout ce qui est à droite d'un caractère n'est pas pris. Par exemple si on met "eol=;" si le fichier a une ligne:
    20. <pre class="html bb-code"><ol><li style="font-weight: normal;"><div style="margin:0; padding:0; background:none;">aaaaaaazeazez ;sdqfsdfs</div></li></ol></pre>
    21. ce qui sera lu sera:
    22. <pre class="html bb-code"><ol><li style="font-weight: normal;"><div style="margin:0; padding:0; background:none;">aaaaaaazeazez</div></li></ol></pre>
    23.  
    24. On peut indiquer ne pas traiter certaines lignes. Plusieurs options possibles:
    25. "skip=4" va ignorer les 4 premières lignes du fichiers (pour éviter les entêtes comme le résultat d'un simple DIR)
    26. "tokens=1,5,8,9 delims= " ne va prendre que les 1er, 5ème et 8ème et 9ème mots de la ligne courante dans la boucle. Si on prend %%i pour la variable de boucle, %%i sera le 1er mot, %%j sera le 5ème, %%k sera le 8ème, et %%l sera le 9ème
    27. on peut aussi ajouter * à la fin des tokens, pour dire qu'on prend tout le reste de la ligne, c'est -à-dire ici du 10ème au dernier mots (mais pas découpés en mots, tout sera pris en un gros bloc).
    28.  
    29. Dans l'exemple donné:
    30. <pre class="html bb-code"><ol><li style="font-weight: normal;"><div style="margin:0; padding:0; background:none;">FOR /F "eol=; tokens=2,3* delims=, " %i in (monfich.txt) do @echo %i %j %k</div></li></ol></pre>
    31. Cette commande prend le fichier monfich.txt, et va boucler sur les ligne (le echo %i %j %k sera exécuté sur chaque lignes).
    32. on a eol=; qui signifie que lorsque qu'un ";" sera dans dans laligne, on ne prendra que ce qui est à droite.
    33. tokens=2,3* on découpe en 3 morceaux (2, 3, et fin (*)).
    34. la variable est %i donc %i contiendra le 2ème morceaux de la ligne, %j le 3ème morceau, et le %k du 4ème morceau à la fin de la ligne.
    35. delims=, indique que le délimiteur qui découpe les morceaux est la virgule.
    36.  
    37. Donc si le fichier monFich est:
    38. <pre class="html bb-code"><ol><li style="font-weight: normal;"><div style="margin:0; padding:0; background:none;">sfqsdf1, zarzera2, xvwcvw3, vcnvbn4, rtyutr5, fdgh6
      </div></li><li style="font-weight: normal;"><div style="margin:0; padding:0; background:none;">ssfgqsfdf1, zaerera2, zrezw3, veeenvbn4 ; ppppppp</div></li></ol></pre>
    39. les commandes exécutées par le for seront:
    40.  
    41. echo zarzera2xvwcvw3 zrezw3veeenvbn4set /A count=0
    42. for /F %%A in ('dir /B *.txt 2^>NUL') DO set /A count+=1
    [/code2]
    exécute la commande dir /B *.txt qui liste tous les fichiers .txt, et pour chaque ligne d'affichage, le compteur count augmente de 1. A la fin, on a le nombre de fichiers *.txt
22 Décembre 2005 12:53:32

MERCI !!! SUPER !! Mercie énormément !! j'ai enfin compris comment sa marche ce for !! Et je vien de découvrir qu'il peut etre très utile dans bien des cas !

Merci beaucoup !!
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS