Tom's Guide > Forum > Programmation > BATCh aidez moi pour "for"

BATCh aidez moi pour "for"

Forum Programmation : BATCh aidez moi pour "for"

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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 !

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

up : cricky est re venu :-D

Répondre à Dark_Silver

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:

Code :
  1. for %%i in (fichier1.txt fichier2.txt) do type


ça exécute:

Code :
  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:

Code :
  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:

Code :
  1. echo Message 1
  2. echo Message 3
  3. echo Message 5
  4. echo Message 7
  5. echo Message 9[code]
  6. * commutateur /D
  7. Apparemment c'est pour exécuter une commande sur des répertoire.
  8. [code]for /D %%i in (repertoire1 repertoire2) do dir


exécute:

Code :
  1. dir repertoire1
  2. dir repertoire2



*commutateur /R
apparemmetn comme /D mais en récursif sur les sous-repertoire

*commutateur /F
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.
Ce FOR applique une operation sur le contenu d'un fichier
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

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.
Déjà sans rien ça découpe ligne par ligne.

Pour un découpage plus poussé, il faut indiquer le ou les caractères qui délimitent les zones.
Par exemple pour les mots, ce sera les caractères espace, il suffira d'ajouter "delims= "

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:

Code :
  1. aaaaaaazeazez ;sdqfsdfs


ce qui sera lu sera:

Code :
  1. aaaaaaazeazez



On peut indiquer ne pas traiter certaines lignes. Plusieurs options possibles:
"skip=4" va ignorer les 4 premières lignes du fichiers (pour éviter les entêtes comme le résultat d'un simple DIR)
"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
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).

Dans l'exemple donné:

Code :
  1. FOR /F "eol=; tokens=2,3* delims=, " %i in (monfich.txt) do @echo %i %j %k


Cette commande prend le fichier monfich.txt, et va boucler sur les ligne (le echo %i %j %k sera exécuté sur chaque lignes).
on a eol=; qui signifie que lorsque qu'un ";" sera dans dans laligne, on ne prendra que ce qui est à droite.
tokens=2,3* on découpe en 3 morceaux (2, 3, et fin (*)).
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.
delims=, indique que le délimiteur qui découpe les morceaux est la virgule.

Donc si le fichier monFich est:

Code :
  1. sfqsdf1, zarzera2, xvwcvw3, vcnvbn4, rtyutr5, fdgh6
  2. ssfgqsfdf1, zaerera2, zrezw3, veeenvbn4 ; ppppppp


les commandes exécutées par le for seront:

echo zarzera2xvwcvw3 zrezw3veeenvbn4set /A count=0
for /F %%A in ('dir /B *.txt 2^>NUL') DO set /A count+=1[/code]
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

Répondre à CRicky

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 !!

Répondre à Dark_Silver
Tom's Guide > Forum > Programmation > BATCh aidez moi pour "for"
Aller à :

Il y a 1499 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens