• BATCH > les variables, chaines de caractères et calculs mathématiques

      VARIABLES

      Déclaration

      set toto=10 (sans aucun espace autour du =)

      Utilisation

      echo toto vaut %toto%

       

      Saisie par utilisateur

      grâce à set /p
      set /p var= écrivez un truc :
      echo var vaut %var%

       

      VARIABLES D’ENVIRONNEMENT

      echo Salut %USERNAME%,nous sommes le %DATE%

      echo il est %Time% déja!,
      echo %RANDOM% est un chiffre aléatoire
      echo c’est une architecture %PROCESSOR_IDENTIFIER%

      %ALLUSERSPROFILE%
      %APPDATA%
      %CLASSPATH%
      %CommonProgramFiles%
      %COMPUTERNAME=% nom de l’ordinateur
      %ComSpec%
      %DEVMGR_SHOW_DETAILS%
      %FP_NO_HOST_CHECK%
      %HOMEDRIVE%
      %HOMEPATH%
      %LOGONSERVER%
      %NUMBER_OF_PROCESSORS% nombres de processeurs
      %OS%
      %Path%
      %PATHEXT%
      %PROCESSOR_ARCHITECTURE%
      %PROCESSOR_IDENTIFIER%
      %PROCESSOR_LEVEL%
      %PROCESSOR_REVISION%
      %ProgramFiles%
      %PROMPT%
      %QTJAVA%
      %SESSIONNAME%
      %SystemDrive%
      %SystemRoot%
      %TEMP%
      %TMP%
      %USERDOMAIN%
      %USERNAME%
      %USERPROFILE%
      %windir%
      %DATE%
      %TIME%
      %CD% répertoire en cours
      %RANDOM%
      %ERRORLEVEL%
      %CMDEXTVERSION%
      %CMDCMDLINE%

      CHAINE DE CARACTÈRES

      Découpage d’une chaine

      exemple : %ProgramFiles% donne C:\Program Files

      conserver uniquement le lecteur "c:\" : echo %ProgramFiles:~0,3%
      ":~" indique le découpage, les valeurs suivantes "0,3″ indiquent comment la découper. En effet le 0 indique que le début de la sélection est le 0eme caractère, le 3 indique qu’elle s’arrête au 3eme.

      Autre solution possible, par suppression de caractères:
      echo %ProgramFiles:~,-13%
      Conservons désormais le nom du dossier "Program Files" uniquement
      echo %ProgramFiles:~3,13%

      echo %ProgramFiles:~3%

       

      Exemple

      variable de base date: %date%
      découpage %date:~0,2%
      1er chiffre numéro du caractère de début de la sélection
      2eme chiffre nombre de caractères après le début
      echo Nous sommes le %date:~0,2% le %date:~3,2%eme mois de l’année %date:~6,4%

       

      Substitution

      Exemple : mettre chaque chemin du Path sur une ligne :

      On substitue le ; par un saut de ligne :

      for %%i in ("%path:;=" "%") do echo %%~i

      MATHEMATIQUES

      Calculs possibles avec la commande set /a

      Addition

      set /a var= 5+5

      Soustraction

      set /a var= 10-5

      Division

      set /a var= 10/2

      Multiplication

      set /a var= 10*2

      parenthèses

      set /a var= ((10*5)*2 + (10*5)*2)/2

       

      echo Pour finir le quizz, tape fin!

      set/p "requizz=>"

      if %requizz%== fin goto FIN

      /p "rep2=>"

      if NOT %rep2%== c goto QUEST2/2

       

       

      Incrémenter

      set /a var = var + 1

       

      exemple dans une boucle

      :A
      set /a var = var + 1
      echo %var%
      if %var%==5 goto B
      goto A
      :B
      pause

      Commande SET

       

      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
      << >> - 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 0×12 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.

       

 

Aucun commentaire

 

Laissez un commentaire