−Table des matières
Batch
Utiliser l'affichage
- Activer/désactiver l'affichage
rem Activation echo on rem Désactivation @echo off
- Afficher une ligne vide
rem Première solution echo. rem Deuxième solution echo[ rem Troisième solution (non recommandée) rem Utiliser un caractère ASCII blanc (ALT+255)
Utiliser les pipes ("|")
Elles fonctionnent comme avec Bash. Elles permettent de rediriger la sortie standard d'une commande vers l'entrée standard d'une autre.
rem Rechercher la chaîne "mysql" dans tous les fichiers PHP dir /S /B *.php | findstr /I /M /R /F:/ mysql
Dans le cas d'une utilisation dans une boucle for
, il faut penser à l'échapper sous peine d'avoir une erreur.
rem L'exécution de cette syntaxe retournera l'exception "| was unexpected at this time" for /F %%I in ('dir /S /B *.php | findstr /I /M /R /F:/ mysql') do ( echo %%I ) rem Il faut échapper le pipe avec le caractère "^" for /F %%I in ('dir /S /B *.php ^| findstr /I /M /R /F:/ mysql') do ( echo %%I )
Boucle for
Utilisation
- Avec une série de valeurs
@echo off for %%O in (1 2 3) do ( rem Faire quelque chose )
- Avec une série de fichiers
rem Les fichiers doivent évidemment exister pour pouvoir être manipulés @echo off for /F %%O in (<fichier1> <fichier2> <fichier3>) do ( rem Faire quelque chose )
- Avec la sortie d'une commande
@echo off for /F %%O in ('dir') do ( rem Faire quelque chose )
- En utilisant les jetons et les délimiteurs
@echo off rem Extraction de la date du système rem Attention à la commande date qui renvoie un espace en fin de chaîne for /F "tokens=1-3 delims=/ " %%A in ('date /T') do set YYYYMMDD=%%C%%B%%A
Expansion des variables
Dans une boucle for
, il est normal de vouloir travailler avec des variables. Mais la manière d'interpréter le code est, de prime abord, peu intuitive. Sans connaître cette manière de faire, on va être tenté d'écrire ce genre de code :
rem La sortie sera, contre toute attente : rem 3 rem 3 rem 3 @echo off for %%O in (1 2 3) do ( set OPTION=%%O echo %OPTION% )
C'est dû au fait que l'expansion des variables est réalisée avant l'exécution de la boucle for
et non pas pendant. Il est possible de passer outre cette limitation en utilisant la syntaxe suivante :
rem La sortie sera : rem 1 rem 2 rem 3 @echo off setlocal EnableDelayedExpansion for %%O in (1 2 3) do ( set OPTION=%%O echo !OPTION! )
Il est possible de modifier les variables lors de leur expansion grâce à certains marqueurs :
Marqueur | Action |
---|---|
%~I | enlève les guillements (“) autour de %I |
%~fI | convertit %I en un chemin qualifié complet |
%~dI | convertit %I en une lettre de disque |
%~pI | convertit %I en un chemin seulement |
%~nI | convertit %I en nom de fichier seulement |
%~xI | convertit %I en extension seulement |
%~sI | convertit %I en un chemin contenant seulement des noms courts |
%~aI | convertit %I en attributs du fichier |
%~tI | convertit %I en date et heure du fichier |
%~zI | convertit %I en taille du fichier |
%~$PATH:I | recherche dans la liste des répertoires définis dans la variable d'environnement PATH et convertit %I en un chemin qualifié complet de la première occurence trouvée. Si le nom de la variable d'environnement n'est pas défini, alors %I est convertit en chaîne vide. |
Il est possible de combiner ces marqueurs. Par exemple :
rem Convertit %I en lettre de disque et chemin %~dpI rem Convertit %I en nom de fichier et extension %~nxI rem Convertit %I en chemin complet avec noms courts %~fsI
Utiliser un tableau
Les tableaux n'existent pas. Cependant, il est possible de détourner l'usage des variables pour qu'elles fonctionnent comme un tableau associatif.
En effet, si l'on cré des variables commençant de la même façon, il est possible de les récupérer et de les lire séquentiellement. Pour une utilisation et une compréhension aisée, il est recommandé de nommer ces variables __<nom du tableau>.<nom de l'index>
. Par exemple :
rem Affectation des variables set __TYPE.1=php set __TYPE.2=yml set __TYPE.3=ini rem Affichage des variables set __TYPE. rem La commande précédente affiche : rem __TYPE.1=php rem __TYPE.2=yml rem __TYPE.3=ini
De cette manière, il est possible de boucler sur les variables retournées et d'en extraire leur valeur. Par exemple :
rem En utilisant les variables définies précédemment for /F "tokens=2* delims==" %%I in ('set __TYPE.') do ( echo %%I ) rem La commande précédente affiche : rem php rem yml rem ini
Pour plus d'information, voir ici.
Erreurs
The system cannot find the batch label specified
: c'est probablement dù au caractère de fin de ligne qui n'est pas celui attendu 1)| was unexpected at this time
: c'est probablement dù au pipe qui n'est pas échappé dans une bouclefor
(voir l'utilisation des pipes)
Divers
- Tester l'existence d'un répertoire
if exist %VAR%\NUL echo C'est un répertoire
- Lire l'ensemble des paramètres
for %%O in (%*) do ( rem Faire quelque chose )