« DOS/Set » : différence entre les versions

Contenu supprimé Contenu ajouté
+ les commandes de suppression des zéros ne fonctionnent pas avec les nombre ayant des zéros internes (ex: 1001, 2009, ...)
Ligne 14 :
 
=== Affectation de variables ===
Les variables sont trestrès utiles dans un environnement de script ou batch (un programme).
 
==== Affectation de chaînes ====
Ligne 20 :
SET X=unechainedecaractère
la variable X vient d'être initialisée avec la valeur "unechainedecaractère".<br/>
Chaque instantiationinstanciation de la console (on peut executerexécuter cmd.exe plusieurs fois simultanément sous NTWindows) possède de son propre environnement (une zone mémoire) dans lequel sont stockées toutes les variables.
 
@echo off
Ligne 26 :
echo.
'''SET''' monnom=byby
echo monnom :%monnom%
rem permet d'initialiser et d'afficher la variable monnom sur la console à la valeur "byby".
'''SET''' monprenom=titi
echo monprenom :%monprenom% monnom :%monnom%
'''SET''' nomcomplet=%monprenom% %monnom%
echo nomcomplet :%nomcomplet%
rem voilà la concaténation de deux variables en une seule
pause
 
 
==== Affectation d'expressions numériques ====
Ligne 45 ⟶ 46 :
( ) + - * / % << >> & ^ ,
 
Les opérandes constituant l'expression à calculer peuvent être écrites en notation décimale, hexadécimale ou octale.
Cela peut générer des erreurs de calculs ou des messages d'erreur pas toujours troptrès claireclairs.
 
SET /A A=1+0099 ou SET /A A=1+0999 ou SET /A A=1+0009 retourne un message d'erreur
SET /A A=00091+0099
Retourne un message d'erreur :
Nombre non valide. Les constantes numériques doivent être soit décimales (17), soit hexadécimales (0x11), soit octales (021).
Tout nombre commençant par zéro (tel 0099) est considéré comme octal (chiffre de 0 à 7 inclus). Donc 8 et 9 ne peuvent apparaitre dans un tel nombre.
SET /A A=1+012 retourne 11 (ce qui est juste mais en octal pas en décimale)
alors que
SET /A A=1+99 est bien interprété comme une notation décimale explicite.
 
La commande correcte est la suivante :
Pour transformer une variable caractère qui est en fait un nombre décimale avec un format incluant des 0 non significatif (exemple 0099), il possible d'effectuer le traitement suivant sur les opérandes avant le calcul.
SET /A A=1+99
SET A=0009
FOR /L %i IN (1,1,3) DO set A=%A:0=%
(pour transformer 0009 en 9 ma boucle ne fait que trois itérations car nous n'auront jamais plus de trois 0 non significatif)
 
==== Affectation utilisateur ====
Ligne 68 ⟶ 65 :
=== Suppression de variables ===
'''SET''' monnom=
suprimeraSupprimera la variable "monnom" de l'environnement (la mémoire), en d'autres termes cela libereralibèrera l'espace mémoire occupé par la variable.
 
=== Manipulation de variables ===
Ligne 77 ⟶ 74 :
ECHO %monnom%
 
Il est possible de ne récupérer qu'une partie de la chaîne de caractère contenue dans une variable d'environnement. Par exemple :
ECHO %monnom:~5%
Ceci récupère la chaîne à partir du caractère 5 jusqu'à la fin
 
 
ECHO %monnom:~5,2%
Ceci récupère la chaîne à partir du caractère 5 jusqu'aux 2 caractères suivants.
 
Si la valeur indiquée est négative, cela signifie un indexage à partir de la fin de la chaine :
ECHO %monnom:~2,-2%
Ceci récupère la chaîne du 2ème caractère en partant du début jusqu'au 2ème caractère en partant de la fin.
 
Il est possible de rechercher un chaine dans une variable et de la remplacer par une autre :
 
 
Il est possible de rechercher un chaine dans une variable et de la remplacer par une autre
 
'''Syntaxe : '''
SET chaine_resultante=%chaine_a_traiter:chaine_recherché=[chaine_de_remplacement]%
 
Ainsi avec la commande suivante, jeil peuxest possible d'éliminer l'extension .bat du nom d'un fichier :
set A="monfichierbatch.bat"
set A=%A:.bat=%
Je peux aussi éliminer les 0 nom significatif d'un nombre par cette technique à l'aide d'une simple boucle
set mon_nombre=00001.299
FOR /L %i IN (1,1,4) DO set mon_nombre=%mon_nombre:0=%
echo %mon_nombre%
 
=== Variables prédéfinies ===