TexteTop
Communauté

Login Membres: 4114


Menu

Liens



flecheCommande SET

Type: system

Fonction: Affiche, définit ou supprime des variables d'environnement Windows.

OS: vista,xp

Detail: Affiche, fixe ou supprime des variables d'environnement de cmd.exe.

SET [variable=[chaîne]]

variable Nom de la variable d'environnement.
chaîne Chaîne de caractères à affecter à la variable.

SET sans paramètres affiche les variables d'environnement définies.

Si les extensions de commandes sont activées, SET est modifié comme suit :

La commande SET appelée avec un nom de variable seulement, sans signe égal
ou valeur, affiche la valeur de toutes les variables dont le préfixe correspond
au nom donné à la commande SET. Par exemple :

SET P

affiche toutes les variables qui commence avec la lettre 'P'

La commande SET fixe la valeur ERRORLEVEL à 1 si le nom de variable n'est
pas trouvé dans l'environnement en cours.

La commande SET n'autorise pas qu'un signe égal (=) fasse partie du nom d'une
variable.

Deux nouvelles options ont été ajoutées à la commande SET :

SET /A expression
SET /P variable=[ChaîneInvite]

L'option /A spécifie que la chaîne à droite du signe égal est une
expression numérique qui est évaluée. L'évaluation de l'expression est assez
simple et prend en charge les opérations suivantes dans l'ordre décroissant
de préséance :

() - groupement
! ~ - - opérateurs unaires
* / % - opérateurs arithmétiques
+ - - opérateurs arithmétiques
<< >> - décalage logique
& - ET au niveau du bit
^ - OU exclusif au niveau du bit
| - OU au niveau du bit
= *= /= %= += -= - attribution
&= ^= |= <<= >>=
, - séparateur d'expression

Si vous utilisez des opérateurs logiques ou des nombres, vous devez mettre
l'expression entre guillemets. Toute chaîne non numérique dans l'expression est
traitée comme une variable d'environnement dont les valeurs sont converties en
nombres avant d'être utilisées. Si un nom de variable d'environnement est
spécifié mais n'est pas défini dans l'environnement en cours, alors la valeur
zéro est utilisée. Cela vous permet de faire des opérations avec les valeurs
d'une variable d'environnement sans avoir à entrer des signes % pour obtenir
ces valeurs. Si SET /A est exécuté à partir de la ligne de commande en dehors
d'un script de commande, alors la valeur finale de l'expression est affichée.
L'opérateur d'assignation requiert un nom de variable d'environnement à
gauche du cet opérateur. Les valeurs numériques sont des nombres décimaux, à
moins qu'ils ne soient préfixés par 0x pour les valeurs hexadécimales et 0
pour la notation octale. Donc 0x12 est identique à 18 et
à 022. Notez que la notation octale peut être confuse : 08 et 09 ne sont pas
valides car 8 et 9 ne sont pas des nombres valides en notation octale.

L'option /P vous permet de fixer la valeur d'une variable avec une ligne
entrée par l'utilisateur. Elle affiche la chaîne ChaîneInvite spécifiée
avant de lire la ligne entrée. La ChaîneInvite peut être vide.

La substitution de la variable d'environnement a été améliorée comme suit :

%PATH:ch1=ch2%

développe la variable d'environnement PATH, remplaçant chaque
occurrence de "ch1" dans le résultat développé par "ch2". "ch2" peut être
une chaîne vide pour supprimer toutes les occurrences de "ch1" de la sortie
développée. "ch1" peut commencer par un astérisque, auquel cas
la commande traitera la chaîne à partir du début et jusqu'à la première
occurrence du reste de ch1.

Vous pouvez aussi spécifier des sous-chaînes pour une expression.

%PATH:~10,5%

développe la variable d'environnement PATH et utilise seulement 5
caractères à partir du onzième (décalage de 10) dans le résultat sous forme
développée. Si la longueur n'est pas spécifiée, tout le reste de la valeur
de la variable est traité. Si l'une des valeurs (décalage ou longueur)
est négative, alors le nombre utilisé est la longueur de la valeur de la
variable d'environnement ajoutée au décalage ou à la longueur donné.

%PATH:~-10%

extrait les 10 derniers caractères de la variable PATH.

%PATH:~0,-2%

extrait tous les caractères sauf les deux derniers de la variable PATH.

Enfin, la prise en charge de l'expansion retardée de variables d'environnement
a été ajoutée. Cette prise en charge est toujours désactivée par défaut, mais
peut être activée/désactivée via l'option de ligne de commande /V dans CMD.EXE.
Voir CMD /?

La prise en charge de l'expansion retardée de variables d'environnement est
utile pour contourner les limites de l'expansion en cours qui se produit à la
lecture d'une ligne de texte et non à son exécution. L'exemple suivant montre
le problème causé par l'expansion immédiate de variables :

set VAR=avant
if "%VAR%" == "avant" (
set VAR=après
if "%VAR%" == "après" @echo Cela marche si vous lisez ce message
)

n'affichera jamais le message car la variable %VAR% présente dans les deux
instances de IF est remplacée à la lecture de la première instance de IF, étant
donné que le corps de IF, instruction composée, est logiquement inclus. Donc le
IF compris dans l'instance compare "avant" avec "après" et il n'y aura jamais
égalité. De même, l'exemple suivant ne fonctionnera pas comme prévu :

set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%

car la liste des fichiers du répertoire ne sera PAS créée, et en fait la
variable LIST prendra le valeur du dernier fichier trouvé. Une fois encore
cela est dû au fait que %LIST% n'est étendu qu'une fois, lorsque FOR est
lu et à ce stade la variable LIST est vide. Donc la boucle FOR exécutée est :

for %i in (*) do set LIST= %i

qui donne toujours à LIST la valeur du dernier fichier trouvé.

L'expansion retardée de variables d'environnement vous permet d'utiliser un
autre caractère (le point d'exclamation) afin d'étendre les variables
d'environnement durant l'exécution. Si l'expansion retardée de variables est
activée, les exemples ci-dessus peuvent être écrits comme suit afin de
fonctionner comme vous le souhaitez :

set VAR=avant
if "%VAR%" == "avant" (
set VAR=après
if "!VAR!" == "après" @echo Cela marche si vous lisez ce message
)

set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%

Si les extensions de commandes sont activées, alors plusieurs variables
d'environnement dynamiques peuvent être développées sans apparaître dans la
liste de variables affichée par SET. Les valeurs de ces variables sont
calculées dynamiquement chaque fois que la variable est développée. Si
l'utilisateur définit explicitement une variable avec un de ces noms, alors
cette définition écrase la définition dynamique décrite ci-dessous :

%CD% - se développe en la chaîne du répertoire en cours.

%DATE% - se développe en la date actuelle en utilisant le même
format que la commande DATE.

%TIME% - se développe en l'heure en cours en utilisant le même
format que la commande TIME.

%RANDOM% - se développe en un nombre aléatoire compris entre 0 et 32767.

%ERRORLEVEL% - se développe en la valeur en cours de ERRORLEVEL

%CMDEXTVERSION% - se développe en le numéro de version des
extensions du processeur de commande en cours.

%CMDCMDLINE% - se développe en la ligne de commande originale
qui a appelé le processeur de commande.