|
|
|
|
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 :
@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 !!!!
@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 !!!!
Configuration: Windows Vista Opera 9.62
Répondre à H4RDW4RE
|
Bonsoir,
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 .......... Cordialement. Cchristian. |
Répondre à H4RDW4RE
|
Tien un petit truc que j'avais fait pour moi.
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 Il y a des jours faut pas m'chercher. Et y'a des jours tous les jours !
|