Connexion

Récupérer mon mot de passe

Qui est en ligne ?
Il y a en tout 1 utilisateur en ligne :: 0 Enregistré, 0 Invisible et 1 Invité

Aucun

Le record du nombre d'utilisateurs en ligne est de 21 le Jeu 17 Oct 2013, 13:40
Derniers sujets
Flux RSS



Flag Counter
Partenaires

[Tutoriel]Apprendre le Batch !

Voir le sujet précédent Voir le sujet suivant Aller en bas

[Tutoriel]Apprendre le Batch !

Message par Invité le Dim 16 Juin 2013, 13:57

Bonjour/Bonsoir ami(e)s programmeurs !


Si vous êtes ici, c'est pour une de ces raisons:


-Vous avez décidé de débuter en programmation.
-Vous avez décidé d'apprendre un nouveau langage.
-Vous voulez approfondir vos connaissances en Batch.


Alors c'est partit !


Avant-Propos:


Ce tutoriel n'est qu'un tutoriel comme les autres. Il a pour but de vous initier à la programmation en Batch.



Introduction, Variables...:

Introduction:

Un programme Batch (Traitement par lots), est un fichier texte contenant plusieurs lignes. Ces lignes sont les commandes DOS. Le fichier est enregistré avec l'extension ".bat" ou ".cmd". Ces commandes peuvent être tapées également dans l'invite de commandes, mais un programme Batch permettra d'automatiser les taches (une boucle par exemple). Tapez HELP ou une commande suivie de "/?"  (Ex: ECHO /?) pour afficher l'aide.

Donc pour créer un Batch, il ne vous faut qu'un simple éditeur de texte, tel que Bloc-Note, mais vous pouvez également utiliser Notepad++ qui est plus pratique grâce à la coloration syntaxique pour différents langages, dont le Batch. (disponible ici: http://www.clubic.com/telecharger-fiche9567-notepad.html)

Votre premier Batch:


Ce premier Batch consistera à afficher le traditionnelle "Hello World !" dans la console.
Tapez ceci dans votre éditeur de texte et enregistrez avec l'extension ".bat":

Code:
@ECHO OFF
ECHO Hello World !
PAUSE

Explications:

La commande "@ECHO OFF" permet de désactiver l'affichage de la commande effectué (si nous ne l'avions pas mis, se serai comme ci nous avions tapé ces commandes dans l'invite de commandes).

La commande "ECHO" affiche un message dans l'output défini. (à l'écran par defaut).

Edit: Complement sur les Output en BAT. -> SachaDee

Par defaut vous envoyez l'entrez de la commande (STDIN) de votre clavier vers Cmd.exe. Et ensuite Cmd.exe envoie la sortie de la commande  (STDOUT) dans la console.

Vous pouvez utiliser les opèrateurs de redirection pour rediriger le sens des input et output de leur location par defaut vers d'autre endroit.

Le tableau suivant décrit les opérateurs que vous pouvez utiliser pour rediriger le courant des entrés et sorties

>Envoie l'output d'une commande vers un fichier ou un péripherique (imprimante). A la place de l'ecran.
<Lit l'input d'une commande depuis un fichier, Au lieu du clavier.
>>Joint l'output d'une commande à la fin d'unfichier sans supprimer les informations déjä existante dans le fichiert.
>&Permet de remplacer les données d'entrée d'un handle par les données de sortie d'un autre handle.
<&Permet de lire les données d'entrée dans un handle et de les écrire en tant que données de sortie dans un autre handle
|
Permet de lire les données obtenues en sortie d'une commande et de les écrire en tant que données d'entrée dans une autre commande. Ce symbole est appelé une barre verticale.
Plus de détail sur le fonctionnements des opérateurs de direction et des handles :


[spoiler "EXEMPLE :"]

