|
Publicité ' | ||||||||||||||||||||||
|
|
#1 | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
Membre Expert
![]() Walid ToumiInscription : juillet 2008 Messages : 891 ![]() |
salut,
j'espère que ce HOWTO va aider à comprendre quelques notions fondamentales en batch (les boucles et les sous-programmes) j'ai essayé de donner le maximum d'exemples..et le moins de théorie possibles il est à noter aussi que je n'ai pas parler des options de la boucles FOR /F "delims - tokens"..ça sera peut être dans un autre HOWTO LES SOUS-FONCTIONSTypes de fonctions: ================================================================== 1- Sans paramètres: ================================================================== Code :
Ligne 6: début du corps de la fonction SFU, contient l'affichage de la variable %VAR% ================================================================== 2- Avec paramètres: ================================================================== ---------------------- A- chaîne de caractères ---------------------- Code :
---------------------- B- variable ---------------------- Code :
Code :
::- [CALL :SFU %VAR%] = [CALL :SFU Bonjour Maitre] alors que: Code :
::- [CALL :SFU "%VAR%"] = [CALL :SFU "Bonjour Maitre"] Ligne 6: Il ne reste plus qu'enlever les guillemets ::- ECHO.%~1 On peut aussi utiliser le %* pour appeler les paramètres Code :
Ligne 6: le signe %* vaut tout le contenu de la variable %VAR% %*=Bonjour Maitre ----------------------- C- référence ----------------------- Code :
Ligne 2: le paramètre NEWVAR sera dans le corps de la fonction transformer en une variable %NEWVAR% Ligne 7: Code :
D- expansions retardées des variables: ----------------------- )- expansion activée Code :
de la variable ici: VAR et %VAR% )- expansion désactivée Code :
Ligne 3: Le nom du paramètre doit être identique au nom de la variable ici: VAR et %VAR% ----------------------------------- E- Concaténation de paramètres ----------------------------------- Code :
Voici un autre exemple: Code :
Utilisation de la commande SHIFT: on peut utiliser la commande SHIFT pour exploiter un nombre éléver de paramètres: Pour illustrer mes propos voici un exemple: (Ce code permet de vérifier si les processus mis comme paramètre dans CALL sont actifs ou pas) Code :
LES BOUCLES FOR==================================================================== 1-Boucle FOR ==================================================================== Code :
La boucle 1: va retourner: La boucle 2: va retourner: il ne sera pas question d'expression mais de mots La boucle 3: va retourner: ==> l'utilisation des guillemets provoque un changement de l'affichage de %%? ==================================================================== 2-Boucle FOR /D ==================================================================== On suppose qu'on a un répertoire "folder" ayant comme contenu: Code :
:=: tout au long du cours Code :
La Boucle 1: va retourner: Code :
-->On peut utiliser à la place de (*) un (*.) ou bien (*.*) La Boucle 2: va retourner: Code :
test_*_* et logs_*_* ===================================================================== 3-Boucle FOR /R ===================================================================== Code :
La Boucle 1: va retourner: Code :
-->les répértoires seulement seront listés (pas les fichiers) La Boucle 2: va retourner: Code :
--> On peut choisir une/plusieurs extension(s) (*.cmd *.txt) --> On peut même lister les répértoires et les fichiers ensembles avec (* .) ====================================================================== 4-Boucle FOR /F ====================================================================== La Boucle FOR /F est la plus utiliser, car elle regroupe toutes les fonctionnalités des autres boucle et + encore: -------------- a) Expression -------------- Code :
For /f "tokens=*" %%z In ("une autre expression") Do Echo %%z
Code :
For %%z In ("une autre expression") Do Echo %%z
au contraire de la boucle FOR --------------------------- b) Lister fichiers/dossiers -------------------------- Code :
Code :
La Boucle 1: va retourner: La Boucle 2: va retourner: Code :
--> avec le commutateur /S : + Les fichiers dans les sous-dossiers seront aussi lister + les chemins des fichiers seront absolus [D:\folder\mon_batch.bat] au lieu de [mon_batch.bat] ---------------------- c) Contenu des fichiers ---------------------- Code :
c'est un genre de: La Boucle 2: c'est la même chose que la première sauf que l'expression "une autre expression" va aussi être afficher ====================================================================== 5-Boucle FOR /L ====================================================================== [CODE] FOR /L est utiliser parfois à la place des branchements GOTO, car elle est plus facile à gérer (mais pas tout le temps !!) créer 3 fichier:file1.bat file2.bat file3.bat et executer les 2 codes ci-dessous: Code :
à la place de ceci on peut facilement faire: Code :
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
00
|
|
|
#2 |
|
Membre actif
![]() Inscription : juillet 2008 Messages : 239 ![]() |
Bravo pour ces explications.
|
|
|
00
|
|
|
#3 | ||||
![]() ![]() Inscription : janvier 2003 Messages : 6 246 ![]() |
Salut,
je me permet une petite remarque, pour le cas "1- Sans arguments:", je pense que ta formulation peut être précisé Citation:
d'où Citation:
Pour ceci Citation:
Pour "Ce qui se traduit par Bonjour=%1 et Maitre=%2" je pense qu'il reste encore à 'dérouler', qu'est-ce qu'ici Bonjour et %1. Comme tu parles de "quelques notions fondamentales ", un petit chapitre sur l'usage des variables et paramètres ne serait pas superflu. Tu peux aussi reprendre quelque éléments de la doc de MS si tu la cites ce n'est pas gênant. Citation:
Le mieux aurait été de le proposer sous forme de tutoriel, il en existe très peu en français sur le sujet, voir dans la FAQ. Belle initiative, châpeau bas ! ps Je me permettrais de revenir te proposer d'autre remarques , là je n'ai pas trop le temps.
__________________
Tutoriels Delphi Win32/Delphi .NET/Oracle/PowerShell - Ressources PowerShell - FAQ Delphi - FAQ Delphi .NET Beatus, qui prodest, quibus potest. |
||||
|
|
00
|
|
|
#4 | ||||||||||
|
Membre Expert
![]() Walid ToumiInscription : juillet 2008 Messages : 891 ![]() |
Salut,
Citation:
Citation:
Citation:
Code :
Citation:
je parlais de ceci: Code :
Code :
|
||||||||||
|
00
|
|
|
#5 | |||
![]() ![]() Inscription : janvier 2003 Messages : 6 246 ![]() |
Citation:
C'est pour moi une évidence qu'il est bon de préciser, d'où ma remarque. Citation:
En même temps, son absence t'indiquera que quelque chose ne se passe pas comme prévu. C'est un choix. Et pour le faire il faut connaître les 2 modes de fonctionnement, avec ou sans le point. Citation:
Il manque en quelque sorte la nomenclature du schémas utilisé, si tu la communiques, ma remarque est nulle et non avenue. Lorsque je lis ce type de texte, j'essai de prendre le rôle du candide. Certains points sont dans l'implicite, je comprend ce que tu veux dire parce que je connais le sujet, le public ciblé pas forcément. A mon avis tu peux améliorer ce texte sans pour autant tout expliciter, le lecteur a aussi sa part de travail, heureusement d'ailleurs
__________________
Tutoriels Delphi Win32/Delphi .NET/Oracle/PowerShell - Ressources PowerShell - FAQ Delphi - FAQ Delphi .NET Beatus, qui prodest, quibus potest. |
|||
|
|
10
|
|
|
#6 | ||||||
![]() ![]() Inscription : janvier 2003 Messages : 6 246 ![]() |
Voici d'autres remarques :
A- Argument: variable Citation:
le signe %* référence le contenu de tous les paramètres déclarés lors de l'appel de la sous-fonction Code :
B- Argument: référence Citation:
De plus dans l'exemple on passe en argument le nom de la variable que l'on crée dans la sous-fonction. On est dans du code dynamique. Enfin tu utilises le terme référence, donc si je comprend bien de pointeur, mais il n'est valable QUE dans le contexte de l'expansion de variable. Avec ce mécanisme le contenu de ma variable contient le nom d'une autre variable. Dans l'exemple suivant Pointeur contient une référence SI l'expansion de variable est activée. Code :
je te propose : Ligne 2: comporte un nom de variable, NEWVAR. Celui-ci est utilisé pour créer dynamiquement une variable de même nom. Elle contiendra la concaténation du contenu de la variable %VAR% et de la chaîne de caractère " 2".
__________________
Tutoriels Delphi Win32/Delphi .NET/Oracle/PowerShell - Ressources PowerShell - FAQ Delphi - FAQ Delphi .NET Beatus, qui prodest, quibus potest. |
||||||
|
|
00
|
|
|
#7 | |||||||||||||||
|
Membre Expert
![]() Walid ToumiInscription : juillet 2008 Messages : 891 ![]() |
Salut et merci pour vos remarques,
Citation:
oui c'est exact, dans l'exemple que j'ai cité Code :
Code :
quand ils sont utilisés comme paramètres, 2 possbilités: ou bien utiliser un %* ou bien encadré la varaible %VAR% par des guillemets.. dans l'exemple que vous avez donné: Code :
j'ai encadré le terme "problème" par des guillemets parceque parfois ça devient une Solution à d'autres problémes, concernant l'extraction de caractères dans des chaînes Citation:
![]() Citation:
Code :
|
|||||||||||||||
|
00
|
|
|
#8 | |||||||
![]() ![]() Inscription : janvier 2003 Messages : 6 246 ![]() |
Citation:
Citation:
![]() Citation:
Citation:
Citation:
Citation:
Citation:
Donc ma démarche se voulait préciser l'usage du terme afin d'éviter une possible confusion. Pour moi, en batch son usage est contextuel. Tu me diras je coupes peut être les cheveux en quatre...
__________________
Tutoriels Delphi Win32/Delphi .NET/Oracle/PowerShell - Ressources PowerShell - FAQ Delphi - FAQ Delphi .NET Beatus, qui prodest, quibus potest. |
|||||||
|
|
00
|
|
|
#9 |
|
Membre émérite
![]() Inscription : mai 2007 Messages : 895 ![]() |
En parle de moi là? Eh! C'est pas comme ça que s'écrit mon pseudo
(Oui. Blague à part, il y a bien deux types de passages de paramètre, par valeur ou par référence (en se référent à..., on parle aussi de la variable comme étant, dans ce contexte, un référent, a fortiori ça permet de cibler un contenu ou d'identifier un conteneur suivant ce qu'on en fait). Que ce soit une valeur ou une référence, il faut savoir qu'il n'y a rien de fondamental là-dedans, il faut voir cela comme un concept ou mieux, une règle d'usage. Le but se résumant à la simple manipulation d'un nom de variable, l'expansion retardée n'y a pas sa place. De même, parler de pointeur est un pas que je ne franchirai pas. Maintenant, en ce qui concerne le "Howto" de I'm_HERE. C'est sûr, il y a beaucoup de chose à dire. Mais le but n'était pas d'écrire un livre détaillé et encore moins agrémenté d'un recueil d'astuces, mais seulement un ensemble de recettes. Je trouve que l'effort fourni par I'm_HERE est très louable. Et j'en sais quelque chose, vu le nombre de tours qu'a dû faire ma molette pour parcourir son premier poste, pour cela, I'm_HERE, je t'en félicite. Pour conclure, Laurent Dardenne, il y a bien au moins deux points sur lesquels je te rejoins. En effet, cette présentation n'est pas des plus abordable, mais peut être que les débutants ne sont pas concernés, dans quel cas il faudrait un minimum de notions. Peut-être que I'm_HERE pourrait nous en dire plus sur le public visé. Et enfin le deuxième point, c'est que sa place, une foi revue, est sans nul doute dans un tutoriel. Bonne continuation à tous.
__________________
.NAS Server Project: ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Contribution: Nom / Logo ► Identification des besoins ► Le groupe de travail ICMO ► Demande d'inscription ICMO |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com