[Batch], FOR ???
Résolu
Utilisateur anonyme
-
ryaxx -
ryaxx -
Bonjour à tous.
Voila, je débute en programmation de fichier Batch et j'ai quelques soucis avec la commande FOR
1er pb :
Pourquoi je ne peut pas mettre de variable dans un ensemble for ??
Exemple :
Autre code :
2ème "pb" :
Bon déjà, je rame completement avec la commande FOR toute seul, mais pouvez vous quand même m'expliquer les "fonctions" TOKENS et DELIMS (je voit a peu près a quoi sa sert, mais je n'arrive pas trop a les manier...)
Alors une explication simple et complette est la bievenue^^
Voila, j'ai fini =D
Merci d'avance
@+
Voila, je débute en programmation de fichier Batch et j'ai quelques soucis avec la commande FOR
1er pb :
Pourquoi je ne peut pas mettre de variable dans un ensemble for ??
Exemple :
@echo off @cls set /p VAR=C:\Users\%USERNAME%\Desktop cd C:\Windows REM J'ouvre un autre dossier pour ne plus être dans le même emplacement, pour que la variable serve a quelque chose... for %%A in (%VAR%\*.bat %VAR%\*.zip) do dir %%A pause>nul REM Se code ne marche pas !!!!
Autre code :
@echo off @cls REM Pas besoin de mettre "cd C:\Users\%USERNAME%\Desktop" car c'est l'emplacement du batch for %%A in (*.bat *.zip) do dir %%A pause>nul REM Se code marche !!!!
2ème "pb" :
Bon déjà, je rame completement avec la commande FOR toute seul, mais pouvez vous quand même m'expliquer les "fonctions" TOKENS et DELIMS (je voit a peu près a quoi sa sert, mais je n'arrive pas trop a les manier...)
Alors une explication simple et complette est la bievenue^^
Voila, j'ai fini =D
Merci d'avance
@+
A voir également:
- [Batch], FOR ???
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Fichier batch - Guide
- Idm for mac - Télécharger - Téléchargement & Transfert
- Instagram for pc - Télécharger - Divers Communication
- Microsoft store download for pc - Guide
6 réponses
Bonsoir,
En ce qui concerne le premier problème essaie en mettant entre double quotes ta variable VAR :
for %%A in ("%VAR%"\*.bat "%VAR%"\*.zip) do echo %%A
En ce qui concerne le premier problème essaie en mettant entre double quotes ta variable VAR :
for %%A in ("%VAR%"\*.bat "%VAR%"\*.zip) do echo %%A
Merci beaucoup Cchristian, sa marche !!!
Quelqu'un connait un bon tuto sur la commande FOR accompagnée de TOKENS et DELIMS ou bien m'expliquer car je ne comprend pas beaucoup... J'en ai déjà lut des dizaines mais je suis toujours aussi en retard...
Merci d'avance
@+
Quelqu'un connait un bon tuto sur la commande FOR accompagnée de TOKENS et DELIMS ou bien m'expliquer car je ne comprend pas beaucoup... J'en ai déjà lut des dizaines mais je suis toujours aussi en retard...
Merci d'avance
@+
Bonsoir,
Allez, j'ai un peu de courage, allons-y !
-----------------------------------------------------------------------
A titre d'illustration, voici une serie de 3 boucles FOR dont 2 imbriquées :
ex du contenu du fichier %nomF_CH :
token : Détermine le nombre de parties de la ligne ; c’est-à-dire 1 à n groupes au maximum de caractères contigus, groupes séparés (et donc identifiés) par un ou plusieurs délimiteurs pris par défaut (espace et tabulation si delims= n'est pas codé ) ou définis dans le paramètre delims=dd.
Le premier ou le seul groupe de caractères sélectionné se trouve dans la variable explicitement définie (ici %%J).
Au-delà de 1 groupe (token=1,2 par exemple) une ou plusieurs variables supplémentaires sont automatiquement générées. Le nom de chaque variable supplémentaire est constitué de la lettre, ( précédée de 2 signes "%"), qui, dans l’alphabet, suit immédiatement la lettre attribuée à la dénomination de la variable précédente, ou de la variable explicitement définie, ici %%J (ex; %%J, %%K, %%L,......). Chacune d'elle(s) est renseignée, le cas échéans, avec le groupe correspondant. (avec token=1,2 il y a 2 variables possibles %%J et %%K).EX:
La commande ECHO %%J %%K affiche : J: strtol a traiter K: texte présent uniquement dans la variable %%J car aucun délimiteur n'est actif.
Si maintenant je retire delims= ce sont les délimiteurs par défaut qui vont être actifs (dont l'espace) :
Si je souhaite maintenant récupérer le reliquat de la ligne je fait suivre le second paramètre de token= par un astérisque (*) une nouvelle variable est créée (ici %%L) :
Dans l'exemple initial token=1* : Je demande à ce que les groupes de caractères (l'ensemble de la ligne) n'2tant subordonnés à aucun critère de sélection delims= soient contenus dans la variable %%J.
A noter que l'astérisque est ici inopérante, token=1 est suffisant.
Voilà nécessairement résumés par quelques exemples des cas d'utilisation des paramètres de la boucle FOR, il y a bien entendu d'autres combinaisons possibles, je te laisse les découvrir par l'exemple ..........
Allez, j'ai un peu de courage, allons-y !
-----------------------------------------------------------------------
A titre d'illustration, voici une serie de 3 boucles FOR dont 2 imbriquées :
rem - BOUCLE PRINCIPALE de lectures des chemins d'accès complets. rem - EXTRACTION (chemin accès) du nom et de l'extension du fichier en cours. rem - RECHERCHE dans ce fichier en cours de la présence de une ou plusieurs rem occurrences de chaque MOT/CRITERE présent dans le fichier nomF_CH. FOR /R "%param_1%" %%F IN (*.%ext%) DO ( SET /A "nb_fichiers_accedes+=1" SET /A "cpt_mots_trouves=0" SET "nom_ext=%%~nxF" FOR /F "eol={ tokens=1* delims=" %%J IN (%nomF_CH%) DO ( FOR /F "tokens=1* delims=" %%K IN ( ' TYPE "%%F" ^| FIND /I "%%J" ' ) DO ( SET /A "cpt_mots_trouves+=1" SET "nom_lib_rech=%%J" CALL :CRE_FICH_MATCH CALL :ECRITURE_MATCH "%%F" !nom_ext! ) ) )
TOKEN (help for sous l'invite de commande) tokens=x,y,m-n - spécifie les parties de chaque ligne devant être transmises au corps de FOR à chaque itération. Ceci provoquera l'allocation de noms de variables supplémentaires. La forme m-n est une étendue spécifiant les parties allant de m à n. Si le dernier caractère de la chaîne tokens= est une astérisque, alors une variable supplémentaire est allouée et reçoit le texte restant dans la ligne suivant la dernière partie analysée. EX: FOR /F "eol={ tokens=1* delims=" %%J IN (%nomF_CH%) DO (..eol={ : Je demande à ce que les lignes présentes dans le fichier %nomF_CH% et commençant par un "{" soient ignorées par le traitement de cette boucle for.
ex du contenu du fichier %nomF_CH :
{palindrome {............... {malloc strtolseule la ligne contenant la chaine de caractères "strtol" est traitée dans le corps de la boucle FOR.
token : Détermine le nombre de parties de la ligne ; c’est-à-dire 1 à n groupes au maximum de caractères contigus, groupes séparés (et donc identifiés) par un ou plusieurs délimiteurs pris par défaut (espace et tabulation si delims= n'est pas codé ) ou définis dans le paramètre delims=dd.
Le premier ou le seul groupe de caractères sélectionné se trouve dans la variable explicitement définie (ici %%J).
Au-delà de 1 groupe (token=1,2 par exemple) une ou plusieurs variables supplémentaires sont automatiquement générées. Le nom de chaque variable supplémentaire est constitué de la lettre, ( précédée de 2 signes "%"), qui, dans l’alphabet, suit immédiatement la lettre attribuée à la dénomination de la variable précédente, ou de la variable explicitement définie, ici %%J (ex; %%J, %%K, %%L,......). Chacune d'elle(s) est renseignée, le cas échéans, avec le groupe correspondant. (avec token=1,2 il y a 2 variables possibles %%J et %%K).EX:
FOR /F "eol={ tokens=1,2 delims=" %%J IN (%nomF_CH%) DO (ECHO J: %%J K: %%K) {palindrome {............... {malloc strtol a traiterDans cet exemple, token considère 2 groupes possibles (2 parties de ligne non délimités puisque delims=" rien.
La commande ECHO %%J %%K affiche : J: strtol a traiter K: texte présent uniquement dans la variable %%J car aucun délimiteur n'est actif.
Si maintenant je retire delims= ce sont les délimiteurs par défaut qui vont être actifs (dont l'espace) :
FOR /F "eol={ tokens=1,2" %%J IN (%nomF_CH%) DO ( ECHO J: %%J K: %%K)On obtient J: strtol K: a
Si je souhaite maintenant récupérer le reliquat de la ligne je fait suivre le second paramètre de token= par un astérisque (*) une nouvelle variable est créée (ici %%L) :
FOR /F "eol={ tokens=1,2*" %%J IN (%nomF_CH%) DO ( ECHO J: %%J K: %%K L: %%L)On obtient J: strtol K: a L: traiter
Dans l'exemple initial token=1* : Je demande à ce que les groupes de caractères (l'ensemble de la ligne) n'2tant subordonnés à aucun critère de sélection delims= soient contenus dans la variable %%J.
A noter que l'astérisque est ici inopérante, token=1 est suffisant.
Voilà nécessairement résumés par quelques exemples des cas d'utilisation des paramètres de la boucle FOR, il y a bien entendu d'autres combinaisons possibles, je te laisse les découvrir par l'exemple ..........
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
nickel merci !!!!
Par contre j'ai une petite question, j'aimerais effectuer un calcul de colonne d'un fichier plat
exemple dans mon fichier j'ai :
56 45 75
34 63 67
23 43 98
donc avec ma boucle for j'ai
FOR /f "tokens=2 delims= " %%A in (fichie.txt) do echo %%A
j'obtient bien (les valeurs de la variable %%A)
45
63
43
sauf que j'aimerais faire l'addition de cette colonne si x chiffre afin de trouver le résultat
comment je p donc procédé ?, y a t'il moyen de l'intégré directement dans la boucle for ?
je dois avouer que c'est super intérrésant
Par contre j'ai une petite question, j'aimerais effectuer un calcul de colonne d'un fichier plat
exemple dans mon fichier j'ai :
56 45 75
34 63 67
23 43 98
donc avec ma boucle for j'ai
FOR /f "tokens=2 delims= " %%A in (fichie.txt) do echo %%A
j'obtient bien (les valeurs de la variable %%A)
45
63
43
sauf que j'aimerais faire l'addition de cette colonne si x chiffre afin de trouver le résultat
comment je p donc procédé ?, y a t'il moyen de l'intégré directement dans la boucle for ?
je dois avouer que c'est super intérrésant
Tien un petit truc que j'avais fait pour moi.
Si sa peut t'aider.
Bilou
Si sa peut t'aider.
Delims=. est le séparateur des champs. Donc les partie seront avant et après le ou les point. token=2 on affiche que la deuxième partie étant "admin" et "user" la premier étant "1" et "2" Exemple 1: for /F "tokens=2 delims=." %%i in ('type text.txt') do echo %%i text.txt: Séparateur | | v 1.admin 2.user1 A A | | | | | Deuxieme partie | | | Premier partie Vu que le séparateur (delims=.) est un point. Si tokens=1 Sa n'affichera juste la premier partie donc "1" et "2". Si tokens=2 sa n'affichera juste la deuxieme donc "admin" et "user1"..
Bilou
je vais tester ça de suite
sinon sur un autre forum j'ai trouver une autre solution qui fonctionne nickel (je vous fait tourné l'info)
SETLOCAL ENABLEDELAYEDEXPANSION
SET Total=0
for /f "tokens=10 delims= " %%a in (test.txt) do (set /a Total=!Total!+%%a)
echo Total : !Total!
pause
et ça le fait bien
Merci bilou
sinon sur un autre forum j'ai trouver une autre solution qui fonctionne nickel (je vous fait tourné l'info)
SETLOCAL ENABLEDELAYEDEXPANSION
SET Total=0
for /f "tokens=10 delims= " %%a in (test.txt) do (set /a Total=!Total!+%%a)
echo Total : !Total!
pause
et ça le fait bien
Merci bilou