Le tableau suivant indique les handles disponibles.
[th]Handle[/th][th]Équivalent numérique du handle[/th][th]Description[/th]
STDIN0Entrée clavier
STDOUT1Sortie vers la fenêtre d'invite de commandes
STDERR2Sortie des erreurs sur la fenêtre d'invite de commandes
UNDEFINED3-9Ces handles sont définis individuellement par l'application et sont particuliers à chaque outil.
Les numéros de zéro à neuf désignent les 10 premiers handles. Vous pouvez utiliser l'exécutable Cmd.exe pour lancer un programme et rediriger l'un de ces 10 premiers handles définis pour ce programme. Pour spécifier le handle que vous voulez utiliser, tapez son numéro avant l'opérateur de redirection. Si vous ne définissez aucun handle, l'opérateur de redirection < par défaut en entrée est zéro (0) et l'opérateur de redirection > par défaut en sortie est un (1). Après avoir tapé l'opérateur < ou >, vous devez spécifier l'emplacement à partir duquel vous voulez lire ou écrire les données. Vous pouvez spécifier un nom de fichier ou un autre handle existant.
Pour demander la redirection vers des handles existants, utilisez le et commercial (&) suivi du numéro du handle vers lequel effectuer la redirection (par exemple, &handle#). Dans l'exemple suivant, la commande permet de rediriger le handle 2 (STDERR) vers le handle 1 (STDOUT) :
1<&2
Duplication des handles
L'opérateur de redirection & permet de dupliquer les sorties ou les entrées depuis un handle vers un autre. Par exemple, pour écrire le résultat de la commande dir dans le fichier Fichier.txt et écrire les erreurs dans le fichier Fichier.txt, tapez :
dir>c:\fichier.txt 2>&1
Lorsque vous dupliquez un handle, vous dupliquez toutes les caractéristiques du handle d'origine. Par exemple, si un handle est caractérisé par des accès en écriture seule, tous les handles dupliqués à partir de ce handle disposent également d'accès en écriture seule. Il est impossible de dupliquer un handle disposant d'accès en lecture seule dans un handle disposant d'accès en écriture seule.
Redirection des entrées de commandes (<)
Pour rediriger une entrée de commande à partir du clavier vers un fichier ou un périphérique, utilisez l'opérateur <. Par exemple, pour récupérer l'entrée de commande pour la commande sort à partir du fichier Fichier.txt, tapez :
sort<fichier.txt
Le contenu du fichier Fichier.txt s'affiche dans la fenêtre d'invite de commandes sous forme de liste classée par ordre alphabétique.
L'opérateur < permet d'ouvrir le fichier spécifié avec un accès en lecture seule. Par conséquent, si vous utilisez cet opérateur, vous ne pouvez pas modifier le fichier. Par exemple, si vous lancez un programme avec <&2, tous les essais de lecture du handle 0 échouent car le handle 2 a été à l'origine ouvert avec un accès en écriture seule.
Remarque

  • Le numéro zéro est le numéro du handle par défaut utilisé avec l'opérateur de redirection < en entrée.

Redirection des sorties de commandes (>)
Pratiquement toutes les commandes affichent en sortie des données sur la fenêtre d'invite de commandes. Même les commandes qui transférent ces données vers un lecteur de disque ou vers une imprimante affichent également des messages et des invites sur la fenêtre d'invite de commandes.
Pour rediriger les données obtenues en sortie d'une commande à partir de la fenêtre d'invite de commandes vers un fichier ou un périphérique, utilisez l'opérateur >. Vous pouvez utiliser cet opérateur avec la plupart des commandes. Par exemple, pour rediriger les résultats de la commande dir vers le fichier ListRép.txt, tapez :
dir>listrep.txt
Si le fichier ListRép.txt n'existe pas, le programme Cmd.exe le crée. Si ce fichier existe, le programme remplace les données que ce fichier contient déjà par les données résultant de la commande dir.
Pour lancer la commande netsh routing dump et envoyer le résultat dans le fichier Route.cfg, tapez :
netsh routing dump>c:\route.cfg
L'opérateur > permet d'ouvrir le fichier spécifié avec un accès en écriture seule. Par conséquent, si vous utilisez cet opérateur, vous ne pouvez pas lire le fichier. Par exemple, si vous lancez un programme avec les opérateurs de redirection >&0, tous les essais d'écriture dans le handle 1 échouent car le handle 0 a été à l'origine ouvert avec un accès en lecture seule.
Remarque

  • Le numéro un est le numéro du handle utilisé par défaut avec l'opérateur de redirection > des données en sortie.

Utilisation de l'opérateur <& pour rediriger les données en entrée et les dupliquer
Pour utiliser l'opérateur <& de redirection des données en entrée, le fichier que vous spécifiez doit déjà exister. Si le fichier d'entrées existe, le programme Cmd.exe l'ouvre en lecture seule et transmet les caractères qu'il contient à la commande qui les utilise en tant que données d'entrée tout comme s'ils été avaient saisis à partir du clavier. Si vous indiquez un handle, le programme Cmd.exe le duplique dans le handle existant dans le système.
Par exemple, pour ouvrir le fichier Fichier.txt en tant que source à partir de laquelle lire les entrées et les transmettre au handle 0 (STDIN), tapez :
<fichier.txt
Pour ouvrir le Fichier.txt, trier le contenu et afficher le résultat dans la fenêtre d'invite de commandes (STDOUT), tapez :
sort<fichier.txt
Pour rechercher le Fichier.txt, puis rediriger le handle 1 (STDOUT) et le handle 2 (STDERR) vers le fichier Recherche.txt, tapez :
findfile fichier.txt>recherche.txt 2<&1
Pour dupliquer le handle 3, défini par un utilisateur, en tant que source de lecture des entrées vers le handle 0 (STDIN), tapez :
<&3
Utilisation de l'opérateur >& pour rediriger les données en sortie et les dupliquer
Si vous redirigez les données en sortie vers un fichier et si vous spécifiez un fichier existant, le programme Cmd ouvre ce fichier en écriture seule et remplace le contenu existant. Si vous indiquez un handle, le programme Cmd.exe duplique le fichier dans le handle existant.
Pour dupliquer le handle 3 défini par l'utilisateur dans le handle 1, tapez :
>&3
Pour rediriger toutes les données en sortie, y compris le handle 2 (STDERR), à l'aide de la commande ipconfig vers le handle 1 (STDOUT), puis les rediriger vers le fichier Sortie.log, tapez :
ipconfig.exe>>sortie.log 2>&1
Utilisation de l'opérateur de redirection >> pour ajouter des données
Pour ajouter les données obtenues en sortie d'une commande à la fin d'un fichier sans perdre les données qui s'y trouvent déjà, utilisez un double signe supérieur à (>>). Dans l'exemple suivant, la liste de répertoires obtenue par la commande dir est ajoutée dans le fichier ListRép.txt :
dir>>listrep.txt
Pour ajouter les données obtenues par la commande netstat à la fin du fichier Tcpinfo.txt, tapez :
netstat>>tcpinfo.txt
Utilisation de la barre verticale (|)
L'opérateur (|) permet de récupérer les données obtenues en sortie (par défaut, STDOUT) d'une commande et de les rediriger en entrée (par défaut STDIN) d'une autre commande. La commande suivante permet par exemple, de trier le contenu d'un répertoire :
dir | sort
Dans cet exemple, les deux commandes sont tout d'abord exécutées simultanément, puis, la commande sort s'interrompt jusqu'à réception des données obtenues en sortie de la commande dir. La commande sort utilise en entrée les données obtenues par la commande dir et transmet ses résultats au handle 1 (STDOUT).
Combinaison de commandes et d'opérateurs de redirection
Vous pouvez créer des commandes personnalisées en combinant des commandes de filtre avec d'autres commandes et d'autres fichiers. Pour stocker les noms de fichiers qui contiennent la chaîne « LOG », utilisez par exemple, la commande suivante :
dir /b | find "LOG" > loglist.txt
Les résultats de la commande dir sont dirigés via la commande de filtre find. Les noms de fichier qui contiennent la chaîne « LOG » sont stockés sous forme de liste (par exemple, NetshConfig.log, Logdat.svd et Monlog.bat) dans le fichier ListLog.txt.
Pour utiliser plusieurs filtres dans la même commande, séparez les filtres par le signe |. La commande suivante, par exemple, permet d'effectuer une recherche dans chaque répertoire du lecteur C, de trouver les noms de fichier contenant la chaîne « LOG » et de les afficher à raison d'un écran à la fois.
dir c:\ /s /b | find "LOG" | more
En utilisant le signe |, Cmd.exe transmet les résultats de la commande dir via la commande de filtre find. La commande find permet de sélectionner uniquement les noms de fichier contenant la chaîne « LOG ». La commande more affiche ensuite, écran par écran, les noms des fichiers sélectionnés par la commande find. Pour plus d'informations sur les commandes de filtre, consultez




La commande "PAUSE" permet d'arrêter l'exécution du programme jusqu'à ce que l'utilisateur presse une touche. Vous voyez qu'il y a marqué "Appuyez sur une touche pour continuer...". Pour cacher ce message, remplacez "PAUSE" par "PAUSE>NUL".

Nota-Bene:


DOS ne fait pas la différence entre les majuscules/minuscules. Nous aurions pu très bien mettre ECHO, Echo ou EcHo.

Attention, DOS ne reconnais pas les caractères spéciales tel que les accents ! Il vous affichera des symboles blizzard.

Donc, pour afficher des caractères spéciaux, mettez ça à la place:

é=‚       è=Š       à=…      ç=‡      ê=ˆ      â=ƒ     û=–     î=Œ     ù=—


(Copiez/Collez bien le caractère car il y a des "pièges". Par exemple, le "‚" du "é" N'EST PAS UNE VIRGULE !)

Autres commandes de bases:


ECHO. (Saute une ligne)

COLOR [Fond][Texte] (Change les couleurs. Taper COLOR /? dans l'invite de commandes pour voir les couleurs.

Ex: color F8

CLS (Vide l'écran actuel)

TITLE (Donne un titre à la fenêtre)

Ex : Title BBat c'est le pied

MODE [Colonnes],[Lignes] (Change la taille de la console)

ex : MODE 25,45

Les commentaires:


Prenez les bonnes habitudes dès le départ, mettez des commentaires dans vos Batch ! Imaginez une autre personne devant votre code en essayant de comprendre, ou même vous bout d'un mois. En plus, c'est simple et rapide ! Pour cela, on utilise la commande "REM".

Code:
REM Ceci est un commentaire

REM peut également être remplacé par "::".

Les variables:

Une variable est un espace de stockage contenant une valeur (lettres, chiffres...)

Pour déclarer une nouvelle variable, on utilise la commande SET.
(Tapez "SET" dans l'invite de commande pour voir la liste des variables)

Syntaxe: SET [NOM]=[VALEUR]

Pour afficher la valeur d'une variable, faite:

ECHO %[NOM]%

Exemple concret:

Nous allons afficher le message "Hello World !" qui sera contenu dans la variable TEXT:

Code:
@ECHO OFF
SET TEXT=Hello World !
ECHO %TEXT%
PAUSE>NUL

Alors, c'est simple non ?

Saisie d'une valeur par l'utilisateur:


Il est possible de demander à l'utilisateur de saisir la valeur d'une variable grâce à "SET /P".

Syntaxe: SET /P [VARIABLE]=[TEXTE]

Opérations:


Il est également possible de faire des opérations grâce à "SET /A".
LE BATCH NE GÈRE PAS LES NOMBRES DÉCIMAUX !

Syntaxe: SET /A [VARIABLE]=[VALEUR1][OPÉRATEUR][VALEUR2]

SET /A [VARIABLE]=[VARIABLE][OPÉRATEUR]1 peut être écris:
SET /A [VARIABLE]+=1

Exercice:

Nous allons demander à l'utilisateur d'entrer deux valeurs, les additionner, et afficher le résultat. Ne trichez pas !


Correction:

Correction:

Code:
@ECHO OFF
SET /P A=Entrez A:
SET /P B=Entrez B:
Set /A C=%A%+%B%
ECHO %A% + %B% = %C%
PAUSE>NUL


composition d'une variable:


Nous allons maintenant voir comment afficher seulement une partie d'une variable.

Code:
SET TEXT=Hello World !
ECHO %TEXT:~0,5%

Testez ce code.
En effet, seulement "Hello" est affiché à l'écran.

Explication:


On peux choisir à partir de combien de caractère, et le nombre de caractère d'une variable à afficher.

Syntaxe: ECHO %[NOM]:~[DÉBUT],[NOMBRE]%

Si nous avions fait:

Code:
SET TEXT=Hello World !
ECHO %TEXT:~6,7%

Seulement "World !" aurait été affiché.
Il est également possible d'afficher une partie précise d'une variable avec FOR, que nous verront plus tard...

Substitution d'un caractère dans une variable:


Une substitution, c'est le remplacement de quelque chose par une autre.


En Batch, il est possible de faire une substitution de caractères dans une variable.

Testez ce code:
Code:
SET TEXT=HI
SET TEXT=%TEXT:H=Y%
SET TEXT=%TEXT:I=O%

Le H est changé en Y et le I est changé en O.
C'est sa, une substitution.

Syntaxe: SET [NOM]=%[NOM]:[CARACTÈRE]=[SUBSTITUTION]%
[/spoiler]


Conditions, Boucles...:

Les conditions:


Une condition, c'est savoir quoi faire en fonction de.


En batch, on utilise les conditions:

IF (SI)
IF NOT (SI NON/N'EST)
ELSE (SINON)

Pour qu'une condition fonctionne, il faut des comparant:


EQU (ÉGALE A)
NEQ (N'EST PAS ÉGALE A)
LSS (PLUS PETIT QUE)
GTR (PLUS GRAND QUE)
LEQ (PLUS PETIT OU ÉGALE A)
GEG (PLUS GRAND OU ÉGALE A)

Une variable à tester.
Et l'action à effectuer.

Syntaxe: [CONDITION] "%[VARIABLE]%" [COMPARANT] [ACTION]

Syntaxe avec plusieurs actions:

[CONDITION] "%[VARIABLE]%" [COMPARANT] (
[ACTION]
)

Syntaxe avec ELSE:

[CONDITION] "%[VARIABLE]%" [COMPARANT] [ACTION] ELSE ([ACTION])

Syntaxe avec ELSE sur plusieurs lignes:

[CONDITION] "%[VARIABLE]%" [COMPARANT] (
[ACTION]
) ELSE (
[ACTION]
)

Les boucles:


Une boucle, c'est le fais de répéter plusieurs fois les même instructions en fonction de la condition.


Une boucle commence par une étiquette (Ex: :ETIQUETTE). Pour allez à cette étiquette, on utilise la commande GOTO [ÉTIQUETTE]

TP: Jeu du Plus/Moins:


Bon, après la théorie, passons à la pratique (en autonomie).
Le principe du jeu du Plus/Moins est de deviner un nombre choisi au hasard compris entre 0 et 100.
L'utilisateur entre un nombre. Si c'est plus, on le dit et on rejoue. Idem si c'est moins. Si c'est égale, on sort de la boucle et on dit à l'utilisateur qu'il a gagné et on lui propose de rejouer.

Oui je sais, vous ne savez pas générer un nombre au hasard, donc je vais vous expliquer:

Pour cela, on utilise la commande %RANDOM%. Pour faire un %RANDOM% entre 0 et 100, on utilise le modulo, donc avec SET /A:

SET /A NOMBREMYSTERE=%RANDOM%%%[NombreMax]

Dans notre cas: SET /A NOMBREMYSTERE=%RANDOM%%%100.

Voila, vous avez 10 minutes (Ne trichez pas !) Wink

Correction:


Correction:
STOP, donnez moi vos copie ^^ !
Et maintenant, la correction commentée:

Code:
@ECHO OFF
REM On donne un titre a notre fenêtre.
TITLE Jeu du PLUS/MOINS
:DEBUT
CLS
ECHO ** Jeu du Plus/Moins **
REM On initialise le nombre mystère entre 0 et 100.
SET /A NBMYSTERE=%RANDOM%%%100
REM On saute une ligne.
ECHO.
REM On rentre dans la boucle "DEMANDE".
:DEMANDE
REM On demande à l'utilisateur d'entrer un nombre.
SET /P PROPOSITION=Entrez un nombre:
REM Si ce nombre est plus petit, on l'affiche et on retourne dans la boucle demande.
IF "%PROPOSITION%" LSS "%NBMYSTERE%" (
ECHO C'est plus !
ECHO.
REM On retourne dans la boucle.
GOTO DEMANDE
)
REM Si ce nombre est plus grand, on l'affiche et on retourne dans la boucle demande.
IF "%PROPOSITION%" GTR "%NBMYSTERE%" (
ECHO C'est moins !
ECHO.
REM On retourne dans la boucle.
GOTO DEMANDE
)
REM Si ce nombre est égale, on l'affiche, on sort de la boucle et on demande a l'utilisateur si il veut rejouer.
IF "%PROPOSITION%" EQU "%NBMYSTERE%" GOTO GAGNE
:GAGNE
ECHO.
ECHO Bravo, vous avez trouv‚ le nombre mystŠre !
ECHO.
SET /P CHOIX=Voulez-vous rejouer ? (O/N):
REM Si OUI, retourner dans la  boucle de départ (DEBUT)
IF /I "%CHOIX%" EQU "O" GOTO DEBUT
REM Si NON, quitter
IF /I "%CHOIX%" EQU "N" EXIT

Cette correction n'est pas LA correction. L'important est le résultat final.



Prochain chapitre: La boucle FOR.

:albino:

Invité
Invité


Revenir en haut Aller en bas

Re: [Tutoriel]Apprendre le Batch !

Message par Isalou le Jeu 06 Mar 2014, 18:02

Merci :albino: pour ce tutoriel pour les débutant c'est super.
Je connaissais pas la substitution.

Isalou
Nouveau
Nouveau

Mensagens : 5
Data de inscrição : 28/02/2014

Revenir en haut Aller en bas

Re: [Tutoriel]Apprendre le Batch !

Message par Dylan Gadacha le Ven 07 Mar 2014, 23:52

De rien (C'étais mon ancien compte, je suis l'auteur de ce tutoriel) !
Content que vous ayez appris des choses Smile
Au plaisir.

_________________
avatar
Dylan Gadacha
EQUIPE BBAT
EQUIPE BBAT

Mensagens : 106
Data de inscrição : 24/10/2013
Idade : 18

Revenir en haut Aller en bas

Re: [Tutoriel]Apprendre le Batch !

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum