i

commande SET


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.


%HIGHESTNUMANODENUMBER% - se d‚veloppe en num‚ro de noud NUMA le plus ‚lev‚

                            sur cet ordinateur.