IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

[HOWTO] Les variables


Sujet :

Scripts/Batch

  1. #1
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut [HOWTO] Les variables
    un grand merci à Karzoff pour sa relecture et sa mise en page


    Salut,

    J'espère que ce petit HowTo aidera quelqu'un... Il faut noter que je n'ai parlé ni des paramètres, ni des variables de la boucle FOR. Ceci dit, je vous souhaite une bonne lecture et surtout de bons tests

    ==> EDIT: ce post sera mis à jour

    1. Affectation de variables :

      Contrairement à beaucoup d'autres langages de scripts, il n y a pas
      beaucoup de restrictions dans le référencement des variables:
      • Pas besoin de différencier le type STRING du type NUMBER par des doubles quotes.
      • Peu de restrictions dans le nommage des variables
      • ..etc.

      La taille maximale d'une variable d'environnement est 8 192 octets.

      1. La commande SET


        Pour créer une variable on doit utiliser la commande SET /?
        "SET" sans paramètres affiche les variables d'environnement non-dynamiques
        La commande "SET" permet d'afficher/modifier/supprimer des variables.
      2. Opérateur d'affectation :

        L'opérateur d'affectation est le caractère '=' pour une chaîne de caractères, les autres opérateurs d'affectations (raccourcis) sont utilisés dans le cas de calculs numériques (voir SET /?).
        [ += -= %= |= &= *= /= ^= ..etc ]
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
         
             SET VARIABLE=VALEUR
             ECHO %VARIABLE%
        Pour une chaîne de caractères:


        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
             SET VARIABLE=VALEUR
             SET VARIABLE=2
             ECHO %VARIABLE%
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
             SET VAR=VALEUR
             SET RAV=%VAR%
             ECHO %RAV%
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
             SET VAR=2
             SET RAV=VALEUR
             SET RAVAR=%RAV% %VAR%
             ECHO %RAVAR%
        Pour une expression numérique à évaluer:
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        @ECHO OFF
        
        SET/AA=1,B=400,C=10
        :GOTO TRAITEMENT
        SET {+}=%{+}% %A%
        SET {/}=%{/}% %B%
        SET {-}=%{-}% %C%
        sET/AA+=1,B/=2,C-=1
        IF %A% LEQ 10 GOTO:GOTO BOUCLE
        SET {
        PAUSE
        Résultat:
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        
        {+}= 1 2 3 4 5 6 7 8 9 10
        {-}= 10 9 8 7 6 5 4 3 2 1
        {/}= 400 200 100 50 25 12 6 3 1 0
        
      3. Différenciation majuscule/minuscule

        Les variables ne sont pas sensibles à la casse (les majuscules et les
        minuscules ne sont pas différenciées "A = a")
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
             SET _VAR=TEST 1
             ECHO %_VAR% = %_var% = %_VaR%
      4. Espace entre la variable et sa valeur

        Si le nom de la variable n'est pas collé au signe "="
        l'appel de cette variable n'est plus:

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
         ECHO %Nom_De_La_Variable%
        mais plutôt:

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
             ECHO %Nom_De_La_variable_+_Nombres_D'espaces jusqu'au signe égal%
        voici un exemple concret:


        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
             
             SET _VARa=TEST 2
             ECHO [%_VARa%]
             SET _VARb = TEST 2
             ECHO [%_VARb%]
             SET _VARc = TEST 2
             ECHO [%_VARc %]
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
          
        
         Output      [TEST 2]
                     []
                     [ TEST 2]
        
      5. Nommage de variables avec espaces

        On peut créer des variable dont le nom comporte des espaces.

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
          
             SET MA VARIABLE=TEST 3
             SET MA VARIABLE 
             ECHO %MA VARIABLE%
        Le seul problème réside dans le test de définition de la variable.
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
             IF DEFINED MA VARIABLE (ECHO %MA VARIABLE%)
        Avec ce code IF DEFINED va testez l'existence d'une variable "MA"
        si elle est présente la syntaxe deviendra incorrecte puisque VARIABLE
        n'a rien à faire ici "l'instruction attend une action"

        une des solutions possibles consiste en l'encadrement de l'instruction par des doubles quotes

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
          
             SET ""MA VARIABLE"=BONJOUR MAITRE"
             IF DEFINED "MA VARIABLE" (ECHO %"MA VARIABLE"%) ELSE (ECHO NON DEFINIE)

        On peut aussi utiliser une autre variable :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
             SET MA VARIABLE=TEST 3
             SET MA.VARIABLE=%MA VARIABLE%
             IF DEFINED MA.VARIABLE (ECHO %MA.VARIABLE%)
      6. Nommage des variables avec des caractères spéciaux

        Possibilité d'utiliser dans les noms des variables, des caractères spéciaux au delà de [a-zA-Z,_]


        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
            
             SETLOCAL ENABLEEXTENSIONS
             SET -=VALEUR 1
             SET #=VALEUR 2
             SET @=VALEUR 3
             SET $=VALEUR 4
             SET /=VALEUR 5        
             SET \=VALEUR 6
             SET ]=VALEUR 7
             SET [=VALEUR 8
             SET +=VALEUR 9
             SET '=VALEUR 10
             FOR %%! in (- # @ $ / \ ] [ + ') do SET %%! 
             
             REM #
             REM # POUR UTILISER DES NOMBRES PROPREMENT 
             REM # ON DOIT ACTIVER L'(ERV)
             REM #
             
             ENDLOCAL & SETLOCAL ENABLEDELAYEDEXPANSION
             SET 0=VALEUR
             SET 1=11
             SET 3=!0! !1!
             SET 3
             ECHO   !0! !1!
             ENDLOCAL


    2. Suppression des variables
      On peux supprimer les variables en utilisant cette syntaxe: SET MA.VARIABLE=

      exemple:

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      SET MA.VARIABLE=HELLO
      SET MA.VARIABLE
      SET MA.VARIABLE=
      SET MA.VARIABLE
      Résultat:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      MA.VARIABLE=HELLO
      La variable d'environnement MA.VARIABLE n'est pas d‚finie.
      deux méthodes nous sont offerts pour supprimer nos variables.

      1. Ancienne méthode
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        SET VAR1=SITE:
        SET VAR2=Developpez.net
        SET VAR3=FORUM:
        SET VAR4=Script Batch/PowerShell
        
        ECHO 1- %VAR1% %VAR2%   %VAR3% %VAR4%
        
        SET VAR1=
        SET VAR2=
        SET VAR3=
        SET VAR4=
        
        ECHO 2- %VAR1% %VAR2%   %VAR3% %VAR4%
        Résultat:
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        
        1- SITE: Developpez.net   FORUM: Script Batch/PowerShell 
        2-   
        
        Cette méthode n'est presque plus utiliser sauf pour des cas particuliers.
        L'inconvénient le plus majeur de cette méthode c'est qu'on est à chaque fois obligé de supprimer manuellement nos variables (parfois des dizaines.!!)
        Pour contourner ce problème on pourra utiliser une boucle:
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        FOR %%X IN (VAR1 VAR2 VAR3 ..) DO SET %%X=
      2. Nouvelle méthode

        On va utiliser le paire SETLOCAL/ENDLOCAL pour activer un environnement local à notre fichier de commandes

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        SETLOCAL
        SET VAR1=SITE:
        SET VAR2=Developpez.net
        SET VAR3=FORUM:
        SET VAR4=Script Batch/PowerShell
        ECHO 1- %VAR1% %VAR2% %VAR3% %VAR4%
        ENDLOCAL
        ECHO 2- %VAR1% %VAR2% %VAR3% %VAR4%
        Résultat:
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        
        1- SITE: Developpez.net FORUM: Script Batch/PowerShell 
        2-   
        

    3. Forcer la lecture des variables

      Prenons l'exemple d'un fichier "test.txt" contenant :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
       %SystemRoot%
        %UserProfile%\Bureau
        C:\walid2
      On veux étendre les variables d'environnement à leurs valeurs.
      Si on fait ceci:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
        for /f "delims=" %%a in (test.txt) do echo.%%a
      La sortie ne sera pas correcte.
      On doit FORCER la lecture des variables par le biais de "CALL" :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
        for /f "delims=" %%a in (test.txt) do call echo %%a
        for /f "delims=" %%a in (test.txt) do call dir "%%a"
        for /f "delims=" %%a in (test.txt) do call copy "%%a" .\MyRep

    4. Référencer une variable "textuellement"



      1. Désactiver l'ERV (par défaut)

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        SETLOCAL ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
           SET DIRCMD=/B/A-D
           SET Z=%SystemRoot%
           SET X=Z
           CALL DIR %%%X%%%
        ou bien:
      2. Activer l'ERV

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
           SET DIRCMD=/B/A-D
           SET Z=%SystemRoot%
           SET X=Z
           DIR !%X%!



    5. Activer/Désactiver l'ERV (cause et conséquence)

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      SETLOCAL
        SET +=BONJOUR !
      ( SET +=HELLO !
        ECHO %+% )
      ENDLOCAL
      
      SETLOCAL ENABLEDELAYEDEXPANSION
        SET #=BONJOUR !
      ( SET #=HELLO !
        ECHO !#! )
      ENDLOCAL
      
      SETLOCAL DISABLEDELAYEDEXPANSION
        SET \=BONJOUR !
      ( SET \=HELLO !
        CALL ECHO %%\%% )
      ENDLOCAL

    6. Substitution/Suppression de valeur

      Il est possible de substituer/modifier/supprimer/ajouter des chaînes de
      caractères dans la valeur de la variable, Il existe 3 "mode opérationnels" :

      1. Mode 1 (normal)



        dans ce mode on procède pas à pas :


        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
          SET _VAR=tidnis
           SET _VAR
           SET _VAR=%_VAR:t=T%    
           SET _VAR=%_VAR:i=%       %  Suppression  %
           SET _VAR=%_VAR:d=u%        %  Substitution %
           SET _VAR=%_VAR:s=isie%       %  Adjonction   %
           SET _VAR
        voici un autre exemple:

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        SET _VAR=0x1x2x3x4x5x6x7x8x9x
            SET _VAL=%_VAR:x= %
            SET _
      2. Mode 2 (automatisé)



        On regroupe tous les remplacements dans une boucle :

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
          SETLOCAL ENABLEDELAYEDEXPANSION
           SET _VAR=test: (1.x.2.x.3.x.4.x.5.x.6.x.7.x.8.x.9)
           SET _VAR
           FOR %%: IN ("(=[",")=]",".= ",":= =>","test=TEST","x=") DO SET "_VAR=!_VAR:%%~:!"     
           SET _VAR
           ENDLOCAL
      3. Mode 3


        Ce mode est une extension peu connue du "MODE NORMAL".
        Prenons un exemple qui nous permettra de voir son fonctionnement et son utilité :

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
          SET _VAR=VALUE VALEUR
           SET _VAR=%_VAR:* =%
           SET _VAR
        Autre exemple :

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
           SET _VAR=abcdefghijklmnopqrstuvwxyz0123456789
           SET _VAR
           SET _VAR=%_VAR:*z=VALEURS NUMERIQUES: %
           SET _VAR
        L'astérisque * match tous les caractères avant le(s) caractère(s) qui le succèdent.


    7. Extraction de valeurs


      La syntaxe est connue (SET /?), mais voici un petit exemple :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
        SET $VAR=[DATA1]xxxx[DATA2]xxxx[DATA3]
         SET $VAR
         SET $VAR={%$VAR:~-6,+5%}....{%$VAR:~12,+5%}....{%$VAR:~1,+5%}
         SET $VAR
    8. Modification des variables globales dans un environement local

      Dans un environnement local, lorsque l'on modifie les variables globales, les nouvelles valeurs ne remplacement pas les anciennes.

      Cet exemple montre les modifications "normales" que doivent respecter les variables "_VAR" et "_VAL"

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      SET _VAR=VALEUR 1
      SET _VAL=VALEUR 2
      SET _ & CALL:IsFunc & SET _
      EXIT /B
      :IsFunc
      SET _VAR=VALEUR 3
      SET _VAL=VALEUR 4
      GOTO:EOF
      Retournera :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      _VAL=VALEUR 2
      _VAR=VALEUR 1
      _VAL=VALEUR 4
      _VAR=VALEUR 3
      Ici on constate que lorsqu'on déclare nos 2 variables dans un environnement local "dans la sous-fonction" les valeurs dans l'environnement "global" prennent le dessus sur les valeurs dans l'environnement "local".

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      SET _VAR=VALEUR 1
      SET _VAL=VALEUR 2
      CALL:IsFunc & SET _
      EXIT /B
      :IsFunc
      SETLOCAL
      SET _
      SET _VAR=VALEUR 3
      SET _VAL=VALEUR 4
      ENDLOCAL
      GOTO:EOF
      Retournera :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      _VAL=VALEUR 2
      _VAR=VALEUR 1
      _VAL=VALEUR 2
      _VAR=VALEUR 1

      Pour contourner ce problème on doit apporter nos modifications en dehors de l'environnement local :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      SET _VAR=VALEUR 1
      SET _VAL=VALEUR 2
      CALL:IsFunc & SET _
      EXIT /B
      :IsFunc
      SETLOCAL
      SET _
      ENDLOCAL&(
      SET _VAR=VALEUR 3
      SET _VAL=VALEUR 4
      )
      GOTO:EOF
      Retournera :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      _VAL=VALEUR 2
      _VAR=VALEUR 1
      _VAL=VALEUR 4
      _VAR=VALEUR 3
    9. Portée des variables

      1. structure linéaire:

        dans le cas d'une structure SETLOCAL/ENDLOCAL linéaire, l'utilisation des variables localement n'est correcte que lorsque le traitement sur ces variables est dans ce même environnement.

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        @ECHO OFF
        SETLOCAL
        SET $VAR=HELLO
        IF DEFINED $VAR (ECHO $VAR DEFINIE) ELSE (ECHO $VAR NON DEFINIE)
        ENDLOCAL
        SETLOCAL
        IF DEFINED $VAR (ECHO $VAR DEFINIE) ELSE (ECHO $VAR NON DEFINIE)
        ENDLOCAL
        PAUSE
      2. structure imbriquée:
        Chaque environnement local crée hérite des variables local de l'environnement parent (l'imbrication est limitée à 32 niveau )
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        @ECHO OFF
        
        SETLOCAL
          SET A=SALAM
            SETLOCAL
              SET B=BONJOUR
                SETLOCAL
                  SET C=HELLO
                  ECHO ENV.LOCAL 3: %A% %B% %C%
                ENDLOCAL
              ECHO ENV.LOCAL 2: %A% %B% %C%
            
            ENDLOCAL
          
          ECHO ENV.LOCAL 1: %A% %B% %C%
        
        ENDLOCAL
        PAUSE

    10. Variables dynamiques

      Je ne vais pas répéter l'aide de la commande SET /?
      %CD%, %TIME%, %DATE%, etc. sont toutes
      des variables dynamiques qui changent selon le contexte.

      Les deux scripts ci dessous, montrent comment utiliser les variables dynamiques %ERRORLEVEL% et %RANDOM%.


      But : tester l'existence du fichier mis en paramètre avec les ERRORLEVEL's

      Errorlevel.bat

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      @ECHO OFF
      SETLOCAL ENABLEEXTENSIONS
        
         IF "%~1"=="" (
         Call:ExitCode 1) ELSE IF NOT EXIST "%~1" (
         Call:ExitCode 2) ELSE (
         Call:ExitCode 0)
        
         IF %ERRORLEVEL%==2 (ECHO {%~1} N'EXISTE PAS)
         IF %ERRORLEVEL%==1 (ECHO PARAMETRE MANQUANT)
         IF %ERRORLEVEL%==0 (ECHO LE FICHIER {%~1} EST PRESENT..) 
       
        ENDLOCAL & GOTO:EOF
      
       :ExitCode
        EXIT /B %1
        GOTO:EOF

      But : créer l'expression d'un intervalle entre 2 nombres pour un nombre aléatoire

      Random.bat

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      @ECHO OFF & SETLOCAL ENABLEEXTENSIONS & SET/AMAX=%2,MIN=%1
      
      IF NOT DEFINED MAX IF NOT DEFINED MIN (GOTO:HELP)
      IF %MAX% LSS %MIN%                    (GOTO:HELP)
      SET/A_MAX=(MAX-MIN)+1,_EXP=%RANDOM%%%_MAX+MIN
      ECHO.
      ECHO   MIN=%min% 
      ECHO   MAX=%max% 
      ECHO   EXP=%%RANDOM%%%%%%%_MAX%+%MIN%
      ECHO   RAN=%_EXP%
      ENDLOCAL & EXIT /B
      :HELP :::::::::::::::::::::::::::::::::::::::::::::::::
      CLS
      ECHO.
      ECHO.
      ECHO USAGE: RANDOM min max
      ECHO        RANDOM
      ECHO.
      ECHO EXEMPLE: RANDOM 142 284
      ECHO.
      ECHO    MIN = 142                ^<- Minimum
      ECHO    MAX = 284                ^<- Maximum
      ECHO    EXP = %%RANDOM%%%%%%143+142  ^<- Expression
      ECHO    RAN = 164                ^<- Nombre Aleatoire
      ECHO.
      ECHO INFOS:  1- il faut que MIN =^< MAX
      ECHO         2- Intervale limiter de: 0 … 32767
      ECHO.
      goto:EOF
      :::::::::::::::::::::::::::::::::::::::::::::::::::::::
    11. Variables spéciales

      Ces variables provoquent un changement dans le comportement de quelques commandes.
      Cas de COPYCMD:

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
         SET COPYCMD=/B
         COPY FILE1+FILE2+FILE3 FILE4
         REM # COPY /B FILE1+FILE2+FILE3 FILE4

      Cas de DIRCMD:

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
        SET DIRCMD=/B/A-D/S
         DIR MyFolder
         REM # DIR /B/A-D/S 
    12. Appel de variables externes

      On peux appeler des variables externes dans nos fichiers de commandes.


      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      SETLOCAL & SET $T=%TIME%
         ECHO>TM.BAT SET $T
         FOR %%: in (CALL DEL) do %%: TM.BAT
         :::::::::::::::::::::::::::::::::::::::::::::::::::
         ::ICI LE TRAITEMENT:EXEMPLE:
        
              DIR /B /A-D /S %WINDIR%\*.EXE
              CLS      
      
         :::::::::::::::::::::::::::::::::::::::::::::::::::
         ECHO DEBUT: %$T%
         ECHO FIN  : %TIME%
      ENDLOCAL
    13. Les caractères réservés

      Prenons cette exemple:


      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      SET _VAR=^^ ^& %% ^| ^< ^>
         REM SET _VAR retourne le bon résultat
         SET _VAR
         REM ECHO %_VAR% retourne une erreur
         ECHO %_VAR%
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
       SET "_VAR=^^ ^& %% ^| ^< ^>"
         REM SET _VAR retourne un résultat erroné
         SET _VAR
         REM ECHO %_VAR% retourne le bon résultat
         ECHO %_VAR%
      On constate que les doubles-quotes ont leur importance dans l'interprétation des caractères réservés.

    14. Création de Pseudo-Arrays

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
        SETLOCAL ENABLEDELAYEDEXPANSION
        SET/AX=0 & FOR %%X IN (STR1 STR2 STR3 STR4) DO (
          SET ARRAY[!X!]=%%X
          SET/AX+=1
        )
        SET ARRAY[
        ENDLOCAL
      L'appel de ces variables ce fait par:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SET ARRAY[0] SET ARRAY[1]...SET ARRAY[n]
    15. Héritage de l'instance de Cmd.exe avec son application Cmd.exe parente

      En imbriquant des instances de Cmd.exe, vous pouvez apporter des modifications à l'environnement local sans affecter l'application parente de Cmd.exe.
      Pour appeler une nouvelle instance de cmd.exe tapez cmd

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      c:\RepTest-> SET VAR=BONJOUR MAITRE
      c:\RepTest-> ECHO %VAR%
      BONJOUR MAITRE
      
      c:\RepTest-> CMD
      
      Microsoft Windows XP [version 5.1.2600]
      (C) Copyright 1985-2001 Microsoft Corp.
      
      
      c:\RepTest-> ECHO %VAR%
      BONJOUR MAITRE
      
      c:\RepTest-> SET VAR=ADIEU MAITRE
      c:\RepTest-> ECHO %VAR%
      ADIEU MAITRE
      
      c:\RepTest-> EXIT
      c:\RepTest-> ECHO %VAR%
      BONJOUR MAITRE
    16. Variable d'env. utilisateur/système
      1. Quelques variables d'env. utilisateur :

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        %ALLUSRERPROFILE%
        %APPDATA%
        %CD%
        %CMDCMDLINE%
        %LOGONSERVER%
        %PROMPT%
        %USERDOMAIN%
        %USERNAME%
        %USERPROFILE%
      2. Quelques variables d'env. système :

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        %CMDEXTVERSION%
        %COMPUTERNAME%
        %COMSPEC%
        %DATE%
        %ERRORLEVEL%
        %HOMDRIVE%
        %HOMEPATH%
        %HOMESHARE%
        %NUMBER_OF_PROCESSORS%
        %OS%
        %PATH%
        %PATHEXT%
        %PROCESSOR_ARCHITECTURE%
        %PROCESSOR_IDENTIFIER%
        %PROCESSOR_LEVEL%
        %PROCESSOR_REVISION%
        %RANDOM%
        %SYSTEMDRIVE%
        %SYSTEMROOT%
        %TEMP%
        %TIME%
        %WINDIR%
    17. Créer des variables dynamiquement:

      En activant l'ERV on peux exploiter les variables dynamiquement.

      1. Expansion au contenu de la variable

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        SETLOCAL ENABLEDELAYEDEXPANSION
        
        SET VAR=VAL
        ECHO !VAR%VAL%!
        
        ENDLOCAL
        va Afficher la valeur de la variable "VAR"
      2. Expansion au contenu de la variable
        Expansion au contenu d'autres variables

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        SETLOCAL ENABLEDELAYEDEXPANSION
        
        SET VARVAL=VARVAL
        SET VALVAR=VALVAR
        
        SET VAR=VAL
        ECHO !VAR%VAR%!
        
        SET VAR=VAL
        ECHO !%VAR%VAR!
        
        ENDLOCAL
        va Afficher les valeurs des variable "VARVAL" et "VALVAR"
        les 2 variables "VAR" de cet exemple on été dynamiquement
        étendu en respectivement "VARVAL" et "VALVAR"

        autre exemple:

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        SETLOCAL ENABLEDELAYEDEXPANSION
        SET VALEUR=5
        SET VAR5=VALEUR 5
        SET VAR=VALEUR
        ECHO !VAR%VALEUR%!
        ENDLOCAL




    @ suivre..

  2. #2
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Mise à jour du: Le 11/09/2009 à 15:24
    Les Ajouts:
    -----------
    nouvelles sections
    * Suppression des variables
    * Portée des variables

    Ajout de nouveaux codes
    =======================================

    Mise à jour du: Le 14/09/2009 à 18:39
    Les Ajouts:
    -----------
    Variable d'env. utilisateur/système (1er partie)


    Ajout de nouveaux codes
    =======================================

    Mise à jour du: Le 23/09/2009 à 14:47
    Les Ajouts:
    -----------
    créer des variables dynamiquement

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut je me permets qq remarques:

    Citation Envoyé par I'm_HERE
    La taille maximale d'une variable d'environnement est 8 192 octets.
    Est-ce son nom,son contenu ou les deux ?
    Quelle est la taille max ?

    Citation Envoyé par I'm_HERE
    Pour créer une variable on doit utiliser la commande SET /?
    Je ne pense pas, SET /? affiche l'aide de la commande. La formulation n'est pas correcte il me semble.

    Citation Envoyé par I'm_HERE
    L'opérateur d'affectation est le caractère '=' pour une chaîne de caractères
    Ok
    Citation Envoyé par I'm_HERE
    les autres opérateurs d'affectations (raccourcis)...
    Il n'y a pas d'autre opérateur d'affectation, il n'en existe qu'un. En revanche la commande Set propose le paramètre /a, qui lui autorise une syntaxe évoluée, les raccourcis.
    Il s'agit de raccourcis d'écriture, une facilité, mais pas un autre type d'affectation. Mais je ne sais pas s'il existe des langages informatique qui proposent plusieurs types d'affectations.

    Tu utilises le paramètre /a dans l'exemple 5. De plus le résultat énoncé de celui-ci n'est valide qu'au sein d'un script et pas directement dans la console, as-tu une idée du pourquoi ?

    Citation Envoyé par I'm_HERE
    Espace entre la variable et sa valeur
    Peux-tu reformuler ? Le nom de la variable tient compte des espaces.
    Dans l'exemple la présence de crochet me laisse penser qu'il sont liés à la présence d'espace dans le nom de la variable.
    Cela me semble ambigu. Ensuite la présence d'indirection dans le nommage des variables ne facilite la compréhension de l'exercice.

    e. Nommage de variables avec espaces
    "...n'a rien à faire ici "l'instruction attend une action"
    Je n'ai pas compris :/

    f. Nommage des variables avec des caractères spéciaux
    Concernant l'exemple, même remarque que précédemment. On doit passer par un script, dans ce cas le préciser.

    2. Suppression des variables
    L'exemple part d'un des derniers exemples, il manque peut être un niveau.

    "2 méthodes nous sont offerts pour supprimer nos variables"
    Autant utiliser Deux à la place de 2, il y a une collision avec le nommage de paragraphe, bon ici c'est cosmétique.

    a Ancienne méthode
    "L'inconvénient le plus majeur de cette méthode c'est qu'on est à chaque fois obligé de supprimer manuellement nos variables"
    Ce n'est pas un inconvénient majeur, cela nécessite plus de saisie. Ce n'est pas tout à fait la même chose.

    La seconde approche apporte une notion de portée, autant la première peut fonctionner sous + OS, autant la seconde à partir d'une certaine version.
    Dans le cas d'utilisation d'un même script batch sur + OS cela n'est plus un inconvénient, plutot un avantage, je me trompe ?

    3. Forcer la lecture des variables
    "On veux étendre les variables d'environnement à leurs valeurs."
    Je ne comprend pas ici le sens d'étendre, tu parles de l'expansion de variable

    Je ne dois pas être doué, mais je n'arrive pas à reproduire tes exemples

    ERV ?
    Quoi qu'est-ce ? Expansion retardée de variable ?

  4. #4
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut "Laurent Dardenne", et merci d'avoir contribuez à ce post

    Citation Envoyé par Laurent Dardenne
    Quelle est la taille max ?
    depuis la documentation:

    La taille maximale des variables d'environnement totales pour toutes les variables, qui inclut le nom des variables et le signe égal, est 65 536 Ko


    Citation Envoyé par Laurent Dardenne
    Je ne pense pas, SET /? affiche l'aide de la commande. La formulation n'est pas correcte il me semble.
    oui SET/? affiche l'aide de la commande.
    j'ai fais un SET/? pour que le lecteur essaye de lire le "help des commandes" car de ce que j'ai vu dans les forums, on est obligé tout
    le temps de dire "RTM PLEASE" même pour les questions les plus basiques...la doc n'est plus lue..c'est bizarre car presque 50% des questions posées, leurs réponses se trouve dans la "doc".. c'est pour cette raison que je fais un command/?

    Citation Envoyé par Laurent Dardenne
    Il s'agit de raccourcis d'écriture, une facilité, mais pas un autre type d'affectation.
    c'est vrai que set /a var=var+5 est identique à: set/a var+=5

    mais le terme affectation est utiliser ici au sens large du terme


    Citation Envoyé par Laurent Dardenne
    Tu utilises le paramètre /a dans l'exemple 5. De plus le résultat énoncé de celui-ci n'est valide qu'au sein d'un script et pas directement dans la console
    l'exemple "5" montre quelques possibilités offertes pour ce genre de traitement il est biensure conçu pour un fichier de commandes.
    le but du code est de montrer quelques raccourcis d'affectation , on peux faire la même chose en invite de commandes: puisque la commande set/a initialise la variable autmatiquement à 0 on peux faire: set/a val+=5



    Citation Envoyé par Laurent Dardenne
    Peux-tu reformuler ? Le nom de la variable tient compte des espaces.
    Dans l'exemple la présence de crochet me laisse penser qu'il sont liés à la présence d'espace dans le nom de la variable.
    Cela me semble ambigu
    Les crochets sont liés à la présence d'espaces "à la fin" du nom de la variable c-à-d entre le nom de la variable et le
    signe égal.

    cet/ces espace(s) peux(euvent) provoquer des resultat non attendu lors de l'affichage/traitement de la variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    (set varA=valeur)        % la variable est séparer de sa valeur par "1 Signe Egal" % 
    echo #%varA%#            % correct %
    
    (set ma varB=valeur)     % la variable est séparer de sa valeur par "1 Signe Egal" %
    echo #%ma varB%#         % correct %
    
    (set varC= valeur)       % la variable est séparer de sa valeur par "1 Signe Egal + 1 espace" %
    echo #%varC%#            % correct %
    
    (set varD = valeur)      %la variable est séparer de sa valeur par "1 espace + 1 Signe Egal + 1 espace" %
    echo #%varD%#            % incorrect %
    echo #%varD %#           % correct %
    
    (set ma varE = valeur)   %la variable est séparer de sa valeur par "1 espace + 1 Signe Egal + 1 espace" %
    echo #%ma varE%#         % incorrect % 
    echo #%ma varE %#        % correct %
    
    (set ma varF  = valeur)  % la variable est séparer de sa valeur par "2 espace + 1 Signe Egal + 1 espace" %
    echo #%ma varF%#         % incorrect   %
    echo #%ma varF %#        % incorrect %
    echo #%ma varF  %#       % correct %
    Citation Envoyé par Laurent Dardenne
    e. Nommage de variables avec espaces

    si les espaces ne sont pas à la fin du nom de la variable alors
    on peux créer ce genre de variable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set ma petite variable=est constante
    echo %ma petite variable%
    Citation Envoyé par Laurent Dardenne
    "...n'a rien à faire ici "l'instruction attend une action"
    Je n'ai pas compris :/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    CONDITION
    ---------
      |
      ----> If defined ma variable 
                 |
              ACTIONS
                 |
                 |--> (echo %ma variable%) else (echo non definie)

    L'intérpréteur de commandes voix cette instruction comme ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    CONDITION
    ---------
      |
      ----> If defined ma 
                 |
              ACTIONS
                 |
                 |--> variable (echo %ma variable%) else (echo non definie)

    Citation Envoyé par Laurent Dardenne
    2. Suppression des variables
    L'exemple part d'un des derniers exemples, il manque peut être un niveau.
    peut être.. dans la présentation j'ai noter que ce post sera au fur à mesure mise à jour..

    Citation Envoyé par Laurent Dardenne
    "2 méthodes nous sont offerts pour supprimer nos variables"
    Autant utiliser Deux à la place de 2, il y a une collision avec le nommage de paragraphe, bon ici c'est cosmétique.
    le "2" en "deux" c'est fais merci

    Citation Envoyé par Laurent Dardenne
    a Ancienne méthode
    "L'inconvénient le plus majeur de cette méthode c'est qu'on est à chaque fois obligé de supprimer manuellement nos variables"
    Ce n'est pas un inconvénient majeur, cela nécessite plus de saisie. Ce n'est pas tout à fait la même chose.

    La seconde approche apporte une notion de portée, autant la première peut fonctionner sous + OS, autant la seconde à partir d'une certaine version.
    Dans le cas d'utilisation d'un même script batch sur + OS cela n'est plus un inconvénient, plutot un avantage, je me trompe ?
    rien n'est parfait, il y a deux approches ici, ou bien le problème de la comptabilité entre version d'OS ou bien un problème d'érgonomie (je m'excuse du mot je n'ai pas trouvé d'autres mots significatif)
    c'est vrai que la première méthode est plus universelle (si on a à faire avec "les Windinosaure") mais ça reste un choix surtout si nos scripts vont tourné sous des plateformes Win NT.

    j'ai pas exclut la première méthode de mes choix c'est pour cette raison que j'ai cloturer avec un vidage de variable automatiser par le biais d'une boucle

    Citation Envoyé par Laurent Dardenne
    3. Forcer la lecture des variables
    "On veux étendre les variables d'environnement à leurs valeurs."
    Je ne comprend pas ici le sens d'étendre, tu parles de l'expansion de variable
    c'est une sorte d'expansion des variables, pour que celle-ci ne soit pas intérpréter littéralement

    c:\windows au lieu de %windir%


    Citation Envoyé par Laurent Dardenne
    ERV ?
    Quoi qu'est-ce ? Expansion retardée de variable ?
    Oui

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Merci pour ces précisions.
    Citation Envoyé par I'm_HERE
    c'est vrai que la première méthode est plus universelle (si on a à faire avec "les Windinosaure")
    Je suis de l'époque d'avant, Msdosaure

Discussions similaires

  1. [Batch] [HOWTO] les variables ForInDo
    Par I'm_HERE dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 08/05/2012, 17h11
  2. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53
  3. [XSLT] les variables???
    Par Lydiane dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 09/08/2002, 16h17
  4. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo