{"version":"1.1","schema_version":"1.1.0","plugin_version":"1.1.2","url":"https://tutos-gameserver.fr/2019/07/11/apprendre-la-programmation-par-script-batch-un-bon-serveur-minecraft/","llm_html_url":"https://tutos-gameserver.fr/2019/07/11/apprendre-la-programmation-par-script-batch-un-bon-serveur-minecraft/llm","llm_json_url":"https://tutos-gameserver.fr/2019/07/11/apprendre-la-programmation-par-script-batch-un-bon-serveur-minecraft/llm.json","manifest_url":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","language":"fr-FR","locale":"fr_FR","title":"Apprendre la programmation par script batch\n\n &#8211; Un bon serveur Minecraft","site":{"name":"Tutos GameServer","url":"https://tutos-gameserver.fr/"},"author":{"id":1,"name":"Titanfall","url":"https://tutos-gameserver.fr/author/titanfall/"},"published_at":"2019-07-11T13:54:06+00:00","modified_at":"2019-07-11T13:54:06+00:00","word_count":18324,"reading_time_seconds":5498,"summary":"Les fichiers de commandes sont des scripts de commande qui s&#39;exécutent dans l&#39;interpréteur de commandes Windows. Alors, quel pourrait être l’intérêt d’écrire ces lignes de commande dans un script? En fait, il y a plusieurs raisons: évitez de devoir réécrire constamment les mêmes commandes lors de tâches répétitives; Possibilité de créer de vrais petits programmes [&hellip;]","summary_points":["Les fichiers de commandes sont des scripts de commande qui s&#39;exécutent dans l&#39;interpréteur de commandes Windows.","Alors, quel pourrait être l’intérêt d’écrire ces lignes de commande dans un script?","En fait, il y a plusieurs raisons:\n\névitez de devoir réécrire constamment les mêmes commandes lors de tâches répétitives;\nPossibilité de créer de vrais petits programmes facilitant les tâches à exécuter via l&#39;interpréteur de commandes.","Nous étudierons des méthodes pour concevoir ces programmes."],"topics":["Serveur minecraft"],"entities":[],"entities_metadata":[{"id":13,"name":"Serveur minecraft","slug":"serveur-minecraft","taxonomy":"category","count":2786,"url":"https://tutos-gameserver.fr/category/serveur-minecraft/"}],"tags":["Serveur minecraft"],"content_hash":"c685e57523ce6373646212f0cd8d3c31","plain_text":"Les fichiers de commandes sont des scripts de commande qui s&#39;exécutent dans l&#39;interpréteur de commandes Windows. Alors, quel pourrait être l’intérêt d’écrire ces lignes de commande dans un script? En fait, il y a plusieurs raisons:\n\névitez de devoir réécrire constamment les mêmes commandes lors de tâches répétitives;\nPossibilité de créer de vrais petits programmes facilitant les tâches à exécuter via l&#39;interpréteur de commandes.\n\nNous étudierons des méthodes pour concevoir ces programmes. Dans la suite de ce document, nous utiliserons la convention suivante:\n\nles termes interprète de commande ou interprète décrivent l&#39;exécutable cmd.exe;\ndans les syntaxes de commande, le cadre des pièces avec les caractères [[[[ et ] sont facultatifs, le cadre des pièces avec les caractères &lt; et &gt; sont remplacés par différentes informations à fournir (celles-ci seront précises avec la syntaxe) et les parties encadrées avec les caractères  et  sont des parties à choix multiples o chaque choix est séparé des autres avec le caractère |.\n\nLa convention syntaxique est la même que pour l&#39;aide en ligne de commande, ce qui facilitera votre compréhension.\nI-A. L&#39;éditeur de texte ▲\n\nUn simple éditeur de texte, tel que le bloc-notes fourni avec Windows, n’est pas pratique pour écrire des scripts batch. Pour exploiter pleinement les capacités de ces scripts, vous devez être en mesure de coder des caractères non anglais tels que des accents ou 砻 afin d&#39;accéder aux fichiers dont le nom contient ces types de caractères exotiques. La plupart des éditeurs de texte codent les fichiers avec le jeu de caractères ANSI correspondant à la langue d&#39;installation du système d&#39;exploitation, tandis que l&#39;interpréteur de commande utilise un temps de page de code (également appelé Page de code) en tant que CP-850, qui est le codage par défaut de l’interprète pour les systèmes Windows installés en français (France).\nSous Windows, vous disposez peut-être déjà d’un éditeur de texte, le Notepad ++ (la version 5.9.x ou une version ultérieure est nécessaire); si ce n&#39;est pas le cas, vous pouvez le télécharger ici: http://notepad-plus-plus.org/en/\nDans ce dernier cas, vous pourrez sélectionner le codage dans le menu Codage&gt; Codage de caractères, puis si vous voulez le français par exemple: sélectionnez Langues de l&#39;Europe de l&#39;Ouest&gt; OEM-850. Dans Notepad ++, le pages de code sont des appels OEM-XXX, au lieu de CP-XXX, mais ce sont les mêmes codages. Il convient également de noter que dans le même menu que OEM-850, il y a OEM-863: français; c&#39;est français, mais pour le Qubec. Cette manipulation sera effectuée pour que chaque script utilise l&#39;encodage correct. Il n&#39;est pas possible d&#39;effectuer cette opération automatiquement dans Notepad ++.\n\n\n\nI-B. Encodage des caractères ▲\n\nLa gestion des pages de code dans l&#39;interpréteur se fait via les commandes mode et chcp, ces commandes sont utilisées pour afficher le page de code utilisé ou le modifier en utilisant l’une des syntaxes suivantes.\nDéfinir les page de code  utiliser (o     est le nombre de page de code).\nmode chatte sélectionnez cp=&lt;XXX&gt;  \nchcp &lt;XXX&gt;  \nVoir la page de code utilisé.\nmode chatte cp [/status]  \nchcp \nLe tableau 1 fournit une liste non exhaustive des différents pages de code utilisé par l&#39;interpréteur de commandes.\n\n\n\n\nPage de code \n\n\nLa description \n\n\n\n\nCP-437\n\n\npour le soutien des langues anglophones.\n\n\n\n\nCP-720\n\n\npour le soutien des langues arabes.\n\n\n\n\nCP-737\n\n\npour le soutien du grec.\n\n\n\n\nCP-775\n\n\npour le soutien des langues baltes.\n\n\n\n\nCP-850\n\n\npour la prise en charge des langues d&#39;Europe occidentale (mises à jour par le CP 858), y compris le français (France), mais également l&#39;allemand, le basque, le catalan, le danois, l&#39;espagnol, le finnois, l&#39;italien, le français espagnol, le norvégien, le portugais, le suédois, l&#39;afrikaans, le féroïen, Flamand et irlandais.\n\n\n\n\nCP-852\n\n\npour le soutien des langues d&#39;Europe centrale.\n\n\n\n\nCP-855\n\n\npour le soutien de l&#39;alphabet cyrillique.\n\n\n\n\nCP-857\n\n\npour le soutien du turc.\n\n\n\n\nCP-858\n\n\npour le support des langues d&#39;Europe occidentale, y compris le français (France), il s&#39;agit d&#39;une mise à jour 1998 basée sur le CP-850 ou seul le symbole € a été ajouté au point de code 0xD5.\n\n\n\n\nCP-861\n\n\npour le soutien de islandais.\n\n\n\n\nCP-863\n\n\npour le soutien du français (Qubec).\n\n\n\n\nCP-864\n\n\npour le soutien des langues arabes.\n\n\n\n\nCP-866\n\n\npour le soutien de l&#39;alphabet cyrillique.\n\n\n\n\nCP-869\n\n\npour le soutien du grec.\n\n\n\n\nTableau 1: page de code \nIl convient de noter que, malgré la mise à jour du CP-850 par le CP-858, le codage par défaut de l’interpréteur Windows installé en français (France) reste le CP-850. Il est donc préférable d&#39;utiliser le CP-850. La liste de pages de code supporté par un système Windows est disponible dans le registre sous la clé: HKLM  SYSTEM  CurrentControlSet  Control  Nls  CodePage. Vous remarquerez la présence de 1252 dans le mentionné précédemment, c&#39;est l&#39;encodage Windows-1252 utilisé par les API Windows et donc par la plupart des ordinateurs portables sur des systèmes installés en français (France); cependant, il n&#39;est pas recommandé de l&#39;utiliser dans l&#39;interpréteur de commandes car les commandes ne sont pas faites pour le prendre en charge, cela peut même causer des bogues dans certains cas. Le codage par défaut pour l&#39;interpréteur peut être trouvé via la valeur OEMCP De type REG_SZ toujours dans ce qui est mentionné ci-dessus.\nIl est possible d&#39;ajouter Pages de code manquant (par défaut, seulement pages de code sont disponibles) en installant le pack de langue correspondant au codage souhaité. Chaque module linguistique comprend une table de conversion qui permet à Windows de convertir un point de code en une représentation graphique et de l’afficher. Il est également possible d’utiliser Unicode (UCS-2 uniquement) avec la sortie de commande interne de l’interpréteur pour permettre une interaction avec les programmes utilisant le langage Unicode natif (pour Perl par exemple) en appelant l’interprète via la commande suivante (o     est la commande à exécuter).\ncmd / u &lt;ordre&gt;  \nDans Notepad ++, vous pouvez ajouter les caractères manquants au clavier via le menu Edition&gt; Panneau de caractères ASCII, puis double-cliquez sur le caractère souhaité.\n\nI-C. Bonjour le monde ▲\n\nNous allons commencer par le monde traditionnel hello, voici le code (Script 1). Copiez le code dans Notepad ++, puis enregistrez-le avec l&#39;encodage OEM-850 et l&#39;extension .bat ou .cmd (uniquement sur les systèmes Vista et supérieurs).\n\nLa différence entre le fichier .bat et le fichier .cmd réside dans l&#39;interpréteur de commandes. En fait, sur les systèmes Windows XP, il existait deux interpréteurs de commandes: cmd.exe et COMMAND.COM. Les fichiers avec l&#39;extension .bat ont été gérés par cmd.exe et les fichiers avec l&#39;extension .cmd ont été gérés par COMMAND.COM, les deux types de fichiers ayant des spécificités différentes. Cependant, sous Windows Vista et au-dessus, il ne reste que cmd.exe. Tous les scripts .bat et .cmd sont exécutés par cmd.exe et ont les mêmes spécificités.\n\n\n\n1.234567.89\n@écho de\ncls\n\n\n\n\nécho Bonjour Monde !!!! Dj l ?\nécho.\npause\n\n\n\nLorsque nous exécutons ce script en cliquant dessus, nous obtenons l&#39;affichage suivant.\n\n\n\nRegardons la composition du script 1. La première ligne, @Écho off, est déjà intéressant, il est composé:\n\npréfixe @ qui sert à inverser l&#39;état de l&#39;affichage standard;\nde la commande écho qui est utilisé pour gérer l&#39;affichage sur la ligne de commande;\net le paramètre de qui sert à désactiver la vue standard.\n\nL’affichage standard définit ce que l’interpréteur de commandes affiche par défaut. Par exemple, lors du lancement de l&#39;interpréteur de commande ci-dessous; la vue standard renvoie le chemin du répertoire en cours, soit C:  Utilisateurs  Portable&gt;.\n\n\n\nLors de l&#39;exécution d&#39;un script, la vue par défaut renvoie, par défaut, le chemin d&#39;accès du répertoire actuel, suivi de l&#39;exécution de la commande, comme dans l&#39;exemple ci-dessous.\n\n\n\nLe préfixe @, lorsqu&#39;il est placé en début de ligne, sert à inverser l&#39;état de l&#39;affichage standard (activé ou désactivé) pour l&#39;exécution de la commande qui le suit (pas seulement pour la commande écho). Ce comportement se termine lorsque la commande est exécutée. Donc la commande @cd / d &quot;C:  Users  Portable &quot; ne sera affiché que si l&#39;affichage standard est désactivé. La syntaxe du préfixe @ est la suivante (o     est la commande à exécuter):\n@&lt;ordre&gt;  \nLa commande écho Verts l&#39;affichage dans l&#39;interprète, il peut:\n\nchanger le statut de l&#39;affichage standard;\nafficher l&#39;état de l&#39;affichage standard;\nafficher un message ou une ligne vide dans l&#39;interprète.\n\nLa désactivation de l&#39;affichage standard peut s&#39;effectuer via la syntaxe suivante (uniquement les erreurs et les messages de la commande écho sont affichés).\nécho de  \nActiver l&#39;affichage standard peut être effectué via la syntaxe suivante (tout est affiché).\nécho nous \nUtiliser sans paramètres, la commande écho renvoie le statut de la vue standard actuelle.\nécho  \nSi nous répétons le script 1, la ligne @Écho off pour désactiver la vue standard sans que la commande soit affichée. Sur la deuxième ligne du script 1, la commande cls est utilisé pour vider la fenêtre de l’interprète de son contenu, cette commande ne prend aucun paramètre. Sa syntaxe est donc la suivante.\ncls \nLa ligne suivante du script 1 est vide, elle ne sera donc pas prise en compte lors de l&#39;exécution du script, ce qui le rendra plus lisible. La quatrième ligne est composée de la commande rem et une chaîne de caractères, cette commande vous permet d’insérer des remarques dans votre script. Si et seulement si l&#39;affichage standard est activé, la commande rem sera affiché. La syntaxe de la commande rem est la suivante (o     est la chaîne de caractères insérée dans la remarque).\nLa cinquième ligne du script 1, :: Ceci est un commentaire., est composé du préfixe :: et une chaîne de caractères. Le préfixe :: définit la chaîne de caractères qui la suit sous forme de commentaire; ce comportement se termine sur la première ligne de retour. Indépendamment de l’état de l’affichage standard, la chaîne de caractères précédée du préfixe :: ne sera pas affiché. La syntaxe est la suivante (o     est le commentaire inséré).\nSuit une autre ligne vide puis la commande echo Hello World !!!! Dj l? qui affiche Bonjour Monde !!!! Dj l? dans la fenêtre de l&#39;interprète. La syntaxe suivante vous permet d’afficher un message même si l’affichage standard est désactivé (o     est le message d’affichage).\nécho &lt;message&gt;  \nPuis vient la commande écho. ce qui permet d&#39;afficher la ligne vide que l&#39;on voit dans l&#39;affichage obtenu. Si un point suit directement la commande écho et qu&#39;après le point il y a un retour de la ligne, celle-ci affiche une ligne vide.\nécho.  \nSur la ligne suivante se trouve la commande pause qui met en pause l&#39;exécution du script jusqu&#39;à ce que l&#39;utilisateur appuie sur une touche du clavier, il affiche le message Appuyez sur une touche pour continuer &#8230; (quel que soit l&#39;état actuel de la vue standard) et ne prend aucun paramètre. En script 1, cette commande permet de visualiser le contenu de la fenêtre de l&#39;interpréteur avant la fermeture de celle-ci.\npause  \n\nI-D. Différence entre la commande rem et le préfixe :: ▲\n\nPour mieux comprendre la différence entre la commande rem et le préfixe ::, essayons le script 2. \n\n\n1.234567.\ncls\n\n\n@écho de\n\n\npause\n\n\n\n\n\n\nComme vous le voyez dans la vue script 2, la commande Rem Note 1, est présente l&#39;encoche; Lorsque l’écran standard est activé, toutes les commandes affichées sont affichées. La chaine :: Commentaire 1 n&#39;est pas affiché, cela est dû au fait que le préfixe :: n&#39;est pas une commande et n&#39;est donc pas renvoyé par la vue standard. Puis vient la commande @Écho off qui désactive l’affichage standard sans afficher la commande, suivi de la commande Rem Note 2 qui ne s&#39;affiche pas (l&#39;affichage standard est jusqu&#39;à présent désactivé), ni la chaîne :: commentaire 2 ce qui est en tout cas exclu par l&#39;affichage standard.\n\nC&#39;EST À DIRE. Le personnage s&#39;échappe\n\nLes caractères spéciaux (également appelés caractères mta) sont des caractères qui ont une signification particulière pour l&#39;interpréteur de commandes. Chaque fois que l&#39;interprète les rencontre, il leur applique le traitement correspondant, indépendamment de leur position dans la ligne de commande. Voici la liste:\nEt | ^ &lt; &gt; ()  \nPour pouvoir les utiliser dans une chaîne de caractères, vous devez les échapper avec le caractère ^c&#39;est-à-dire, mettez ce personnage devant lui. Ainsi, l&#39;interprète saura qu&#39;ils font partie d&#39;une chaîne et qu&#39;ils n&#39;ont rien à voir avec la commande. Voir le script 3 à titre d&#39;exemple.\n\n\n1.23\n@écho de\nécho ^Et ^| ^^ ^&lt; ^&gt; ^ (^)\npause\n\n\n\nIl convient également de noter que d&#39;autres caractères peuvent nécessiter une évasion, mais ils suivent d&#39;autres règles. Le personnage % doit être caché par lui-même pour être considéré comme faisant partie d&#39;une chaîne lorsqu&#39;il est utilisé dans un script, comme indiqué dans le script 4.\n\n\n1.23\n@écho de\nécho %%\npause\n\n\n\nUn autre cas est note, il concerne les personnages &quot; et  qui doit être échappé avec le personnage  lorsqu&#39;il est utilisé dans un paramètre cité. Dans le script 5, si les personnages &quot; et  n&#39;avait pas été manqué, le résultat ne serait pas celui attendu. L&#39;interprète aurait compris qu&#39;il y avait une chaîne bloc-notes &quot;cmd / c&quot; et une chaine &quot;% CD%  ~% nx0&quot; &quot;, ce qui aurait entraîné une erreur dans l’évaluation de la commande.\n\n\n1.23\n@écho de\ncourir comme / Utilisateur:% Nom d&#39;utilisateur% &quot;cmd / c  &quot;bloc-notes &quot;%CD%\\% ~ Nx0 &quot;&quot;\npause\n\n\n\nCaractère d&#39;échappement ^ peut également être utilisé pour écrire une même commande sur plusieurs lignes. Quand l&#39;interprète rencontre le personnage ^ devant un retour à la ligne, il supprime ce caractère et renvoie la ligne, puis continue à lire les données fournies à la ligne suivante. Exemple avec le script 6.\n\n\n1.234\n@écho de\nécho foo ^\nbar\npause\n\n\n\n\n\n\nD&#39;autres échappements existent, mais ils seront abordés plus tard dans ce document, car ils appliquent des ordres précis et ne concernent pas les autres. Par exemple, la commande écho qui considère le point comme une évasion de la chaîne qui le suit. Quand la commande écho est directement suivie d’un point; elle considère la chaîne située après le point comme un affichage de la chaîne et renvoie la ligne incluse. Cela vous permet d’utiliser un mot au début de la chaîne qui aurait autrement été considéré comme un paramètre. Exemple avec le script 7.\n\n\n1.234567.89dix.11121314151617181920212223242526\n@écho de\n\nécho Afficher une ligne vide sans le point:\nécho\n\nécho.\nécho.\n\nécho Afficher une ligne vide avec le point:\nécho.\n\nécho.\nécho.\n\nécho Affichage de la chaîne &quot;/?  Impression cette aide. &quot;sans le point:\nécho     /?  Impression cette aide.\n\nécho.\nécho.\n\nécho Affichage de la chaîne &quot;/?  Impression cette aide. &quot;avec le point:\nécho.    /?  Impression cette aide.\n\nécho.\nécho.\npause\n\n\n\nDans l&#39;affichage ci-dessous, nous remarquons que l&#39;affichage d&#39;une ligne vide sans point renvoie l&#39;état de l&#39;affichage standard contrairement à celui avec un point. Si l&#39;emplacement d&#39;une ligne de retour avait été utilisé par plusieurs espaces, le résultat aurait été identique, quel que soit le nombre d&#39;espaces. En effet, l&#39;interprète n&#39;évalue pas le nombre d&#39;espaces entre deux composants d&#39;une ligne de commande, il aurait donc considéré qu&#39;aucun paramètre n&#39;était fourni. C&#39;est la même chose avec la chaîne /? Imprimer cette aide., l&#39;interprète considère la sous-chaîne /? en tant que paramètre qui affiche l&#39;aide dans la ligne de commande.\n\n\n\nLe tableau 2 résume les différents types d’échappement que nous venons de voir.\n\n\n\n\néchappement \n\n\nLa description \n\n\n\n\n^\n\n\nPlac devant l&#39;un des caractères spéciaux, soit &amp; ^ | &lt;&gt; ()cela signifie que le caractère qui le suit fait partie de la chaîne et n&#39;a rien à voir avec la commande.\n\n\n\n\nPlac devant une ligne de retour, cela signifie que la ligne suivante fait partie de la même commande.\n\n\n\n\n%\n\n\nPlac devant le personnage % dans un script, cela signifie que le caractère qui le suit fait partie de la chaîne.\n\n\n\n\n\n\nPlac devant l&#39;un des personnages  et &quot; dans un paramètre cité, cela signifie que le caractère qui le suit fait partie de l&#39;argument cité.\n\n\n\n\n.\n\n\nPlac immédiatement après la commande écho, cela signifie que la chaîne qui suit est une chaîne d&#39;affichage et non un paramètre de la commande écho.\n\n\n\n\nTableau 2: Échappement \n\nSI. Les bugs de la commande rem et du préfixe :: ▲\n\nUn problème récurrent dans script de batch est-ce que des commentaires et des commentaires (fournis via rem et ::) causer des bugs dus à une mauvaise utilisation. La commande rem et le préfixe :: en prenant une chaîne de caractères comme paramètres, ils attendent une chaîne de caractères valide. Ainsi, les échappements doivent être utilisés pour les caractères suivants: &amp; | ^ < > ()%.\n\n\n\nLes variables sont gérées via la commande ensemble, il existe deux types dont voici la liste:\n\nvariables de chaîne de caractères;\nnombre entier signe de variables.\n\nChaque type de variable est déclaré et marqué différemment; il est possible de les couler, c&#39;est-à-dire de les passer d&#39;un type à l&#39;autre, à condition de respecter les règles suivantes:\n\nune chaîne de caractères qui ne peut être numérique que si elle ne contient que des nombres;\nun nombre peut toujours être transtyp en une chaîne de caractères (qui ne contiendra que des nombres).\n\nLes variables sont accessibles via un identifiant qui leur est propre. Ainsi, chaque fois que cet identifiant est mentionné, l&#39;interpréteur pourra fournir la valeur associée. Cela peut être fait en utilisant le personnage % des deux côtés de l&#39;identifiant, on parle d&#39;expansion de la variable. Par exemple avec la variable CHEMIN (qui est une variable d’environnement: fournie par le système), pour obtenir sa valeur; la syntaxe doit être utilisée % CHEMIN% comme dans le script 8.\n\n\n1.23\n@écho de\nécho % CHEMIN%\npause\n\n\n\nCe qui produirait un affichage similaire à celui ci-dessous.\n\n\n\nLes identificateurs de variable ne sont pas sensibles à la casse, c&#39;est-à-dire que l&#39;interpréteur ne fait pas la différence entre les majuscules et les minuscules lorsqu&#39;il développe, crée ou modifie une variable. Donc les identifiants CHEMIN, Chemin et chemin identifier une seule et même variable.\nII-A. Variables d&#39;environnement ▲\n\nNous allons commencer par les variables d’environnement, elles sont toutes de type string. C&#39;est le système d&#39;exploitation qui définit leurs valeurs, soit parce que d&#39;un système à l&#39;autre, leurs valeurs peuvent être différentes, soit parce que ces variables sont définies de manière dynamique au fur et à mesure de leur développement. Cela permet d’accéder à des fichiers dont le chemin d’accès peut ne pas être identique d’une machine à l’autre ou d’obtenir, par exemple, l’heure ou la date dont les valeurs sont modifiées de façon permanente.\nDans le tableau 3, vous trouverez la liste de ces variables. Dans la première colonne, vous trouverez le nom de ces variables. ces noms sont réservés par le système et même s&#39;il est possible de changer leur valeur lors de l&#39;exécution du script, les modifications apportées prendront fin en même temps que le script. De plus, dans certains cas, la modification de leur valeur peut amener le script à mal évaluer l&#39;environnement. La deuxième colonne donne la description de la valeur renvoyée par la variable. Et enfin, la troisième colonne donne la compatibilité en fonction de la version du système. Dans cette colonne, les systèmes NT sont mentionnés, il s&#39;agit de la famille du système d&#39;exploitation. Les systèmes NT sont des systèmes basés sur un noyau de type NT à partir du système Windows du même nom. Cette famille comprend le jour où ces lignes sont écrites:\n\nSystèmes Windows NT X.Y (X étant la révision majeure et Y la révision mineure);\nSystèmes Windows 2000\nSystèmes Windows XP\nSystèmes Windows Server 2003\nSystèmes Windows Vista\nSystèmes Windows Server 2008\nSystèmes Windows 7\nSystèmes Windows Server 2012\net les systèmes Windows 8.\n\n\n\n\n\nVariable \n\n\nLa description \n\n\ncompatibilité \n\n\n\n\nAllUsersProfile\n\n\nRenvoie le chemin d&#39;accès complet au répertoire des données utilisateur commun à tous les utilisateurs. Par défaut: HomeDrive %%  ProgramData.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nDonnées d&#39;application\n\n\nRenvoie le répertoire de données d&#39;application commun sous la forme % UserProfile%  AppData  Roaming.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nCD\n\n\nRenvoie le chemin complet du répertoire dans lequel le script est exécuté. Ce répertoire peut être différent du répertoire dans lequel le script a démarré (s&#39;il a été déplacé au cours de son exécution).\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nCMDCMDLINE\n\n\nRenvoie la ligne de commande d&#39;origine qui a appelé l&#39;interpréteur de commandes.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nCMDEXTVERSION\n\n\nRenvoie le numéro de version des extensions de commande du processeur de commandes en cours.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nCommonProgramFiles\n\n\nRenvoie le chemin complet vers les applications 32 bits communes aux systèmes 32 bits ou les applications 64 bits vers 64 bits, telles que: % ProgramFiles%  Fichiers communs.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nCommonProgramFiles (x86)\n\n\nRenvoie le chemin complet du répertoire de fichiers communs 32bits sur les systèmes 64bits:% ProgramFiles (x86)%  Fichiers communs.\n\n\nDisponible uniquement sur les systèmes NT 64bits.\n\n\n\n\nProgramme commun W6432\n\n\nRenvoie le chemin complet du fichier commun des applications 16 bits sur les systèmes 64 bits et les systèmes Vista 32 bits et supérieurs: % ProgramW6432%  Fichiers communs.\n\n\nDisponible uniquement sur les systèmes NT 64 bits et les systèmes Vista 32 bits et supérieurs.\n\n\n\n\nNom de l&#39;ordinateur\n\n\nRenvoie le nom de l&#39;ordinateur sur lequel le script est exécuté.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nComSpec\n\n\nRenvoie le chemin complet de l&#39;interprète: % WinDir%  system32  cmd.exe.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nDaté\n\n\nRenvoie la date actuelle en utilisant le même format que la commande daté.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nErrorLevel\n\n\nRenvoie la valeur du code d&#39;erreur actuel. Cette valeur est modifiée après chaque ligne de commande, en fonction du résultat de la commande. En général, la variable ErrorLevel renvoie 1 ou plus en cas d&#39;erreur de la dernière commande et 0 si aucune erreur ne s&#39;est produite. Cependant, il arrive que ce comportement varie en fonction des commandes, il est donc recommandé de se reporter à l&#39;aide concernant cette commande.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nFP_NO_HOST_CHECK\n\n\nCAROLINE DU NORD.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nLe plus haut numéro de numéro de noeud\n\n\nRenvoie le numéro de nœud NUMA le plus élevé de l&#39;ordinateur sur lequel le script est exécuté.\n\n\nDisponible uniquement sur les systèmes NT 64bits.\n\n\n\n\nHomeDrive\n\n\nRenvoie le point de montage de la partition qui héberge les répertoires de l&#39;utilisateur. Par défaut: C:.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nHomePath\n\n\nRenvoie le chemin d&#39;accès au répertoire de l&#39;utilisateur actuellement connecté. Par défaut:  Utilisateurs % nom d&#39;utilisateur%.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nLocalAppData\n\n\nRenvoie le répertoire local des données d&#39;application sous la forme: % UserProfile%  AppData  Local.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nLogonServer\n\n\nRenvoie l&#39;URL locale du système d&#39;exploitation sous la forme \\% Nom de l&#39;ordinateur%.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nNUMBER_OF_PROCESSORS\n\n\nRenvoie le nombre de cœurs logiques sur l&#39;ordinateur sur lequel le script est exécuté.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nOS\n\n\nRenvoie le type de noyau sur lequel est basé le système d&#39;exploitation. Sur les systèmes NT, cette variable renvoie toujours la chaîne. Windows_NT.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nChemin\n\n\nRenvoie la liste des répertoires reconnus par le système comme contenant des exécutables. Chaque répertoire est répertorié par son chemin d&#39;accès complet, suffixé d&#39;un point-virgule. Si un exécutable se trouve dans l&#39;un des répertoires de cette liste, il n&#39;est pas nécessaire de fournir un chemin complet pour l&#39;appeler sur la ligne de commande.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nPATHEXT\n\n\nRetourne une liste des extensions de fichiers reconnues par le système comme étant à la fois des extensions de fichiers exécutables. Si une extension de fichier ne figure pas dans cette liste, le fichier ne peut pas être appelé en tant que commande.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nPROCESSOR_ARCHITECTURE\n\n\nRenvoie le type d&#39;architecture (32 / 64bits) du processeur sur lequel le script est exécuté. Les valeurs possibles sont: X86 pour les processeurs 32 bits, AMD64 pour les processeurs 64 bits basés sur l&#39;architecture x86 et IA64 pour les processeurs Itanium.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nPROCESSOR_IDENTIFIER\n\n\nRetourne une identification précise du processeur sur lequel le script est exécuté. Cette identification est une chaîne de caractères composée du type d&#39;architecture suivi de la famille, du modèle, de la révision et enfin du fabricant du processeur.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nPROCESSOR_LEVEL\n\n\nRetourne une identification précise de la famille de la micro-architecture du processeur.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nPROCESSOR_REVISION\n\n\nRenvoie un modèle de processeur spécifique et l&#39;identification de la révision sous la forme d&#39;une chaîne de caractères représentant un nombre hexadécimal à deux octets, le premier pour le modèle et le second pour la révision.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nDonnées de programme\n\n\nRenvoie le répertoire de données d&#39;application 64 bits commun sous la forme: % SystemDrive%  ProgramData.\n\n\nDisponible uniquement sur les systèmes NT 64bits.\n\n\n\n\nFichiers de programme\n\n\nRenvoie le chemin complet du répertoire ProgramFiles. Ce répertoire contient des applications 32 bits sur des systèmes 32 bits ou des applications 64 bits sur des systèmes 64 bits.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nProgramFiles (x86)\n\n\nRenvoie le chemin complet du répertoire ProgramFiles (x86). Ce répertoire contient des applications 32 bits sur des systèmes 64 bits.\n\n\nDisponible uniquement sur les systèmes NT 64bits.\n\n\n\n\nProgramW6432\n\n\nRenvoie le chemin complet du répertoire ProgramW6432. Ce répertoire contient les applications 16 bits sur les systèmes 64 bits et les systèmes Vista 32 bits et supérieurs.\n\n\nDisponible sur les systèmes NT 32 et 64bits Vista et supérieurs.\n\n\n\n\nRapide\n\n\nRenvoie la chaîne de configuration pour l&#39;affichage standard, par défaut: $ P $ G. Voir l&#39;aide de la commande rapide pour plus d&#39;informations: invite /?.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nPSModulePath\n\n\nRenvoie le chemin d&#39;accès complet aux modules PowerShell.\n\n\nDisponible uniquement sur Vista et les systèmes supérieurs. (XP avec mise à jour KB926140)\n\n\n\n\nPublique\n\n\nRenvoie le chemin complet du répertoire de documents publics sous la forme HomeDrive %%  Users  Public.\n\n\nDisponible uniquement sur Vista et les systèmes supérieurs. \n\n\n\n\nau hasard\n\n\nRetourne un nombre aléatoire compris entre 0 et 32767.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nNom de session\n\n\nRetourne le nom de la session en cours. Par défaut: Console.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nSystemDrive\n\n\nRenvoie le point de montage de la partition sur laquelle le système d&#39;exploitation est installé.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nRacineSystème\n\n\nRenvoie le chemin complet du système d&#39;exploitation sous la forme % SystemDrive%  Windows.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nTemp\n\n\nRenvoie le chemin d&#39;accès complet au répertoire de fichiers temporaires de l&#39;utilisateur. Par défaut: % UserProfile%  AppData  Local  Temp.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nTemps\n\n\nRenvoie l&#39;heure actuelle en utilisant le même format que la commande temps.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\ntmp\n\n\nMême temp.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nUserDomain\n\n\nRenvoie le nom de domaine de l&#39;ordinateur sur lequel le script est exécuté. Si le système n&#39;appartient pas à un domaine, le nom de domaine sera le nom de l&#39;ordinateur sur lequel le script est exécuté.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nNom d&#39;utilisateur\n\n\nRenvoie le nom de l&#39;utilisateur actuellement connecté.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nProfil de l&#39;utilisateur\n\n\nRenvoie le chemin d&#39;accès complet au répertoire d&#39;utilisateurs de l&#39;utilisateur actuellement connecté en tant que: HomeDrive %%  Users % nom_utilisateur%.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nWinDir\n\n\nRenvoie le chemin complet du répertoire d&#39;installation du système. Par défaut: % SystemDrive%  Windows.\n\n\nDisponible sur tous les systèmes NT.\n\n\n\n\nTableau 3: Variables d&#39;environnement \n\nII-B. L&#39;ensemble ▲\n\nLa commande ensemble variables gre dans l&#39;interpréteur, cela permet:\n\ncréer une variable;\nassigner une valeur à une variable\nmodifier le contenu d&#39;une variable;\nsupprimer le contenu d&#39;une variable;\neffectuer des opérations mathématiques ou logiques entre les nombres;\nRécupération de l&#39;entrée d&#39;un utilisateur pour la placer dans une variable\net jette le contenu d&#39;une variable.\n\nVoici la syntaxe de la commande ensemble.\nAttribuez une valeur à la variable sous forme de chaîne de caractères (o     est son identifiant et     est une chaîne de caractères).\nensemble [« ]&lt;variable&gt;=&lt;chane&gt;[« ]  \nAttribuez à la variable une valeur sous forme de signe de nombre entier (o     est une expression numérique à évaluer: détaillée plus loin).\nensemble /à [« ]&lt;expression&gt;[« ]  \nAttribuez à la variable une valeur, entrée par l&#39;utilisateur, sous forme de chaîne de caractères après l&#39;affichage de la chaîne d&#39;invite, le cas échéant (o     est son identifiant et o     est une chaîne de caractères indique à l&#39;utilisateur de l&#39;inviter à entrer une chaîne de clés).\nensemble / p [« ]&lt;variable&gt;=[[[[&lt;chane_invite&gt;][« ]  \nSupprime la valeur de la variable de mémoire, son identifiant reste indexé par l&#39;interpréteur, mais sa valeur est indéfinie.\nensemble [« ]&lt;variable&gt;=[« ]  \nVoici les règles habituelles de la commande ensemble:\n\nSi la commande ensemble est utilisé sans paramètre, il affiche les variables définies dans le contexte actuel (détaillé plus tard).\nS&#39;il est utilisé avec comme paramètre une chaîne (ou un nom de variable), sans valeur ni signe gal; il affiche ensuite la variable dont le nom correspond à la chaîne de paramètres donnée et / ou les variables dont le nom commence par la chaîne de paramètres donnée.\nSi elle est utilisée avec un nom de variable et un signe gal non valide, alors le contenu de la variable est vide de mémoire, il est possible de vérifier si une variable est définie, mais nous aborderons ce point dans le chapitre suivant.\nToute chaîne non numérique dans l&#39;expression de valeur est traitée comme un identificateur de variable et est convertie en un nombre avant d&#39;être utilisée (utilisée avec le paramètre /à), si la variable n’existe pas ou est indéfinie, elle prend la valeur 0.\nUne valeur d&#39;expression numérique doit toujours être placée entre guillemets pour permettre l&#39;utilisation d&#39;opérateurs logiques et d&#39;opérateurs de regroupement.\n\nRegardons de plus près le fonctionnement de la commande ensemble avec le script 9.\n\n\n1.234567.89dix.11121314151617181920\n@écho de\nensemble VAR_Espace_Un=&quot;Ma chaine avec des espaces&quot;\nensemble VAR_Espace_Deux &quot;=Mon canal avec des espaces &quot;\nensemble &quot;VAR_Espace_Trois=Mon canal avec des espaces &quot;\n\nensemble / p VAR_Saisie_Un=    ma première saisie:    \nensemble / p &quot;VAR_Saisie_Two=    ma saisie deux: &quot;\nensemble / a VAR_Calcul_Un=1 + 10\nensemble / a VAR_Calcul_Two &quot;=2 + 20 &quot;\nensemble / a &quot;VAR_Calcul_Trois=3 + 30 &quot;\nécho.\nécho %% VAR_Espace_Un\nécho %% VAR_Espace_Deux\nécho %% VAR_Espace_Trois\nécho.\nensemble VAR_Saisie\nécho.\nensemble VAR_Calcul\nécho.\npause\n\n\n\n\n\n\nComme vous pouvez le constater, les guillemets occupent une place de choix dans ce script. observez où ils sont placés. De la ligne 2 à la ligne 4, les valeurs des variables sont des chaînes de caractères avec des espaces. La déclaration de la variable VAR_Espace_Un se fait avec des guillemets placés des deux côtés de la chaîne, la déclaration de la variable VAR_Espace_Deux se fait avec des guillemets: une place devant le signe gal et l’autre au bout de la chaîne; la déclaration de la troisième variable VAR_Espace_Trois se fait avec des guillemets: un avant le nom de la variable et l’autre en fin de ligne. Si nous nous référons à l&#39;affichage obtenu, nous remarquons que les première et troisième variables affichent une sortie correcte; la seconde variable quand ça ne marche pas; il est donc facile de déduire que si les guillemets s&#39;ouvrent avant l&#39;identifiant de la variable et se ferment après la valeur de la variable, ils ne font pas partie de la variable; et si les guillemets s’ouvrent avant la valeur de la variable et se ferment après la valeur de la variable, ils font partie de la variable.\nLes deux saisies de l&#39;utilisateur ont également abouti à un résultat intéressant, la ligne de commande qui décline VAR_Saisie_Un n&#39;utilisez pas de guillemets; par contre the line of order VAR_Saisie_Deux, elle, en utilise. Lors de l&#39;affichage des invitations de saisie utilisateur, les espaces se sont mutés avant les chaînes d&#39;invités ont disparu, et ceux-ci se sont après affichés. Sur les espaces en début de ligne sont ignorés et ceux de la fin sont considérés comme faisant partie de la chaîne d&#39;invitation.\nEn ce qui concerne les variables VAR_Calcul_XXX, elles sont toutes préférables mais respectent également les règles de syntaxe; c’est &#8211; dire toujours mettre l’expression numérique entre guillemets. Cela sera utile dans la suite du chapitre.\n\nII-C. Les variables de type chane de caractères ▲\n\nCe sont, mon sens, les plus utilise en batch. Ce sont toutes les variables composées de caractères alphanumériques et autres caractères. Les chansons de caractères sont claires via la commande ensemble et il n&#39;est pas nécessaire d&#39;utiliser des guillemets pour que les espaces soient pris en compte, en tant que partie intégrante de la chaîne, et ce, ce sont eux qui sont placés dans la chaîne.\nElles offrent aussi d&#39;autres possibilités comme la substitution de chaîne dans l&#39;expansion de la variable. Ainsi avec la syntaxe suivante, il est possible de modifier la variable lors de son expansion sans que cela ne soit que sa valeur (o     est l&#39;identifiant de la variable,     is the chane remplacer et     est la chane inser la place de ). Exemple avec le script 10.\n%:=%  \n\n\n1.23456\n@écho de\nensemble &quot;X=une chane &quot;\nécho La variable avec substitution: % X: une = ma%\nécho La valeur réelle de la variable: %X%\nécho.\npause\n\n\n\n\n\n\n    peut aussi tre une chane prcde d&#39;un astrisque (*), dans ce cas, la substitution commence par la valeur de la variable et se termine après la première occurrence de la chaîne spéciale dans la substitution. Exemple avec le script 11.\n\n\n1.2345\n@écho de\nensemble &quot;X=chaîne&quot;\nécho Substitution avec astrisque: % X: * t = d%\nécho.\npause\n\n\n\n\n\n\nIl ne faut jamais utiliser un astrisque seul dans la substitution, sans quoi, l&#39;interprète de commande se ferme sans autre forme de procs. L &#39;astrisque en fin de chaîne ne provoque pas d&#39; erreur, mais ne permet pas la substitution, la variable est étendue avec sa valeur d &#39;origine.\nLa substitution ne modifie pas la valeur de la variable, elle transforme juste la variable au moment de l&#39;expansion. Pour modifier la valeur de la variable, il faut faire avec la commande ensemble. Exemple avec le script 12.\n\n\n1.23456\n@écho de\nensemble &quot;VAR=ma chane &quot;\nécho % VAR%\nensemble &quot;VAR=% VAR: chane = voiture%&quot;\nécho % VAR%\npause\n\n\n\n\n\n\nVous pouvez aussi ne pas développer une partie d&#39;une chanson en slectionnant les caractères voulus. Cela se fait via la syntaxe suivante (o     est l&amp;#39;identifiant de la variable,     est l&amp;#39;index du premier caractre en partant de 0 et     est la longueur de la slection). Exemple avec le script 13.\n%:~,% \n\n\n1.23456\n@écho de\nensemble &quot;VAR=ma chane&quot;\nécho %VAR:~0,2%\nensemble &quot;VAR=%VAR:~3,6%&quot;\nécho %VAR%\npause\n\n\n\n\n\n\nSi la     n&amp;#39;est pas spcifie, tout le reste de la chane est slectionn, en partant du caractre fourni en . Si une des valeurs donnes est ngative, alors la valeur utilise est la longueur totale de la chane ajoute  la valeur ngative.\n\n\n1.234567.89dix.11\n@écho de\n\nensemble &quot;VAR=ma chane&quot;\n\nécho %VAR:~-6%\n\n\nécho %VAR:~0,-7%\n\n\npause\n\n\n\n\n\n\nII-D. Les variables de type nombre entier sign▲\n\nThe command set /a permet d&amp;#39;utiliser les nombres entiers signs allant de -2147483648  +2147483647 (cods sur 32bits). Si vous n&amp;#39;utilisez pas le paramtre /a dans la commande, alors la squence de chiffres sera considre comme tant une chane de caractres, et non un nombre. La syntaxe de la commande set /a est la suivante.\nensemble /a &lt;expression&gt;  \n    utilise, quant  elle, la syntaxe suivante.\n[« ]&lt;s&#39;identifier&gt;[[[[&lt;affectation&gt;[{[{[{[&lt;sous-expression&gt;]][« ]  \nLes expressions numriques doivent tre places entre des guillemets si elles contiennent des oprateurs logiques ou de groupement (dtaill plus loin dans ce chapitre). Ces diffrentes constituantes sont:\n\n    qui est l&amp;#39;identifiant de la variable de destination;\n    qui est l&amp;#39;oprateur d&amp;#39;attribution de l&amp;#39;expression, comme le signe gal qui effectue l&amp;#39;opration d&amp;#39;attribuer une valeur  une variable, d&amp;#39;autres oprateurs d&amp;#39;attribution seront dtaills dans cette section;\npuis soit     qui est une valeur immdiate (un nombre quelconque), soit     qui est une sous-expression, ces dernires seront dtailles dans le reste de cette section.\n\nVous pouvez spcifier plusieurs expressions en les sparant par des virgules.\n\n@écho de\nensemble /a &quot;VAR1=1&quot;, &quot;VAR2=2&quot;\nécho VAR1: %VAR1%\nécho VAR2: %VAR2%\npause\n\n\n\n\nLes chanes de caractres prsentes dans l&amp;#39;expression sont considres comme des variables et sont expanses ( l&amp;#39;exception de l&amp;#39;identifiant de la variable de destination), cela permet de faire des oprations sur des variables sans avoir  utiliser de symbole % pour leur expansion.\n\n@écho de\nensemble /a &quot;VAR1=1&quot;\nensemble /a &quot;VAR2=VAR1&quot;\nécho VAR1: %VAR1%\nécho VAR2: %VAR2%\npause\n\n\n\n\nSi un nom de variable inexistante ou indfinie est utilis, alors elle prend la valeur 0.\n\n\n1.2345\n@écho de\n\nensemble /a &quot;VAR2=VAR1&quot;\nécho VAR2: %VAR2%\npause\n\n\n\n\n\n\nLes sous-expressions sont constitues de nombres, d&amp;#39;oprateurs et ventuellement de parenthses, ces dernires s&amp;#39;utilisent de la mme manire qu&amp;#39;en mathmatiques et elles n&amp;#39;ont pas besoin d&amp;#39;tre chappes si, et seulement si, les guillemets sont utiliss. Toutes les constituantes d&amp;#39;une sous-expression sont soumises  la prsance, c&amp;#39;est&#8211;dire l&amp;#39;ordre dans lequel les diverses constituantes vont tre values. L&amp;#39;ordre de prsance utilis est le suivant (dans l&amp;#39;ordre dcroissant d&amp;#39;valuation):\n\nle groupement soit ( );\nles oprateurs unaires ! ~ &#8211;;\nles oprateurs arithmtiques * / %;\nles oprateurs arithmtiques + &#8211;;\nle dcalage logique &lt;< >&gt;;\nle ET au niveau du bit Et;\nle OU exclusif au niveau du bit ^;\nle OU inclusif au niveau du bit |;\nl&amp;#39;&amp;#39;attribution = *= /= %= += -= &amp;= ^= |= &lt;&gt;=;\nle sparateur d&amp;#39;expression ,.\n\nIl faut galement noter que l&amp;#39;utilisation du nombre -2147483648 tel quel dans une expression provoque une erreur, c&amp;#39;est d au transtypage effectu par l&amp;#39;interprteur. Ce dernier value d&amp;#39;abord la chane 2147483648 afin de la transtyper puis lui applique l&amp;#39;oprateur unaire &#8211;. Mais comme le nombre 2147483648 va au-del de la dfinition d&amp;#39;un nombre sur 32bits, l&amp;#39;opration gnre une erreur, exemple avec le script suivant.\n\n\n1.234567.89dix.\n@écho de\nécho Nombre brute:\nensemble /a &quot;ParseError=-2147483648&quot;\nécho %ParseError%\necho.\nécho Nombre avec valuation:\nensemble /a &quot;ParseError=-2147483647 - 1&quot;\nécho %ParseError%\necho.\npause\n\n\n\n\n\n\nUne autre mthode qui fonctionne pour ce cas est la suivante.\n\n\n1.2345\n@écho de\nensemble &quot;SInt32=-2147483648&quot;\nensemble /a &quot;SInt32&quot;\nécho %SInt32%\npause\n\n\n\n\n\n\nII-D-1. Les oprations arithmtiques▲\n\nThe command set /a prend en charge les cinq oprations arithmtiques suivantes:\n\nl&amp;#39;addition;\nla soustraction;\nla multiplication;\nla division;\net le modulo (le modulo est une opration qui sert  rcuprer le reste d&amp;#39;une division).\n\n\n\n\n\nOprateur arithmtique \n\n\nOprateur d&amp;#39;attribution \n\n\nOpration effectue \n\n\n\n\n+\n\n\n+=\n\n\nUne addition\n\n\n\n\n&#8211;\n\n\n-=\n\n\nSoustraction\n\n\n\n\n*\n\n\n*=\n\n\nMultiplication\n\n\n\n\n/\n\n\n/=\n\n\nDivision\n\n\n\n\n%\n\n\n%=\n\n\nModulo\n\n\n\n\nTableau 4: Oprations arithmtiques \nUne note particulire pour le modulo: dans un script de commande, le symbole du modulo % doit tre prfix du caractre d&amp;#39;chappement %. Dans ce cas, c&amp;#39;est un pige dans lequel le novice peut se perdre, le premier symbole % est un caractre d&amp;#39;chappement qui permet au deuxime symbole %, le modulo, d&amp;#39;tre pris en compte  l&amp;#39;excution du script. Dans l&amp;#39;interprteur de commande, le modulo (%) n&amp;#39;as pas besoin d&amp;#39;tre chapp, c&amp;#39;est une spcificit du script. Ainsi la commande suivante fonctionne dans l&amp;#39;interprteur.\nensemble /a &quot;Mod=5 % 2&quot;  \nAlors que celle-ci ne fonctionne pas.\nensemble /a &quot;Mod=5 %% 2&quot;  \n\n\n\nDans un script, par contre, c&amp;#39;est l&amp;#39;inverse.\n\n\n1.23456\n@écho de\nensemble /a &quot;Mod=5 % 2&quot;\nécho Mod1: %Mod%\nensemble /a &quot;Mod=5 %% 2&quot;\nécho Mod2: %Mod%\npause\n\n\n\n\n\n\nAinsi, les oprations arithmtiques s&amp;#39;utilisent de manire classique dans les sous-expressions. Si une variable inexistante ou indfinie est utilise dans une sous-expression, elle prend la valeur 0, exemple avec le script 21.\n\n\n1.234567.89dix.111213\n@écho de\nensemble /a &quot;Un=1&quot;\nensemble /a &quot;Deux=1 + 1&quot;\nensemble /a &quot;Trois=4 - 1&quot;\nensemble /a &quot;Quatre=2 * 2&quot;\nensemble /a &quot;Cinq=10 / 2&quot;\nensemble /a &quot;Six=26 %% 10&quot;\nensemble /a &quot;Sept=(( 2 + 1 ) * 2 ) + 1&quot;\n\nensemble /a &quot;Huit=8+Dix&quot;,&quot;Neuf=10-Un&quot;\nécho %Un%, %Deux%, %Trois%, %Quatre%, %Cinq%, %Six%, %Sept%, %Huit%, %Neuf%\necho.\npause\n\n\n\n\n\n\nL&amp;#39;attribution permet d&amp;#39;effectuer des oprations sur des variables existantes, si une variable inexistante ou indfinie est utilise, elle prend la valeur 0.\n\n\n1.234567.89dix.1112\n@écho de\nensemble /a &quot;Attrib1=1&quot;,&quot;Attrib2=2&quot;,&quot;Attrib3=3&quot;,&quot;Attrib4=4&quot;,&quot;Attrib5=5&quot;\n\nensemble /a &quot;Attrib0+=1&quot;\nensemble /a &quot;Attrib1+=1&quot;\nensemble /a &quot;Attrib2*=2&quot;\nensemble /a &quot;Attrib3-=2&quot;\nensemble /a &quot;Attrib4/=2&quot;\nensemble /a &quot;Attrib5%%=2&quot;\nécho %Attrib0%, %Attrib1%, %Attrib2%, %Attrib3%, %Attrib4%, %Attrib5%\necho.\npause\n\n\n\n\n\n\nII-D-2. Les oprations logiques▲\n\nElles ne peuvent s&amp;#39;effectuer que sur des nombres et suivent les rgles de l&amp;#39;algbre de Boole. Les oprations logiques prises en charge par la commande set /a possdent, elles aussi, des oprateurs d&amp;#39;attribution. Exemple avec le script 23.\n\n\n\n\nOprateur logique \n\n\nOprateur d&amp;#39;attribution \n\n\nLa description \n\n\n\n\nEt\n\n\n&amp;=\n\n\nET logique au niveau du bit. (Bitwise AND)\n\n\n\n\n^ \n\n\n^=\n\n\nOU exclusif au niveau du bit. (Bitwise XOR)\n\n\n\n\n|\n\n\n|=\n\n\nOU inclusif au niveau du bit. (Bitwise OR)\n\n\n\n\n&lt;&lt;\n\n\n&lt;&lt;=\n\n\nDcalage logique vers la gauche. Le bit entrant est  zro (pour l&amp;#39;lvation par puissances de deux).\n\n\n\n\n&gt;&gt;\n\n\n&gt;&gt;=\n\n\nDcalage logique vers la droite. Le bit entrant est gal au bit de signe (pour la propagation du bit de signe).\n\n\n\n\nTableau 5: Les oprateurs logiques \n\n@écho de\nensemble /a &quot;Val1=-2147483647 - 1&quot;\nensemble /a &quot;Val2=1&quot;\nensemble /a &quot;Val1SwitchL01=Val1&lt;&lt;1&quot;,&quot;Val1SwitchL15=Val1&lt;&lt;15&quot;,&quot;Val1SwitchL31=Val1&lt;&lt;31&quot;\nensemble /a &quot;Val2SwitchL01=Val2&lt;&lt;1&quot;,&quot;Val2SwitchL15=Val2&lt;&lt;15&quot;,&quot;Val2SwitchL31=Val2&lt;&lt;31&quot;\nensemble /a &quot;Val1SwitchR01=Val1&gt;&gt;1&quot;,&quot;Val1SwitchR15=Val1&gt;&gt;15&quot;,&quot;Val1SwitchR31=Val1&gt;&gt;31&quot;\nensemble /a &quot;Val2SwitchR01=Val2&gt;&gt;1&quot;,&quot;Val2SwitchR15=Val2&gt;&gt;15&quot;,&quot;Val2SwitchR31=Val2&gt;&gt;31&quot;\nensemble /a &quot;Val1AttribSwitchR=Val1&quot;,&quot;Val1AttribSwitchR&gt;&gt;=15&quot;\nensemble /a &quot;Val2AttribSwitchL=Val2&quot;,&quot;Val2AttribSwitchL&lt;&lt;=15&quot;\nécho %Val1% ^&lt;^&lt; 1: %Val1SwitchL01%\nécho %Val1% ^&lt;^&lt; 15: %Val1SwitchL15%\nécho %Val1% ^&lt;^&lt; 31: %Val1SwitchL31%\necho.\nécho %Val2% ^&lt;^&lt; 1: %Val2SwitchL01%\nécho %Val2% ^&lt;^&lt; 15: %Val2SwitchL15%\nécho %Val2% ^&lt;^&lt; 31: %Val2SwitchL31%\necho.\nécho %Val1% ^&gt;^&gt; 1: %Val1SwitchR01%\nécho %Val1% ^&gt;^&gt; 15: %Val1SwitchR15%\nécho %Val1% ^&gt;^&gt; 31: %Val1SwitchR31%\necho.\nécho %Val2% ^&gt;^&gt; 1: %Val2SwitchR01%\nécho %Val2% ^&gt;^&gt; 15: %Val2SwitchR15%\nécho %Val2% ^&gt;^&gt; 31: %Val2SwitchR31%\necho.\nécho %Val1% ^&gt;^&gt;= 15: %Val1AttribSwitchR%\nécho %Val2% ^&lt;^&lt;= 15: %Val2AttribSwitchL%\necho.\nensemble /a &quot;Val3=1431655765&quot;\nensemble /a &quot;Val4=-858993460&quot;\nensemble /a &quot;Val3LogicalOrVal4=Val3 | Val4&quot;\nensemble /a &quot;Val3LogicalXorVal4=Val3 ^ Val4&quot;\nensemble /a &quot;Val3LogicalAndVal4=Val3 Et Val4&quot;\nensemble /a &quot;Val3AttribOrVal4=Val3&quot;,&quot;Val3AttribOrVal4|=Val4&quot;\nensemble /a &quot;Val3AttribXorVal4=Val3&quot;,&quot;Val3AttribXorVal4^=Val4&quot;\nensemble /a &quot;Val3AttribAndVal4=Val3&quot;,&quot;Val3AttribAndVal4Et=Val4&quot;\nécho %Val3% ^| %Val4%: %Val3LogicalOrVal4%\nécho %Val3% ^|= %Val4%: %Val3AttribOrVal4%\necho.\nécho %Val3% ^^ %Val4%: %Val3LogicalXorVal4%\nécho %Val3% ^^= %Val4%: %Val3AttribXorVal4%\necho.\nécho %Val3% ^Et %Val4%: %Val3LogicalAndVal4%\nécho %Val3% ^Et= %Val4%: %Val3AttribAndVal4%\necho.\npause\n\n\n\n\nII-D-3. Les oprateurs unaires▲\n\nN.B.: Dans les sections II.D.3, II.ELes nombres entiers signs en notation hexadcimale et II.FLes nombres entiers signs en notation octale de ce document, sont abords diffrents concepts de reprsentation numrique communment utiliss en informatique, tels que:\n\nl&amp;#39;criture de nombre en binaire;\nl&amp;#39;criture de nombre en hexadcimal;\nl&amp;#39;criture de nombre en octal;\nla reprsentation des nombres en complment  un;\nla reprsentation des nombres entiers signs en complment  deux.\n\nIl est donc ncessaire, si vous ne les connaissez pas, de faire des recherches sur Wikipdia.\nLes oprateurs unaires ne s&amp;#39;appliquent qu&amp;#39;aux nombres qu&amp;#39;ils prcdent, ils ne possdent donc pas d&amp;#39;oprateur d&amp;#39;attribution. Leur syntaxe est la suivante (o     est l&amp;#39;oprateur unaire et     est le nombre auquel il s&amp;#39;applique).\n&lt;unaire&gt;&lt;nombre&gt;  \n\n\n\n\nOprateur unaire \n\n\nLa description \n\n\n\n\n!\n\n\nNON logique, renvoie 1 si le nombre est gal  0 et 0 sinon. (Logical NOT).\n\n\n\n\n~\n\n\nNON au niveau du bit, complment  un. (Bitwise NOT)\n\n\n\n\n&#8211;\n\n\nRenvoie la valeur inverse, soit un nombre ngatif si le nombre d&amp;#39;origine est positif, complment  deux. (NEG)\n\n\n\n\nTableau 6: Les oprateurs unaires \nExemple avec le script 24.\n\n\n1.234567.89dix.111213141516171819202122232425262728293031.323334\n@écho de\n\n\n\nensemble /a &quot;Val1=2147483647&quot;\nensemble /a &quot;Val2=1&quot;\nensemble /a &quot;Val3=0&quot;\n\nensemble /a &quot;LogicalNOT_Val1=!Val1&quot;\nensemble /a &quot;LogicalNOT_Val2=!Val2&quot;\nensemble /a &quot;LogicalNOT_Val3=!Val3&quot;\n\nensemble /a &quot;BitwiseNOT_Val1=~Val1&quot;\nensemble /a &quot;BitwiseNOT_Val2=~Val2&quot;\nensemble /a &quot;BitwiseNOT_Val3=~Val3&quot;\n\nensemble /a &quot;NEG_Val1=-Val1&quot;\nensemble /a &quot;NEG_Val2=-Val2&quot;\nensemble /a &quot;NEG_Val3=-Val3&quot;\n\nécho              ╔════════════════════════════════════════╗\nécho              ║                 Nombre                 ║\nécho ╔════════════╬═════════════╦═════════════╦════════════╣\nécho ║ Oprateur  ║ %Val1%  ║      %Val2%      ║     %Val3%      ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ LogicalNOT ║ %LogicalNOT_Val1%           ║ %LogicalNOT_Val2%           ║ %LogicalNOT_Val3%          ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ BitwiseNOT ║ %BitwiseNOT_Val1% ║ %BitwiseNOT_Val2%          ║ %BitwiseNOT_Val3%         ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ NEG        ║ %NEG_Val1% ║ %NEG_Val2%          ║ %NEG_Val3%          ║\nécho ╚════════════╩═════════════╩═════════════╩════════════╝\n\necho.\npause\n\n\n\n\n\n\n\nII-E. Les nombres entiers signs en notation hexadcimale▲\n\nLes nombres en notation hexadcimale doivent tre dclars comme des nombres entiers en notation dcimale (ce que nous avons utilis jusqu&amp;#39; maintenant) avec la commande set /a &quot;&quot; et toujours tre prfixs par 0x (chiffre zro suivi de la lettre x). The command set /a a pour effet de transformer toutes les valeurs entres en valeurs numriques. Si c&amp;#39;est une chane de caractres alors la commande cherchera une variable portant ce nom, si c&amp;#39;est un nombre hexadcimal alors la commande set /a codera le nombre tel quel en binaire. Cependant, mme si un nombre est fourni en notation hexadcimale, l&amp;#39;interprteur l&amp;#39;expanse toujours en notation dcimale, exemple avec le script 25.\n\n\n1.2345\n@écho de\n\nensemble /a &quot;Hexa=0x1 + 0x3&quot;\nécho Rsultat:    %Hexa%\npause\n\n\n\n\n\n\nLe rsultat du script 25 nous montre que le calcul s&amp;#39;effectue correctement, de mme avec le script 26.\n\n\n1.23456\n@écho de\n\nensemble /a &quot;Hexa=0x5 + 0x8&quot;\n\nécho Rsultat:    %Hexa%\npause\n\n\n\n\n\n\nJusque-l tout va bien mme si le rsultat n&amp;#39;est pas en notation hexadcimale, il est quand mme celui attendu. Le problme c&amp;#39;est que l&amp;#39;interprteur de commande utilise toujours la reprsentation en complment  deux pour coder un nombre entier sign. Ainsi, ds lors que l&amp;#39;on utilise un nombre en notation hexadcimale suprieur  0x7FFFFFFF (soit 2147483647 en notation dcimale), ce nombre est en fait un nombre ngatif comme le montre le script 27.\n\n\n1.234\n@écho de\nensemble /a &quot;Hexa=0x80000000&quot;\nécho Rsultat:    %Hexa%\npause\n\n\n\n\n\n\nUn rsultat plutt droutant pour quiconque ne s&amp;#39;y attend pas, en effet la reprsentation en complment  deux code les nombres ngatifs de 0xFFFFFFFF, soit -1,  0x80000000, soit -2147483648. Exemple avec le script 28.\n\n\n1.23456\n@écho de\n\nensemble /a &quot;Hexa=0x80000000 + 0x7FFFFFFF&quot;\n\nécho Rsultat:    %Hexa%\npause\n\n\n\n\n\n\nComme vous pouvez le voir, on additionne 0x80000000 (soit -2147483648 en reprsentation hexadcimale en complment  deux)  0x7FFFFFFF (soit +2147483647, toujours dans la mme reprsentation) ce qui nous donne le rsultat de -1, le rsultat est un nombre entier sign dcimal utilisant la reprsentation en complment  deux cod sur 32bits soit 0xFFFFFFFF. Pour rcuprer un nombre hexadcimal, il faut le calculer  l&amp;#39;aide d&amp;#39;un algorithme de divisions successives; et pour les nombres ngatifs, de l&amp;#39;oprateur unaire Bitwise NOT dont dispose la commande set /a, voir le script 29.\n\n\n1.234567.89dix.111213141516171819202122232425262728293031.323334353637383940414243444546\n@écho de\n\nensemble &quot;SInt32=-2147483648&quot;\n\nensemble /a &quot;SInt32&quot;\n\nensemble /a &quot;SInt32=~SInt32&quot;\n\n\nensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;\n\nensemble /a &quot;Nibble0=15 - Nibble0&quot;\nensemble /a &quot;Nibble1=15 - Nibble1&quot;\nensemble /a &quot;Nibble2=15 - Nibble2&quot;\nensemble /a &quot;Nibble3=15 - Nibble3&quot;\nensemble /a &quot;Nibble4=15 - Nibble4&quot;\nensemble /a &quot;Nibble5=15 - Nibble5&quot;\nensemble /a &quot;Nibble6=15 - Nibble6&quot;\nensemble /a &quot;Nibble7=15 - Nibble7&quot;\n\nensemble &quot;LSW=%Nibble3% %Nibble2% %Nibble1% %Nibble0%&quot;\n\nensemble &quot;MSW=%Nibble7% %Nibble6% %Nibble5% %Nibble4%&quot;\nécho %MSW% %LSW%\n\nensemble &quot;SInt32=2147483647&quot;\nensemble /a &quot;SInt32&quot;\nensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;\nensemble &quot;LSW=%Nibble3% %Nibble2% %Nibble1% %Nibble0%&quot;\nensemble &quot;MSW=%Nibble7% %Nibble6% %Nibble5% %Nibble4%&quot;\nécho %MSW% %LSW%\npause\n\n\n\n\n\n\nLa sortie du script 29 nous donne bien des nombres hexadcimaux, mais dans une reprsentation dcimale (80000000 soit -2147483648 cod 0x80000000 et 715151515151515 soit 2147483647 cod 0x7FFFFFFF), pour pouvoir les convertir dans une notation hexadcimale; il nous faut utiliser les conditions que nous tudierons au prochain chapitre.\n\nII-F. Les nombres entiers signs en notation octale▲\n\nLes nombres en notation octale fonctionnent comme les autres et supportent les mmes oprations. Pour tre considrs par l&amp;#39;interprteur comme des nombres en notation octale, ils doivent tre prfixs par 0 (chiffre zro). Ils vont donc de -2147483648  2147483647 (cods sur 32bits) soit en notation octale -020000000000  +017777777777. Les nombres en notation octale sont cods tels quels en binaire, mais le principe selon lequel tout nombre est expans en entier sign en notation dcimale cod en complment  deux s&amp;#39;applique aussi pour eux. Notez aussi qu&amp;#39;ils ont le mme problme de transtypage que les nombres dcimaux, exemple avec le script 30.\n\n@écho de\nensemble /a &quot;Octal1=-017777777777 - 1&quot;\nensemble /a &quot;Octal2=017777777777&quot;\nensemble /a &quot;Octal3=Octal1 + Octal2&quot;\nécho Octal1: %Octal1%\nécho Octal2: %Octal2%\nécho Octal3: %Octal3%\npause\n\n\n\n\nNotez aussi que l&amp;#39;utilisation des nombres 08 et 09 gnre toujours une erreur du fait qu&amp;#39;ils sont prfixs par 0; et, que 8 et 9 ne sont pas des chiffres octaux. Lorsque la commande set /a rencontre un 0 en dbut de nombre, elle considre que tous les chiffres qui se trouvent aprs sont des octaux et lorsqu&amp;#39;elle rencontre 8 ou 9, le transtypage ne peut s&amp;#39;effectuer et la commande se termine sur une erreur. Exemple avec le script 31.\n\n@écho de\nécho Nombre 08:\nensemble /a &quot;Octal1=08&quot;\necho.\nécho Nombre 09:\nensemble /a &quot;Octal1=09&quot;\necho.\npause\n\n\n\n\n\n\nLes conditions sont supportes par la commande si. Elle permet d&amp;#39;effectuer des comparaisons de toutes sortes et d&amp;#39;excuter des commandes en fonction du rsultat de cette comparaison. autre et sinon si sont, quant  eux, des paramtres de la commande si et ne peuvent tre utiliss qu&amp;#39; l&amp;#39;intrieur de la commande si.\nIII-A. If, else, else if, not et /i▲\n\nThe command si se traduit simplement par si: si la condition est vraie, fais ceci; elle peut tre accompagne par le paramtre autre qui se traduit par sinon: si la condition est vraie, fais ceci, sinon fais cela. La syntaxe de la commande si est la suivante.\nsi &lt;chattedition&gt; &lt;commande1&gt; [[[[autre &lt;commande2&gt;]  \nComme vous pouvez le voir sur la syntaxe de la commande si, si vient en premier suivi de sa     et d&amp;#39;une commande (), puis vient autre et une commande (), on peut le traduire par:\n\nsi (si) la     se vrifie alors la     s&amp;#39;excute;\nsinon (autre) c&amp;#39;est la     qui s&amp;#39;excute.\n\nLe paramtre autre ne peut tre utilis seul, il doit toujours tre utilis avec la commande si, et tre sur la mme ligne. Il y a deux rgles importantes  garder en tte lorsqu&amp;#39;on utilise des conditions:\n\nla premire est que l&amp;#39;on ne peut utiliser qu&amp;#39;un maximum de 2048 caractres (sous Windows XP et infrieur) ou un peu plus de 4096 caractres (sous Windows Vista et suprieur) par ligne de commande, limite trs vite atteinte avec plusieurs conditions, plus leurs commandes et leurs paramtres;\net la deuxime est que les parenthses sont prises en compte par l&amp;#39;interprteur de commande comme des oprateurs de bloc, c&amp;#39;est pour cela qu&amp;#39;il faut les chapper lorsque l&amp;#39;on ne s&amp;#39;en sert pas  cette fin.\n\nLes oprateurs de bloc permettent d&amp;#39;utiliser un bloc de commande en lieu et place d&amp;#39;une commande. Ainsi, chaque fois que la syntaxe autorise l&amp;#39;utilisation d&amp;#39;une commande, celle-ci peut tre remplace par un bloc de commandes.\nAinsi la syntaxe de la commande si peut tre modifie de la manire suivante.\n\nSyntaxe des conditions if et else avec parenthses\nSélectionnez\n\nsi &lt;chattedition&gt; (\n    &lt;commande1&gt;\n    &lt;commande2&gt;\n) autre (\n    &lt;commande3&gt;\n    &lt;commande4&gt;\n)\n\nL&amp;#39;utilisation des parenthses comme oprateurs de bloc permet d&amp;#39;excuter plusieurs commandes, par condition vrifie, au lieu d&amp;#39;une seule. La parenthse ouvrante associe  une condition doit se trouver sur la mme ligne que cette dernire; si une autre condition est utilise conjointement, alors elle doit se trouver sur la mme ligne que la parenthse fermante associe  la condition qui la prcde.\nThe command si autorise aussi le paramtre sinon si qui se traduit par sinon si, ce dernier permet de poser une condition supplmentaire avant l&amp;#39;excution ventuelle du autre. La syntaxe serait la suivante.\nsi &lt;chattedition1&gt; &lt;cmd1&gt; [[[[autre si &lt;chattedition2&gt; &lt;cmd2&gt;][[[[autre &lt;cmd3&gt;]  \nLes oprateurs de bloc fonctionnent de la mme manire avec le paramtre sinon si en plus. Il faut aussi noter que le paramtre sinon si peut tre utilis autant de fois que l&amp;#39;on veut dans la commande si.\n\nSyntaxe des conditions if, else if et else\nSélectionnez\n\nsi &lt;chattedition1&gt; (\n    &lt;commande1&gt;\n    &lt;commande2&gt;\n) autre si &lt;chattedition2&gt; (\n    &lt;commande3&gt;\n    &lt;commande4&gt;\n) autre si &lt;chattedition3&gt; (\n    &lt;commande5&gt;\n    &lt;commande6&gt;\n) autre (\n    &lt;commande7&gt;\n    &lt;commande8&gt;\n)\n\nLa syntaxe ci-dessus pourrait tre traduite par:\n\nsi (si) la     est vraie: excuter     et ;\nsinon si (sinon si)     est vraie: excuter     et ;\nsinon si (sinon si)     est vraie: excuter     et ;\nsinon (autre): excuter     et .\n\nLes conditions associes  la commande si et au paramtre sinon si prennent le modificateur ne pas qui permet d&amp;#39;excuter une commande si la condition est fausse. Le modificateur ne pas ne s&amp;#39;applique pas  toutes les conditions de la mme structure de contrle. Si le paramtre sinon si est utilis conjointement, son comportement dpendra de la prsence, ou non, du modificateur ne pas  l&amp;#39;intrieur de la condition.\nsi ne pas &lt;chattedition1&gt; &lt;cmd1&gt; autre si &lt;chattedition2&gt; &lt;cmd2&gt; autre &lt;cmd3&gt;  \nLa commande ci-dessus se traduit par:\n\nsi (si) la     est fausse: excuter la ;\nsinon (sinon si), si la     est vraie: excuter la ;\nsinon (autre), si la     est vraie et que la     est fausse, excuter la .\n\nLes conditions associes  la commande si et au paramtre sinon si prennent le modificateur /i qui permet de ne pas tenir compte de la casse lorsque la condition traite des chanes de caractres. Ce modificateur ne fonctionne que sur les conditions qui traitent des chanes de caractres. Si le paramtre sinon si est utilis conjointement, son comportement dpendra de la prsence, ou non, du modificateur /i  l&amp;#39;intrieur de la condition.\nsi /i &lt;chattedition1&gt; &lt;cmd1&gt; autre si /i &lt;chattedition2&gt; &lt;cmd2&gt; autre &lt;cmd3&gt;  \nSe traduit par:\n\nsi (si) la     est vraie, sans tenir compte de la casse, excuter la ;\nsinon si (sinon si) la     est vraie, sans tenir compte de la casse, excuter la ;\nsinon (autre), si la     est fausse sans tenir compte de la casse et que la     est fausse sans tenir compte de la casse, excuter la .\n\nNous allons maintenant voir quelles sont les conditions supportes par la commande si et le paramtre sinon si.\n\nIII-B. La condition exist ▲\n\nLa condition exister     permet de tester si un chemin d&amp;#39;accs ou un fichier existe. Elle peut tre utilise avec le paramtre sinon si et le modificateur ne pas. Le modificateur /i ne fonctionne pas sur cette condition. Sa syntaxe est la suivante, o     est le chemin d&amp;#39;accs ou le fichier  tester. Si le chemin d&amp;#39;accs contient des espaces, il doit tre plac entre guillemets.\nsi [[[[ne pas] exister [« ]&lt;chemin&gt;[« ] &lt;ordre&gt;  \nExemple avec le script 32.\n\n\n1.23\n@écho de\nsi exister &quot;%cd%&quot; écho %cd% existe bien.\npause\n\n\n\n\n\n\nIII-C. La condition defined ▲\n\nLa condition défini     permet de tester si une variable a une valeur dfinie. Elle peut tre utilise avec le paramtre sinon si, et le modificateur ne pas. Le modificateur /i ne fonctionne pas sur cette condition. Voir le script 33.\nsi [[[[ne pas] défini &lt;variable&gt; &lt;ordre&gt; \n\n\n1.234567.89dix.111213141516171819\n@écho de\nensemble &quot;Def1=&quot;\nensemble &quot;Def2=abcd&quot;\nsi défini Def1 (\n    écho Def1 est dfinie.\n) autre (\n    écho Def1 n&amp;#39;est pas dfinie.\n)\nsi défini Def2 (\n    écho Def2 est dfinie.\n) autre (\n    écho Def2 n&amp;#39;est pas dfinie.\n)\nsi ne pas défini Def3 (\n    écho Def3 n&amp;#39;est pas dfinie.\n) autre (\n    écho Def3 est dfinie.\n)\npause\n\n\n\n\n\n\nIII-D. La condition errorlevel ▲\n\nLa condition errorlevel     permet de tester si le code d&amp;#39;erreur de la dernire commande excute est gal ou suprieur au nombre donn en . Le code d&amp;#39;erreur est un nombre renvoy par une commande pour donner des informations sur le droulement de son excution, il est aussi accessible via la variable ErrorLevel. En gnral, le code d&amp;#39;erreur est 0 si aucune erreur ne s&amp;#39;est produite; et il est gal ou suprieur  1 si une erreur s&amp;#39;est produite, chaque code d&amp;#39;erreur correspondant  une erreur prcise. Le nom de variable ErrorLevel est un nom de variable rserv, vous pouvez la modifier en l&amp;#39;crasant avec une nouvelle valeur, cependant, elle prendra la valeur donne jusqu&amp;#39; la fin du script. Attention toutefois, il arrive que des commandes ne modifient pas la variable ErrorLevel ou bien qu&amp;#39;elle lui donne toujours le code 0, ceci est souvent d  de mauvaises pratiques de programmation, fiez-vous  des codes d&amp;#39;erreurs connues et ayant une valeur concrte, ne traitez pas les autres, pour ce faire, consultez le manuel ou l&amp;#39;aide de la commande concerne. Si le modificateur ne pas est utilis, la     seras excute seulement si ErrorLevel est infrieur  l&amp;#39;. Le modificateur /i n&amp;#39;est pas support par la condition errorlevel .\nsi [[[[ne pas] errorlevel &lt;oprande&gt; &lt;ordre&gt;  \n\n\n1.234567.89dix.1112\n@écho de\n\nsetlocal\nensemble &quot;TestError1=Un petit test&quot;\nsi ne pas errorlevel 1 écho Aucune erreur dans la premire commande.\necho.\nensemble /a &quot;TestError2=09&quot;\necho.\nsi errorlevel 1 écho Le code d&amp;#39;erreur des nombres invalides est %ErrorLevel%.\npause\n\nendlocal\n\n\n\n\n\n\nIII-E. La condition cmdextversion ▲\n\nLa condition cmdextversion     permet de tester si le numro de version des extensions de commande est gal ou suprieur au nombre donn en . Le numro de version des extensions de commande est  prendre en compte, car selon la version des extensions, le traitement des commandes peut tre modifi. Reportez-vous  l&amp;#39;aide concernant les commandes cites dans le tableau 7 pour plus de dtails. Chaque commande modifie l&amp;#39;est d&amp;#39;une manire qui lui est propre; ainsi la commande assoc ne sera pas modifie de la mme manire que la commande début, tout simplement parce qu&amp;#39;elle n&amp;#39;excute pas du tout la mme opration.\n\n\n\n\nDEL ou ERASE\n\n\nCOLOR\n\n\n\n\nCD ou CHDIR\n\n\nMD ou MKDIR\n\n\n\n\nPROMPT\n\n\nPUSHD\n\n\n\n\nPOPD\n\n\nENSEMBLE\n\n\n\n\nSETLOCAL\n\n\nENDLOCAL\n\n\n\n\nIF\n\n\nPOUR\n\n\n\n\nCALL\n\n\nSHIFT\n\n\n\n\nGOTO\n\n\nSTART\n\n\n\n\nASSOC\n\n\nFTYPE\n\n\n\n\nTableau 7: Commandes soumises aux extensions \nLa condition cmdextversion     est toujours fausse si les extensions de commande sont dsactives; la premire version des extensions est la version 1 et le numro de version est incrment de 1  chaque nouvelle version. Si le numro de version des extensions est gal ou suprieur  la valeur donne dans la condition cmdextversion     alors la condition est vraie; les extensions de commande tant rtrocompatibles d&amp;#39;une version  l&amp;#39;autre. Si le modificateur ne pas est utilis, la condition est vraie si le numro de version des extensions de commande est infrieur au nombre donn en . La condition cmdextversion     ne prend pas le modificateur /i. Le tableau 8 donne la liste des rvisions d&amp;#39;extensions de commande en fonction du systme d&amp;#39;exploitation.\n\n\n\n\nNumro de version \n\n\nCompatibilit \n\n\n\n\n1\n\n\nWindows 2000.\n\n\n\n\n2\n\n\nTous les systmes NT XP et suprieur.\n\n\n\n\nTableau 8: Rvisions des extensions de commande \nsi [[[[ne pas] cmdextversion &lt;oprande&gt; &lt;ordre&gt;  \n\n\n1.234567.89dix.111213141516171819\n@écho de\n\nsetlocal enableextensions\nsi ne pas cmdextversion 1 (\n    écho CmdExtVersion 1:  ne pas Detected.\n) autre (\n    écho CmdExtVersion 1:  Detected. \n)\nsi cmdextversion 2 (\n    écho CmdExtVersion 2:  Detected.\n) autre (\n    écho CmdExtVersion 2:  ne pas Detected. \n)\nsi cmdextversion 3 (\n    écho CmdExtVersion 3:  Detected.\n) autre (\n    écho CmdExtVersion 3:  ne pas Detected. \n)\npause\n\n\n\n\n\n\nIII-F. La condition   ▲\n\nLa condition       permet d&amp;#39;effectuer des comparaisons sur des chanes et des nombres. La comparaison de chanes est effectue au moyen d&amp;#39;un XOR au niveau du bit entre chaque octet d&amp;#39;une chane puis les rsultats obtenus sur les diffrentes chanes sont compars numriquement. Si les deux chanes ne sont constitues que de chiffres alors elles sont transtypes en nombre puis values numriquement. Les comparateurs, pris en compte par la condition   , sont lists dans le tableau 9. La condition       prend les modificateurs ne pas et /i. Sa syntaxe est la suivante, si les chanes contiennent des espaces, elles doivent tre places entre guillemets.\nsi [/i]    [[[[ne pas] [« ]&lt;chane1&gt;[« ] &lt;comparateur&gt; [« ]&lt;chane2&gt;[« ] &lt;cmd&gt;  \n\n\n\n\nComparateur \n\n\nLa description \n\n\n\n\nEQU\n\n\nEQUal, la condition est vraie si les deux chanes sont gales.\n\n\n\n\nNEQ\n\n\nNot EQual, la condition est vraie si les deux chanes sont diffrentes.\n\n\n\n\nLSS\n\n\nLeSS, la condition est vraie si chane1 est infrieure  chane2.\n\n\n\n\nLEQ\n\n\nLess or EQual, la condition est vraie si chane1 est infrieure ou gale  chane2.\n\n\n\n\nGTR\n\n\nGreaTeR, la condition est vraie si chane1 est suprieure  chane2.\n\n\n\n\nGEQ\n\n\nGreater or EQual, la condition est vraie si chane1 est suprieure ou gale  chane2.\n\n\n\n\nTableau 9: Oprateurs de comparaison \n\n\n1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.\n@écho de\ncls\nensemble &quot;Chane1=Un Petit test&quot;\n\nensemble /a &quot;C1X=0x55^0x6E^0x20^0x50^0x65^0x74^0x69^0x74^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane2=Un petit test&quot;\n\nensemble /a &quot;C2X=0x55^0x6E^0x20^0x70^0x65^0x74^0x69^0x74^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane3=Un grand test&quot;\n\nensemble /a &quot;C3X=0x55^0x6E^0x20^0x67^0x72^0x62^0x6E^0x64^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane4=41&quot;\nensemble &quot;Chane5=12&quot;\nécho               Chane 1         Chane 2          Chane 3\nécho =============================================================\nécho Chane        %Chane1%    %Chane2%    %Chane3%\nécho évaluation    %C1X%              %C2X%               %C3X%\necho.\nsi &quot;%Chane1%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane1%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane1%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi /i &quot;%Chane1%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane1%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane1%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi &quot;%Chane1%&quot; GTR &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane3%&quot;.\n) autre si &quot;%Chane1%&quot; EQU &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane3%&quot;.\n) autre si &quot;%Chane1%&quot; LSS &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane3%&quot;.\n)\nsi /i &quot;%Chane1%&quot; GTR &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane3%&quot;.\n) autre si /i &quot;%Chane1%&quot; EQU &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane3%&quot;.\n) autre si /i &quot;%Chane1%&quot; LSS &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane3%&quot;.\n)\nsi &quot;%Chane3%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane3%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane3%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi /i &quot;%Chane3%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane3%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane3%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\necho.\necho.\nécho               Chane 4    Chane 5         \nécho =============================================================\nécho Chane        %Chane4%          %Chane5%\necho.\nsi %Chane4% GTR %Chane5% (\n    écho %Chane4% est suprieur  %Chane5%.\n) autre si %Chane4% EQU %Chane5% (\n    écho %Chane4% est gal  %Chane5%.\n) autre si %Chane4% LSS %Chane5% (\n    écho %Chane4% est infrieur  %Chane5%.\n)\necho.\npause\n\n\n\n\n\n\nIII-G. La condition &quot;&quot;==&quot;&quot;▲\n\nLa condition &quot;&quot;==&quot;&quot; permet de tester une galit entre des chanes de caractres. Les chanes doivent tre places entre guillemets si elles sont susceptibles de contenir des espaces. Cette condition prend les modificateurs ne pas et /i.\n\n\n1.234567.89dix.11121314151617181920\n@écho de\ncls\nensemble &quot;Un=Une Chane&quot;\nensemble &quot;Deux=une chane&quot;\nsi &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If:      &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n) autre (\n    écho If:      &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n)\nsi ne pas &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If ne pas:  &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n) autre (\n    écho If ne pas:  &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n)\nsi /i &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If /i:   &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n) autre (\n    écho If /i:   &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n)\npause\n\n\n\n\n\n\nIII-H. Mise en application de la commande if▲\n\nDans cette section, nous allons reprendre le script 29 qui permettait de transformer un entier en sa reprsentation hexadcimale en notation en complment  deux. Grce  la commande si, nous allons faire en sorte de traiter les nombres ngatifs et positifs avec la mme fonction de calcul et d&amp;#39;afficher le rsultat dans une forme hexadcimale correcte.\n\n\n1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99100101.102.103.104105106.107.108.109.110.111.112.113.114.\n@écho de\n\nsetlocal\n\nensemble /p &quot;SInt32=Entrez un nombre entre -2147483648 et 2147483647:    &quot;\n\nensemble /a &quot;SInt32&quot;\n\n\n\nensemble &quot;NegNum=false&quot;\n\n\n\nsi %SInt32% LSS 0 (\n    ensemble /a &quot;SInt32=~SInt32&quot;\n    ensemble &quot;NegNum=true&quot;\n)\n\n\nensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;\n\n\nsi &quot;%NegNum%&quot;==&quot;true&quot; (\n    ensemble /a &quot;Nibble0=15 - Nibble0&quot;\n    ensemble /a &quot;Nibble1=15 - Nibble1&quot;\n    ensemble /a &quot;Nibble2=15 - Nibble2&quot;\n    ensemble /a &quot;Nibble3=15 - Nibble3&quot;\n    ensemble /a &quot;Nibble4=15 - Nibble4&quot;\n    ensemble /a &quot;Nibble5=15 - Nibble5&quot;\n    ensemble /a &quot;Nibble6=15 - Nibble6&quot;\n    ensemble /a &quot;Nibble7=15 - Nibble7&quot;\n)\n\nsi %Nibble0% GTR 9 (\n    si %Nibble0% EQU dix ensemble &quot;Nibble0=A&quot;\n    si %Nibble0% EQU 11 ensemble &quot;Nibble0=B&quot;\n    si %Nibble0% EQU 12 ensemble &quot;Nibble0=C&quot;\n    si %Nibble0% EQU 13 ensemble &quot;Nibble0=D&quot;\n    si %Nibble0% EQU 14 ensemble &quot;Nibble0=E&quot;\n    si %Nibble0% EQU 15 ensemble &quot;Nibble0=F&quot;\n)\nsi %Nibble1% GTR 9 (\n    si %Nibble1% EQU dix ensemble &quot;Nibble1=A&quot;\n    si %Nibble1% EQU 11 ensemble &quot;Nibble1=B&quot;\n    si %Nibble1% EQU 12 ensemble &quot;Nibble1=C&quot;\n    si %Nibble1% EQU 13 ensemble &quot;Nibble1=D&quot;\n    si %Nibble1% EQU 14 ensemble &quot;Nibble1=E&quot;\n    si %Nibble1% EQU 15 ensemble &quot;Nibble1=F&quot;\n)\nsi %Nibble2% GTR 9 (\n    si %Nibble2% EQU dix ensemble &quot;Nibble2=A&quot;\n    si %Nibble2% EQU 11 ensemble &quot;Nibble2=B&quot;\n    si %Nibble2% EQU 12 ensemble &quot;Nibble2=C&quot;\n    si %Nibble2% EQU 13 ensemble &quot;Nibble2=D&quot;\n    si %Nibble2% EQU 14 ensemble &quot;Nibble2=E&quot;\n    si %Nibble2% EQU 15 ensemble &quot;Nibble2=F&quot;\n)\nsi %Nibble3% GTR 9 (\n    si %Nibble3% EQU dix ensemble &quot;Nibble3=A&quot;\n    si %Nibble3% EQU 11 ensemble &quot;Nibble3=B&quot;\n    si %Nibble3% EQU 12 ensemble &quot;Nibble3=C&quot;\n    si %Nibble3% EQU 13 ensemble &quot;Nibble3=D&quot;\n    si %Nibble3% EQU 14 ensemble &quot;Nibble3=E&quot;\n    si %Nibble3% EQU 15 ensemble &quot;Nibble3=F&quot;\n)\nsi %Nibble4% GTR 9 (\n    si %Nibble4% EQU dix ensemble &quot;Nibble4=A&quot;\n    si %Nibble4% EQU 11 ensemble &quot;Nibble4=B&quot;\n    si %Nibble4% EQU 12 ensemble &quot;Nibble4=C&quot;\n    si %Nibble4% EQU 13 ensemble &quot;Nibble4=D&quot;\n    si %Nibble4% EQU 14 ensemble &quot;Nibble4=E&quot;\n    si %Nibble4% EQU 15 ensemble &quot;Nibble4=F&quot;\n)\nsi %Nibble5% GTR 9 (\n    si %Nibble5% EQU dix ensemble &quot;Nibble5=A&quot;\n    si %Nibble5% EQU 11 ensemble &quot;Nibble5=B&quot;\n    si %Nibble5% EQU 12 ensemble &quot;Nibble5=C&quot;\n    si %Nibble5% EQU 13 ensemble &quot;Nibble5=D&quot;\n    si %Nibble5% EQU 14 ensemble &quot;Nibble5=E&quot;\n    si %Nibble5% EQU 15 ensemble &quot;Nibble5=F&quot;\n)\nsi %Nibble6% GTR 9 (\n    si %Nibble6% EQU dix ensemble &quot;Nibble6=A&quot;\n    si %Nibble6% EQU 11 ensemble &quot;Nibble6=B&quot;\n    si %Nibble6% EQU 12 ensemble &quot;Nibble6=C&quot;\n    si %Nibble6% EQU 13 ensemble &quot;Nibble6=D&quot;\n    si %Nibble6% EQU 14 ensemble &quot;Nibble6=E&quot;\n    si %Nibble6% EQU 15 ensemble &quot;Nibble6=F&quot;\n)\nsi %Nibble7% GTR 9 (\n    si %Nibble7% EQU dix ensemble &quot;Nibble7=A&quot;\n    si %Nibble7% EQU 11 ensemble &quot;Nibble7=B&quot;\n    si %Nibble7% EQU 12 ensemble &quot;Nibble7=C&quot;\n    si %Nibble7% EQU 13 ensemble &quot;Nibble7=D&quot;\n    si %Nibble7% EQU 14 ensemble &quot;Nibble7=E&quot;\n    si %Nibble7% EQU 15 ensemble &quot;Nibble7=F&quot;\n)\n\nensemble &quot;LSW=%Nibble3%%Nibble2%%Nibble1%%Nibble0%&quot;\n\nensemble &quot;MSW=%Nibble7%%Nibble6%%Nibble5%%Nibble4%&quot;\n\nécho 0x%MSW%%LSW%\n\nendlocal\npause\n\n\n\nCe script sera un script tmoin que nous ferons voluer tout au long de ce document, il nous permettra de comparer les diffrentes approches et ce qu&amp;#39;elles impliquent comme contrainte d&amp;#39;utilisation.\nEn son tat actuel, ce script est gourmand en ressource systme, car  chaque ligne de commande correspond un appel vers l&amp;#39;interprteur augmentant d&amp;#39;autant son temps de traitement. Les boucles pour devraient nous permettre de rduire considrablement son cot en temps d&amp;#39;excution et la taille du script par la mme occasion.\n\n\n\nUn script batch s&amp;#39;excute toujours de manire linaire, du dbut vers la fin, et  moins que l&amp;#39;on ne redirige son excution, ce comportement reste inchang. Il existe plusieurs possibilits pour rediriger l&amp;#39;excution d&amp;#39;un script telles que: les labels, les sauts, les appels de fonction et les sorties.\nIV-A. Les labels▲\n\nLes labels sont des adresses relatives se prsentant sous forme de chanes de caractres prfixes par : et termines par un caractre blanc (l&amp;#39;espace, la tabulation ou le retour  la ligne). Ces adresses relatives pointent vers le premier caractre situ aprs le retour  la ligne qui termine le label. Elles peuvent tre utilises pour adresser une portion de code. Chaque nom de label devrait tre unique dans le script. La syntaxe d&amp;#39;un label est la suivante, o  est le nom du label:\n:&lt;Étiquette&gt;  \n\nIV-B. Les sauts▲\n\nThe command goto effectue un saut inconditionnel vers le label spcifi en paramtre, permettant ainsi de continuer l&amp;#39;excution du programme dans une portion de code situe n&amp;#39;importe o dans le script. Une fois le saut effectu, l&amp;#39;excution continue  la ligne qui suit le label spcifi:\ngoto [[[[:]&lt;Étiquette&gt;  \n\n\n1.234567.8\n@écho de\n\ngoto :MonLabel\nécho Une phrase qui ne sera jamais affiche.\n\n:MonLabel\nécho Une phrase qui sera affiche.\npause\n\n\n\n\n\n\nDans le script 39, la commande echo Une phrase qui ne sera jamais affiche. n&amp;#39;est pas traite, l&amp;#39;excution tant redirige par la commande goto:MonLabel vers la ligne suivant le label :MonLabel soit la commande echo Une phrase qui sera affiche.\n\nIV-C. Contexte de commande▲\n\nL&amp;#39;excution de l&amp;#39;interprteur ou d&amp;#39;un script s&amp;#39;effectue dans un processus hte auquel le systme d&amp;#39;exploitation alloue un espace mmoire. Cet espace mmoire est appel la pile. Une pile est une zone de mmoire dans laquelle les donnes sont places les unes  la suite des autres. Les donnes qui y sont places doivent tre rcupres dans un ordre particulier: la dernire donne place doit tre la premire  tre rcupre. Sur cette pile, le systme y place ce que l&amp;#39;on appelle un contexte.\nLors de sa cration, le contexte se voit attribuer, par le systme, une srie de variables: les variables d&amp;#39;environnement du systme, des variables contenant la commande et les paramtres de la commande ayant gnr le contexte et une adresse de sortie du contexte. Ainsi cr, le contexte reprsente l&amp;#39;environnement dans lequel le script va s&amp;#39;excuter en lui permettant de disposer de donnes qui lui sont propres.  chaque nouvelle excution d&amp;#39;un script ou d&amp;#39;une commande, l&amp;#39;interprteur cre un nouveau contexte et le place sur la pile. Ce nouveau contexte est appel contexte descendant.\nLes variables d&amp;#39;environnement sont hrites du systme lors de la cration du processus hte et se propagent par ascendance successive aux diffrents contextes descendants. Les variables contenant la commande et les arguments d&amp;#39;appels, elles, sont propres au contexte et ne se propagent jamais aux contextes descendants. L&amp;#39;adresse de sortie du contexte n&amp;#39;est pas accessible en tant que variable et, tout comme les arguments d&amp;#39;appel, est propre au contexte. Son rle est plus amplement dtaill dans le reste du chapitre.\nCertaines commandes s&amp;#39;excutent dans le contexte en cours alors que d&amp;#39;autres crent leurs propres contextes. C&amp;#39;est, en partie, ce qui fait la diffrence entre commande interne et externe: les commandes internes sont en fait des fonctions internes de l&amp;#39;interprteur qu&amp;#39;il est possible d&amp;#39;appeler via un alias de type nom de commande, alors que les commandes externes sont des excutables distincts de l&amp;#39;interprteur. L&amp;#39;excution d&amp;#39;une commande externe ou d&amp;#39;un script gnrera toujours un nouveau contexte. Les commandes internes s&amp;#39;excutent toujours dans le contexte courant. Il faut cependant noter que les commandes internes, mme si elles excutent toujours leurs fonctions principales dans le contexte courant, peuvent crer des contextes descendants afin d&amp;#39;excuter certaines fonctions comme la boucle pour qui gnre un contexte initial dans lequel se trouve l&amp;#39;ensemble  traiter et un contexte secondaire, cr  chaque itration de la boucle, dans lequel s&amp;#39;opre le traitement.\nIV-C-1. La porte des variables▲\n\nSi le concept de contexte de commande est si important, c&amp;#39;est qu&amp;#39;il influe grandement sur l&amp;#39;utilisation des variables. En effet, chaque contexte est une fraction de la pile qui n&amp;#39;est pas accessible lorsque l&amp;#39;excution s&amp;#39;opre depuis un contexte ascendant. Les variables se propagent par ascendance; c&amp;#39;est&#8211;dire que lorsqu&amp;#39;un nouveau contexte est cr, il hrite des variables (et de leurs valeurs) du contexte ascendant (celui  partir duquel il a t cr). Si une variable est modifie dans un contexte descendant, sa valeur restera inchange dans le contexte ascendant. Ainsi, faire passer une variable vers un contexte descendant est simple (il suffit de crer le contexte), mais l&amp;#39;inverse s&amp;#39;avre plus compliqu, car il n&amp;#39;est pas possible de modifier une valeur dans un contexte ascendant.\nL&amp;#39;interprteur supporte l&amp;#39;expansion retarde des variables qui permet, dans une certaine mesure, de faire passer une valeur vers un contexte ascendant. Pour cela, le processus hte, lorsque l&amp;#39;expansion retarde est active, alloue une seconde zone de mmoire qui prend la forme d&amp;#39;un tas qui est accessible depuis n&amp;#39;importe quel contexte. Contrairement  la pile, il est possible, avec le tas, d&amp;#39;y placer et rcuprer les donnes dans n&amp;#39;importe quel ordre.  chaque fois qu&amp;#39;une variable est cre ou modifie, elle est place  la fois dans le contexte (autrement dit sur la pile) et dans le tas. Pour accder aux variables dont l&amp;#39;expansion est retarde, il faut utiliser le symbole ! au lieu du symbole % lors de leur expansion. Ainsi la variable prendra la dernire valeur qui lui a t attribue pendant l&amp;#39;excution et non la valeur qu&amp;#39;elle possde dans le contexte en cours. L&amp;#39;expansion retarde des variables sera plus amplement aborde dans le chapitre VIL&amp;#39;expansion retarde des variables.\n\n\nIV-D. Les fonctions▲\n\nLes fonctions sont des portions de code isoles, commenant par un label et finissant par un saut  une adresse spcifique: l&amp;#39;adresse de retour. La vraie diffrence avec une simple portion de code rside dans le fait qu&amp;#39;un nouveau contexte est cr, permettant ainsi aux fonctions de disposer de paramtres de commande et, dans certains cas, d&amp;#39;un code de sortie.\nIV-D-1. L&amp;#39;appel de fonction▲\n\nThe command appel permet d&amp;#39;effectuer des appels de fonction. Elle a la particularit de crer un contexte dans lequel va s&amp;#39;excuter la fonction appele (la portion de code); lors de la cration du contexte descendant, une adresse de retour et les arguments d&amp;#39;appel vont tre empils. La syntaxe de la commande appel est la suivante, o     est le nom de la fonction  appeler et     est le ou les paramtres  passer  la fonction.\nappel :&lt;étiquette&gt; [[[[&lt;paramtre&gt; [&#8230;]]  \nLors d&amp;#39;un appel  une fonction, si l&amp;#39;excution est redirige vers une autre adresse que l&amp;#39;adresse de retour et que, par la suite, d&amp;#39;autres appels sont effectus vers cette mme fonction, alors la premire adresse ne sera pas dpile, occasionnant une fuite de mmoire. Si un script comporte ce cas, son excution peut tre stoppe par l&amp;#39;interprteur (si l&amp;#39;utilisation de la pile atteint 90%) comme le montre le script 40.\n\n\n1.2345\n@écho de\n:LabelUn\nappel :LabelDeux\n:LabelDeux\ngoto :LabelUn\n\n\n\n\n\n\nIV-D-2. Sortie de fonction▲\n\nThe command goto prend aussi le label :eof (End Of File), qui prend la valeur de l&amp;#39;adresse de retour du contexte en cours, soit la ligne se trouvant immdiatement aprs le dernier appel effectu.\nThe command goto n&amp;#39;ajoute rien dans la pile, ainsi l&amp;#39;excution d&amp;#39;un goto ne peut occasionner de fuite de mmoire. Dans le cas prcis de l&amp;#39;excution d&amp;#39;un goto:eof, la commande goto incrmente le pointeur de pile de la taille totale des adresses des arguments d&amp;#39;appel et de la taille de l&amp;#39;adresse de retour, permettant  la pile de revenir  l&amp;#39;tat d&amp;#39;avant l&amp;#39;appel, puis effectue un saut inconditionnel  l&amp;#39;adresse de retour, soit la ligne suivant le dernier appel. Ainsi, si l&amp;#39;on modifie le script 40 de la manire suivante (script 41), on obtient un script qui ne finit jamais, car il n&amp;#39;y a ni fuite de mmoire (chaque appel de la fonction :LabelDeux finished by goto:eof), ni point de sortie (il y aura toujours une commande  excuter, l&amp;#39;excution revient toujours au :LabelUn). Seul l&amp;#39;appui sur les touches Ctrl+C permet de quitter le script.\n\n\n1.234567.89dix.\n@écho de\n\nensemble /a &quot;Counter=0&quot;\n:LabelUn\nappel :LabelDeux\nensemble /a &quot;Counter+=1&quot;\ngoto :LabelUn\n:LabelDeux\nécho %Counter%\ngoto :eof\n\n\n\n\nIV-E. Les paramtres de commande▲\n\nIls sont passs au contexte lors de sa cration et sont accessibles sous la forme de variables spciales: %n, n tant le numro d&amp;#39;index du paramtre. En effet, chaque contexte tant gnr suite  l&amp;#39;appel d&amp;#39;un script, d&amp;#39;une fonction ou d&amp;#39;une commande, il possde une commande d&amp;#39;appel et, la plupart du temps, de paramtres d&amp;#39;appel. L&amp;#39;index %0 contient le nom du script, de la fonction ou de la commande, l&amp;#39;index %1 contient le paramtre 1, l&amp;#39;index %2 contient le paramtre 2 et ainsi de suite. Le paramtre %* expanse tous les paramtres passs au contexte (%0 n&amp;#39;est pas un paramtre, mais une commande d&amp;#39;appel et n&amp;#39;est donc pas renvoye par %*). Exemple avec le script 42:\n\n\n1.234567.89dix.1112131415\n@écho de\n\nappel :MonLabel Param1 Param2\npause\n\n\n\ngoto :eof\n\n:MonLabel\nécho %*\nécho %0\nécho %1\nécho %2\ngoto :eof\n\n\n\n\n\n\nL&amp;#39;utilisation des paramtres suit plusieurs rgles:\n\nles paramtres ne sont pas limits en nombre dans la commande d&amp;#39;appel, mais la rgle des 2048/4096 caractres maximum par ligne de commande s&amp;#39;applique;\npar souci de compatibilit avec les systmes Windows XP et antrieurs, il est prfrable de ne pas utiliser des paramtres avec un index suprieur  9, qui restent cependant accessibles via la commande décalage (voir section IV.E.2La commande shift).\n\nIV-E-1. Les modificateurs de paramtres de commande▲\n\nLes paramtres de commande supportent plusieurs modificateurs permettant de les parser, en voici la liste exhaustive:\n\n\n\n\nModificateur \n\n\nLa description \n\n\n\n\n%~1\n\n\nrésultats %1 en supprimant les guillemets (&quot;) de dbut et de fin.\n\n\n\n\n%~f1\n\n\nrenvoie le chemin d&amp;#39;accs vrifi du fichier dsign par %1, si le fichier n&amp;#39;est pas trouv, alors ce modificateur s&amp;#39;expanse en une chane vide.\n\n\n\n\n%~d1\n\n\nrenvoie la lettre de lecteur du fichier dsign par %1.\n\n\n\n\n%~p1\n\n\nrenvoie le chemin d&amp;#39;accs du fichier dsign par %1.\n\n\n\n\n%~n1\n\n\nrenvoie le nom du fichier dsign par %1.\n\n\n\n\n%~x1\n\n\nrenvoie l&amp;#39;extension du fichier dsign par %1.\n\n\n\n\n%~s1\n\n\nrenvoie le chemin d&amp;#39;accs, sous forme de noms courts, du fichier dsign par %1.\n\n\n\n\n%~a1\n\n\nrenvoie les attributs du fichier dsign par %1.\n\n\n\n\n%~t1\n\n\nrenvoie la date et l&amp;#39;heure de cration du fichier dsign par %1.\n\n\n\n\n%~z1\n\n\nrenvoie la taille du fichier dsign par %1.\n\n\n\n\n%~$:1\n\n\n    est parcourue  la recherche d&amp;#39;occurrence de %1, si aucune occurrence de %1 n&amp;#39;est trouve ou que  n&amp;#39;est pas dfini dans le contexte en cours, alors ce modificateur s&amp;#39;expanse en une chane vide. Oui  est compos de plusieurs chanes, elles doivent tre spares par des points-virgules (;) afin que le modificateur puisse les distinguer correctement.\n\n\n\n\nTableau 10: Les modificateurs de paramtres de commande. \nLes modificateurs de paramtres de commande fonctionnent pour tous les index. Ils peuvent tre utiliss conjointement pour obtenir plusieurs informations en mme temps, comme le montre le script 43:\n\n\n1.234567.89\n@écho de\n\ncls\nappel :MonLabel %cmdcmdline%\npause\ngoto :eof\n:MonLabel\nécho %~dpnx€ComSpec:1\ngoto :eof\n\n\n\n\n\n\nIV-E-2. La commande shift▲\n\nThe command décalage permet de dcaler l&amp;#39;index de tous les paramtres de -1, afin d&amp;#39;accder aux index suprieurs  neuf, ou de crer un mcanisme de gestion des paramtres (voir la mise en application de ce chapitreMise en application des contextes). Si les extensions de commande sont actives, la commande décalage prend le paramtre /n, o n est le numro d&amp;#39;index  partir duquel commence le dcalage des paramtres, tous les index gaux ou suprieurs  n seront dcals de -1.\ndécalage [/n] \nDans le script 44, le commande shift /1 permet d&amp;#39;accder au deuxime paramtre via l&amp;#39;index 1:.\n\n\n1.234567.89\n@écho de\ncls\nappel :MonLabel &quot;rien&quot; %cmdcmdline%\npause\nsortie /b\n:MonLabel\ndécalage /1\nécho %~dpnx€ComSpec:1\ngoto :eof\n\n\n\n\n\n\n\nIV-F. Les sorties▲\n\nLa sortie d&amp;#39;un contexte ou d&amp;#39;un processus peut s&amp;#39;effectuer via les commandes sortie et goto:eof. Dans le cas de goto:eof, si tous les contextes ont correctement t dpils, alors la dernire adresse dpile est:\n\nsoit l&amp;#39;adresse de sortie du processus dans le cas d&amp;#39;un script appel en cliquant dessus;\nsoit l&amp;#39;adresse de retour  l&amp;#39;interprteur si le script a t lanc depuis celui-ci.\n\nThe command sortie, elle, permet de sortir du processus hte, quel que soit le nombre de contextes empils. Si la commande sortie est utilise avec le paramtre /b, alors la sortie s&amp;#39;effectuera  l&amp;#39;adresse de sortie du contexte et non  l&amp;#39;adresse de sortie du processus hte. L&amp;#39;intrt de la commande sortie est qu&amp;#39;un code numrique de sortie peut tre spcifi, contrairement  goto:eof. La syntaxe de la commande exit est la suivante, o     est le code de sortie.\nsortie [/b]    [[[[&lt;CodeSortie&gt;]  \nDans le script 45, la sortie de la fonction :LabelDeux s&amp;#39;effectue  l&amp;#39;aide d&amp;#39;un goto:eof et la sortie de la fonction :LabelQuatre s&amp;#39;effectue  l&amp;#39;aide d&amp;#39;exit /b; dans les deux cas, le retour vers la procdure appelante s&amp;#39;opre correctement, car c&amp;#39;est la bonne adresse de retour qui est dpile. Dans la fonction :LabelSix du script 45, la commande exit /b provoque la fin du script, car la fonction :LabelSix a t appele avec la commande goto:LabelSix qui n&amp;#39;a rien empil. Comme tous les contextes prcdents ont t dpils correctement, seule la dernire adresse de retour subsiste. Cette adresse correspond  l&amp;#39;adresse de retour  l&amp;#39;interprteur si le script a t appel depuis celui-ci ou  l&amp;#39;adresse de sortie du processus, si le script a t appel par un double-clic.\n\n\n1.234567.89dix.111213141516171819202122232425262728293031.323334353637\n@écho de\ncls\nensemble /a &quot;CounterGoto=0&quot;\nensemble /a &quot;CounterExit=0&quot;\nensemble /a &quot;CounterCounter=0&quot;\n:LabelUn\nappel :LabelDeux\nensemble /a &quot;CounterGoto+=1&quot;\nécho CounterGoto: %CounterGoto% sur affichage Goto 1.\nsi %CounterGoto% EQU 6 goto :LabelTrois\ngoto :LabelUn\n:LabelDeux\nensemble /a &quot;CounterGoto+=1&quot;\nécho CounterGoto: %CounterGoto% sur affichage Goto 2\ngoto :eof\n\n:LabelTrois\nappel :LabelQuatre\nensemble /a &quot;CounterExit+=1&quot;\nécho CounterExit: %CounterExit% sur affichage Sortie 1.\nsi %CounterExit% EQU 6 goto :LabelCinq\ngoto :LabelTrois\n:LabelQuatre\nensemble /a &quot;CounterExit+=1&quot;\nécho CounterExit: %CounterExit% sur affichage Sortie 2\nsortie /b\n\n:LabelCinq\ngoto :LabelSix\nensemble /a &quot;CounterCounter+=1&quot;\nécho CounterCounter: %CounterCounter% sur affichage Counter 1.\nsi %CounterCounter% EQU 6 sortie /b\ngoto :LabelCinq\n:LabelSix\nensemble /a &quot;CounterCounter+=1&quot;\nécho CounterCounter: %CounterCounter% sur affichage Counter 2.\nsortie /b\n\n\n\n\n\n\nIV-G. Code de sortie▲\n\nComme expliqu prcdemment, un code de sortie peut tre spcifi pour une fonction ou pour un script. Cela se fait via la commande sortie [/b]     o     est un code de sortie numrique. Les codes de sortie sont rgis par les mmes rgles que les nombres entiers et sont cods sur 32 bits en arithmtique signe. Ce code de sortie est fix dans la variable ErrorLevel afin de pouvoir tre utilis par la suite. Exemple avec le script 46:\n\n\n1.234567.89\n@écho de\n\nécho %ErrorLevel%\nappel :UnLabel\nécho %ErrorLevel%\npause\nsortie /b\n:UnLabel\nsortie /b 1\n\n\n\n\n\n\nIV-H. Script batch et adresse de retour▲\n\nL&amp;#39;appel d&amp;#39;un script depuis l&amp;#39;interprteur ou en cliquant dessus gnre toujours un contexte complet. Cependant l&amp;#39;appel d&amp;#39;un script en ligne de commande depuis un autre script gnre un contexte ne possdant pas d&amp;#39;adresse de retour. Exemple avec le script 47:\n\n\n1.234567.89dix.1112131415161718\n@écho de\n\nsi exister test.bat del /q test.bat\n\nappel :WriteTestBat &gt;&gt;test.bat\n\ntest.bat\n\nécho Return  %~nx0.\ndel /q test.bat\npause\nsortie /b\n\n:WriteTestBat\nécho @écho de\nécho écho Une phrase affiche dans test.bat\nécho pause\ngoto :eof\n\n\n\nLorsqu&amp;#39;on excute le script 47, celui-ci cre un second script, test.bat. L&amp;#39;appel en ligne de commande Test.bat affiche alors Une phrase affiche depuis test.bat et met en pause l&amp;#39;excution. Lorsqu&amp;#39;on appuie sur une touche, cela provoque la fin des deux scripts. En effet, quand l&amp;#39;interprteur arrive  la fin d&amp;#39;un script et que celui-ci ne se termine pas par goto :eof ou sortie [/b], il effectue de lui-mme le saut  l&amp;#39;adresse de retour. Sauf que l&amp;#39;appel de test.bat n&amp;#39;a pas empil d&amp;#39;adresse de retour et de ce fait, l&amp;#39;adresse qui est dpile est celle du premier script. Pour parer  ce problme, il faut s&amp;#39;assurer que l&amp;#39;adresse de retour soit effectivement empile en utilisant la commande appel. Ainsi, en modifiant le script 47 de la manire suivante (script 48), l&amp;#39;appel et la sortie s&amp;#39;effectuent sans erreur.\n\n\n1.234567.89dix.1112131415161718\n@écho de\n\nsi exister test.bat del /q test.bat\n\nappel :WriteTestBat &gt;&gt;test.bat\n\nappel test.bat\n\nécho Return  %~nx0.\ndel /q test.bat\npause\nsortie /b\n\n:WriteTestBat\nécho @écho de\nécho écho Une phrase affiche dans test.bat\nécho pause\ngoto :eof\n\n\n\nIV-I. La commande start▲\n\nThe command début permet de lancer un script ou une commande dans un nouveau processus, permettant ainsi d&amp;#39;excuter des commandes dans un environnement modifi. Ainsi, toute variable cre ou modifie dans le script appelant est passe  ce nouveau processus.\n\nSyntaxe de la commande start\nSélectionnez\n\ndébut [&quot;[&quot;[\"[\"&lt;légende&gt;&quot;][/d[/d[/d[/d&lt;chemin&gt;] [/i] [/min] [/max]    [/separate[/separate[/separate[/separate|/shared][/low[/low\n      [/low|/normal|/high|/realtime|/abovenormal|/belownormal][/affinity[/affinity[/affinity[/affinity&lt;hexa&gt;]\n      [/wait] [/b]    [[[[&lt;ordre&gt;][[[[&lt;paramtres&gt;]\n\n\n\n\n\nParamtres \n\n\nDescriptions \n\n\n\n\n\n\n\nTitre de la fentre.\n\n\n\n\n/d\n\n\nSpcifie que le chemin d&amp;#39;accs donn par     est le rpertoire de dpart.\n\n\n\n\n\n\n\nChemin d&amp;#39;accs du rpertoire de dpart.\n\n\n\n\n/b\n\n\nLance l&amp;#39;application dans la fentre courante (en tche de fond). L&amp;#39;arrt par Ctrl+C est remplac par Ctrl+Pause.\n\n\n\n\n/i\n\n\nLe nouveau contexte sera le contexte original du processus hte et non le contexte en cours.\n\n\n\n\n/min\n\n\nDmarrer dans une fentre rduite.\n\n\n\n\n/max\n\n\nDmarrer dans une fentre agrandie.\n\n\n\n\n/separate\n\n\nDmarrer les programmes 16 bits dans un espace mmoire distinct. Ne fonctionne pas sur les systmes 64 bits.\n\n\n\n\n/shared\n\n\nDmarrer les programmes 16 bits dans un espace mmoire partag. Ne fonctionne pas sur les systmes 64 bits.\n\n\n\n\n/low\n\n\nDmarrer l&amp;#39;application dans la classe de priorit IDLE.\n\n\n\n\n/normal\n\n\nDmarrer l&amp;#39;application dans la classe de priorit NORMAL.\n\n\n\n\n/high\n\n\nDmarrer l&amp;#39;application dans la classe de priorit HIGH.\n\n\n\n\n/realtime\n\n\nDmarrer l&amp;#39;application dans la classe de priorit REALTIME.\n\n\n\n\n/abovenormal\n\n\nDmarrer l&amp;#39;application dans la classe de priorit ABOVENORMAL.\n\n\n\n\n/belownormal\n\n\nDmarrer l&amp;#39;application dans la classe de priorit BELOWNORMAL.\n\n\n\n\n/affinity\n\n\nLa nouvelle application aura le masque d&amp;#39;affinit de processeur spcifi, exprim en tant que valeur hexadcimale.\n\n\n\n\n\n\n\nAffinit du processus sous forme de valeur hexadcimale.\n\n\n\n\n/wait\n\n\nLancer la commande et attendre qu&amp;#39;elle soit finie pour continuer l&amp;#39;excution. S&amp;#39;il s&amp;#39;agit d&amp;#39;une commande interne ou d&amp;#39;un fichier batch, la fentre reste ouverte aprs l&amp;#39;excution de la commande.\n\n\n\n\n\n\n\nCommande  excuter.\n\n\n\n\n\n\n\nParamtres  passer  la commande.\n\n\n\n\nTableau 11: Les paramtres de la commande start. \nLe script 49 appelle une nouvelle instance de lui-mme avec le paramtre foo aprs avoir dfini la variable X, la seconde instance affiche bien la valeur de X alors qu&amp;#39;elle n&amp;#39;a pas dclar X. Notez bien qu&amp;#39;il s&amp;#39;agit d&amp;#39;un nouveau processus, il est donc possible de le quitter avec la commande sortie sans aucun paramtre.\n\n\n1.234567.89dix.\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\nensemble &quot;X=bar&quot;\ndébut %~nx0 foo\npause\nsortie /b\n:SecondInstance\nécho %X%\npause\nsortie\n\n\n\nPremire instance: \n\n\n\nSeconde instance: \n\n\n\nSi l&amp;#39;on modifie le script 49 en ajoutant le paramtre /i dans l&#39;ordre début (script 50), alors le nouveau processus sera cr en hritant du contexte original du processus hte dans lequel la variable X n&amp;#39;a pas t dclare.\n\n\n1.234567.89dix.\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\nensemble &quot;X=bar&quot;\ndébut /i %~nx0 foo\npause\nsortie /b\n:SecondInstance\nécho %X%\npause\nsortie\n\n\n\nPremire instance: \n\n\n\nSeconde instance: \n\n\n\nUne autre application intressante de la commande début est l&amp;#39;excution parallle  l&amp;#39;aide du paramtre /b comme dans le script 51.\nN.B.: la commande temps libre n&amp;#39;est pas fournie en standard sur tous les systmes Windows. Si vous ne l&amp;#39;avez pas, veuillez supprimer la commande temps libre du script, d-commenter les commandes écho, ping et supprimer le caractre d&amp;#39;chappement dans la commande ping.\n\n\n1.234567.89dix.11\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\ndébut /b %~nx0 foo\n\n\ntemps libre /t 10 /nobreak\npause\nsortie /b\n:SecondInstance\nécho %1\nsortie\n\n\n\n\n\n\nIV-J. La commande setlocal▲\n\nCette commande permet de modifier partiellement les contextes en crant un contexte local. Les variables et leurs valeurs, dans ce nouveau contexte local, sont soumises aux rgles inhrentes  la cration de contexte. L&amp;#39;avantage de cette commande est que l&amp;#39;on peut crer un contexte sans passer par un appel. Ce contexte local ne possde pas d&amp;#39;adresse de retour ni de paramtres d&amp;#39;appel. Seules les variables, et ventuellement les extensions de commande, sont affectes. Ainsi, toutes les variables cres ou modifies dans ce contexte local y sont propres. Cette modification prend fin lorsque l&amp;#39;excution rencontre la commande endlocal. The command setlocal prend aussi les paramtres:\n\nenabledelayedexpansion qui active l&amp;#39;expansion retarde;\ndisabledelayedexpansion qui dsactive l&amp;#39;expansion retarde;\nenableextensions qui active les extensions de commande;\ndisableextensions qui dsactive les extensions de commande.\n\nsetlocal [enableextensions[enableextensions[enableextensions[enableextensions|disableextensions][enabledelayedexpansion[enabledelayedexpansion[enabledelayedexpansion[enabledelayedexpansion|disabledelayedexpansion]  \n\nIV-K. La commande endlocal▲\n\nCette commande termine le contexte local gnr par la commande setlocal correspondante. Plusieurs contextes locaux pouvant tre empils les uns au-dessus des autres, toutes les modifications apportes dans le contexte local qui se termine sont perdues, y compris les modifications apportes par les paramtres de la commande setlocal. The command endlocal ne prend aucun paramtre. Exemple pour setlocal et endlocal avec le script 52:\n\n\n1.234567.8\n@écho de\nsetlocal\nensemble &quot;X=foo&quot;\nécho %X%\nendlocal\nécho %X%\npause\nsortie\n\n\n\n\n\n\nIV-L. Mise en application des contextes▲\n\n\n\n1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99100101.102.103.104105106.107.108.109.110.111.112.113.114.115.116.117.118.119120.121.122.123.124.125.126.127.128.129.130.131.132.133.134.135.136.137.138.139.140141.142.143.144.145.146.147.148.149.150.151.152.153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.171.172.173.174.175.176.\n@écho de\n\nensemble &quot;ScriptName=%~nx0&quot;\nensemble &quot;NegNum=false&quot;\nensemble /a &quot;PrefixEnable=0&quot;\nensemble /a &quot;UpperPrefix=0&quot;\n\nsetlocal\n\n:ParseArgs\nsi &quot;%~1&quot;==&quot;&quot; goto Init\nsi /i &quot;%~1&quot;==&quot;/?&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-?&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/h&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-h&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/Aidez-moi&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-help&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/hex&quot; (\n    ensemble &quot;SInt32=%~2&quot;\n    ensemble /a &quot;SInt32&quot;\n    si errorlevel 1 (\n        décalage /1\n        goto BadSyntax\n)\n    décalage /1\n    décalage /1\n    goto ParseArgs\n)\nsi /i &quot;%~1&quot;==&quot;/p&quot; (\n    ensemble /a &quot;PrefixEnable=1&quot;\n    si %~1 EQU /P ensemble /a &quot;UpperPrefix=1&quot;\n    décalage /1\n    goto ParseArgs\n)\n:BadSyntax\necho.\n\n\nnet helpmsg 87\nécho [[[[%~1 ]\necho.\nsi ne pas &quot;%~0&quot;==&quot;:BadSyntax&quot; endlocal\nsortie /b 1\n\n:Init\nsi défini SInt32 goto Exec\n:UnknowError\nappel :BadSyntax /hex\nappel :Help\nendlocal\nsortie /b 2\n\n:Exec\n\nsi %SInt32% LSS 0 (\n    ensemble &quot;NegNum=true&quot;\n    ensemble /a &quot;SInt32=~SInt32&quot;\n)\n\n\nensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;\n\n\nsi &quot;%NegNum%&quot;==&quot;true&quot; (\n    ensemble /a &quot;Nibble0=15  Nibble0&quot;\n    ensemble /a &quot;Nibble1=15  Nibble1&quot;\n    ensemble /a &quot;Nibble2=15  Nibble2&quot;\n    ensemble /a &quot;Nibble3=15  Nibble3&quot;\n    ensemble /a &quot;Nibble4=15  Nibble4&quot;\n    ensemble /a &quot;Nibble5=15  Nibble5&quot;\n    ensemble /a &quot;Nibble6=15  Nibble6&quot;\n    ensemble /a &quot;Nibble7=15  Nibble7&quot;\n)\n\nsi %Nibble0% GTR 9 (\n    si %Nibble0% EQU dix ensemble &quot;Nibble0=A&quot;\n    si %Nibble0% EQU 11 ensemble &quot;Nibble0=B&quot;\n    si %Nibble0% EQU 12 ensemble &quot;Nibble0=C&quot;\n    si %Nibble0% EQU 13 ensemble &quot;Nibble0=D&quot;\n    si %Nibble0% EQU 14 ensemble &quot;Nibble0=E&quot;\n    si %Nibble0% EQU 15 ensemble &quot;Nibble0=F&quot;\n)\nsi %Nibble1% GTR 9 (\n    si %Nibble1% EQU dix ensemble &quot;Nibble1=A&quot;\n    si %Nibble1% EQU 11 ensemble &quot;Nibble1=B&quot;\n    si %Nibble1% EQU 12 ensemble &quot;Nibble1=C&quot;\n    si %Nibble1% EQU 13 ensemble &quot;Nibble1=D&quot;\n    si %Nibble1% EQU 14 ensemble &quot;Nibble1=E&quot;\n    si %Nibble1% EQU 15 ensemble &quot;Nibble1=F&quot;\n)\nsi %Nibble2% GTR 9 (\n    si %Nibble2% EQU dix ensemble &quot;Nibble2=A&quot;\n    si %Nibble2% EQU 11 ensemble &quot;Nibble2=B&quot;\n    si %Nibble2% EQU 12 ensemble &quot;Nibble2=C&quot;\n    si %Nibble2% EQU 13 ensemble &quot;Nibble2=D&quot;\n    si %Nibble2% EQU 14 ensemble &quot;Nibble2=E&quot;\n    si %Nibble2% EQU 15 ensemble &quot;Nibble2=F&quot;\n)\nsi %Nibble3% GTR 9 (\n    si %Nibble3% EQU dix ensemble &quot;Nibble3=A&quot;\n    si %Nibble3% EQU 11 ensemble &quot;Nibble3=B&quot;\n    si %Nibble3% EQU 12 ensemble &quot;Nibble3=C&quot;\n    si %Nibble3% EQU 13 ensemble &quot;Nibble3=D&quot;\n    si %Nibble3% EQU 14 ensemble &quot;Nibble3=E&quot;\n    si %Nibble3% EQU 15 ensemble &quot;Nibble3=F&quot;\n)\nsi %Nibble4% GTR 9 (\n    si %Nibble4% EQU dix ensemble &quot;Nibble4=A&quot;\n    si %Nibble4% EQU 11 ensemble &quot;Nibble4=B&quot;\n    si %Nibble4% EQU 12 ensemble &quot;Nibble4=C&quot;\n    si %Nibble4% EQU 13 ensemble &quot;Nibble4=D&quot;\n    si %Nibble4% EQU 14 ensemble &quot;Nibble4=E&quot;\n    si %Nibble4% EQU 15 ensemble &quot;Nibble4=F&quot;\n)\nsi %Nibble5% GTR 9 (\n    si %Nibble5% EQU dix ensemble &quot;Nibble5=A&quot;\n    si %Nibble5% EQU 11 ensemble &quot;Nibble5=B&quot;\n    si %Nibble5% EQU 12 ensemble &quot;Nibble5=C&quot;\n    si %Nibble5% EQU 13 ensemble &quot;Nibble5=D&quot;\n    si %Nibble5% EQU 14 ensemble &quot;Nibble5=E&quot;\n    si %Nibble5% EQU 15 ensemble &quot;Nibble5=F&quot;\n)\nsi %Nibble6% GTR 9 (\n    si %Nibble6% EQU dix ensemble &quot;Nibble6=A&quot;\n    si %Nibble6% EQU 11 ensemble &quot;Nibble6=B&quot;\n    si %Nibble6% EQU 12 ensemble &quot;Nibble6=C&quot;\n    si %Nibble6% EQU 13 ensemble &quot;Nibble6=D&quot;\n    si %Nibble6% EQU 14 ensemble &quot;Nibble6=E&quot;\n    si %Nibble6% EQU 15 ensemble &quot;Nibble6=F&quot;\n)\nsi %Nibble7% GTR 9 (\n    si %Nibble7% EQU dix ensemble &quot;Nibble7=A&quot;\n    si %Nibble7% EQU 11 ensemble &quot;Nibble7=B&quot;\n    si %Nibble7% EQU 12 ensemble &quot;Nibble7=C&quot;\n    si %Nibble7% EQU 13 ensemble &quot;Nibble7=D&quot;\n    si %Nibble7% EQU 14 ensemble &quot;Nibble7=E&quot;\n    si %Nibble7% EQU 15 ensemble &quot;Nibble7=F&quot;\n)\n\nensemble &quot;LSW=%Nibble3%%Nibble2%%Nibble1%%Nibble0%&quot;\n\nensemble &quot;MSW=%Nibble7%%Nibble6%%Nibble5%%Nibble4%&quot;\n\nsi %PrefixEnable% EQU 1 (\n    si %UpperPrefix% EQU 1 (\n        écho 0X%MSW%%LSW%\n    ) autre (\n        écho 0x%MSW%%LSW%\n    )\n) autre (\n    écho %MSW%%LSW%\n)\ngoto End\n\n\n:Help\necho.\nécho %ScriptName% [/p^[/p^[/p^[/p^|/P]/hex ^&lt;number^&gt;\nécho %ScriptName% -?^\necho.\nécho     /hex    Dfinit le ^&lt;number^&gt; qui doit tre exprim en hexadcimal.\nécho     /p      Dfinit que le prfixe doit tre affich en minuscules.\nécho     /P      Dfinit que le prfixe doit tre affich en majuscules.\necho.    /?      Affiche cette aide.\necho.\n\n:End\nsi ne pas &quot;%~0&quot;==&quot;:Help&quot; endlocal\nsortie /b 0\n\n\n\nLe script 53 doit tre appel avec des paramtres afin de fonctionner. Ainsi, quand on appelle ce script avec l&amp;#39;un des paramtres suivants: /?, &#8211;, /h, -h, /help ou -help, l&amp;#39;aide est affiche. Si on appelle le script avec les paramtres /hex n (ou n est le nombre voulu), il affiche la reprsentation hexadcimale de ce nombre. Notez galement l&amp;#39;utilisation du paramtre %~nx0 pour dfinir le nom du script, ici, la fonction :Help est appele via un appel au label :UnknowError (la commande exit /b 0 du label :End fournit le saut  l&amp;#39;adresse de retour), %0 aurait t, alors, la chane :Help.\nUn script devrait toujours avoir un squelette similaire  celui du script 53. Pour en connatre la raison, examinons ses diffrentes parties:\n\nle script commence par @Écho off pour rendre plus net l&amp;#39;affichage, puis les variables de configuration sont initialises avec leurs valeurs par dfaut, ce qui permet au script de fonctionner mme si ces valeurs ne sont pas modifies par la suite. The command setlocal est utilise pour les cas d&amp;#39;erreur, par exemple si le nombre donn via l&amp;#39;argument /hex dpasse 32 bits. La variable ErrorLevel n&amp;#39;est pas remise  jour suite  une erreur dans une commande interne, ainsi, si l&amp;#39;on appelle le script depuis l&amp;#39;interprteur avec en paramtre un nombre invalide, tous les appels du script qui suivront, mme avec un nombre valide, se termineront sur une erreur. Pensez  utiliser la commande endlocal avant chaque point de sortie du script;\nvient ensuite le label :ParseArgs dans lequel les paramtres d&amp;#39;appel vont tre vrifis, chaque fois qu&amp;#39;un paramtre est trouv, sa valeur est dfinie dans la variable correspondante puis les paramtres d&amp;#39;appel sont dcals avant le retour au label :ParseArgs. Si le paramtre fourni dans la commande d&amp;#39;appel n&amp;#39;est pas trouv, l&amp;#39;excution continue jusqu&amp;#39;au label :BadSyntax qui affiche un message d&amp;#39;erreur et quitte le script avec le code d&amp;#39;erreur 1;\nune fois tous les paramtres lus, l&amp;#39;excution est redirige vers le label :Init, qui a pour fonction de vrifier que les donnes de travail ont bien t fournies dans la commande d&amp;#39;appel. En effet, ce script appel sans paramtre s&amp;#39;excute au moins jusqu&amp;#39;au label :Init. Dans ce label, il convient, en gnral, de modifier les variables de configuration en fonction des valeurs fournies dans la commande d&amp;#39;appel. Si les donnes fournies ne sont pas valides, l&amp;#39;excution continue au label :UnknowError qui, dans notre cas, va afficher o se trouve l&amp;#39;erreur ainsi que l&amp;#39;aide;\nsi les donnes de travail sont valides, l&amp;#39;excution est redirige vers le label :Exec qui va excuter le travail requis puis afficher le rsultat avant d&amp;#39;tre redirige vers le label :End;\nl&#39;étiquette :Help fournit une aide en ligne de commande (c&amp;#39;est toujours utile). Celui-ci se trouvant juste devant le label :End, il peut  la fois tre utilis comme une fonction ou comme une portion de code classique. Notez l&amp;#39;chappement de la commande écho avec le point  la ligne echo. /? Affiche cette aide. sans quoi l&amp;#39;interprteur aurait affich l&amp;#39;aide de la commande écho.\n\n\n\nLes boucles sont gres par la commande pour, elle permettent une grande quantit d&amp;#39;actions sur des fichiers, des rpertoires ou des chanes de caractres. La boucle pour se compose d&amp;#39;un ensemble sur lequel s&amp;#39;opre une commande. le    est pars puis transite au moyen d&amp;#39;une     autour du . La syntaxe de base de la boucle pour est la suivante.\npour %&lt;variable&gt; dans (&lt;ensemble&gt;) faire &lt;ordre&gt;  \nle     est en fait un paramtre de commande propre  la boucle pour. Elle utilise donc la syntaxe et les modificateurs de paramtre de commande (voir section IV.E.1Les modificateurs de paramtres de commande pour plus d&amp;#39;information),  ceci prs que le paramtre est dsign par une lettre et que le caractre % du paramtre doit tre chapp lorsque la boucle est utilise dans un script. Ainsi dans un script, le paramtre %A doit tre utilis avec le caractre d&amp;#39;chappement %, ce qui nous donne la syntaxe %%A. Il faut aussi noter que les paramtres de la boucle pour respectent la casse, ainsi %a est diffrent de %A.\nle    est compos d&amp;#39;une ou plusieurs entres. Si plusieurs entres sont prsentes, elles doivent tre spares par des virgules pour permettre  la boucle de les distinguer correctement. Ce     peut tre:\n\nsoit des noms de fichiers (avec leurs chemins d&amp;#39;accs s&amp;#39;ils ne sont pas dans le rpertoire courant);\nsoit des chemins d&amp;#39;accs;\nsoit des chanes de caractres.\n\nToutes les composantes de l&amp;#39;    sont passes  la     sous forme de chanes de caractres. Seule l&amp;#39;utilisation qui en est faite dans le traitement dtermine s&amp;#39;il s&amp;#39;agit d&amp;#39;une chane de caractres, d&amp;#39;un nom de fichier ou d&amp;#39;un chemin d&amp;#39;accs. Si une chane de l&amp;#39;    contient un ou plusieurs espaces, elle doit tre place entre guillemets. Exemple avec le script 54:\n\n\n1.2345\n@écho de\npour %%A dans (texte) faire écho %%A\npour %%B dans (&quot;%cd%&quot;) faire si exister %%B écho %%B\npause\nsortie /b\n\n\n\n\n\n\nSi les extensions de commande sont actives, la boucle pour peut prendre un des paramtres de la liste suivante:\nV-A. Les boucles pour chemin d&amp;#39;accs▲\n\nLes boucles pour chemin d&amp;#39;accs permettent d&amp;#39;effectuer des recherches de dossiers ou de fichiers. La recherche de dossier s&amp;#39;effectue avec le paramtre /d tandis que la recherche de fichier s&amp;#39;effectue avec le paramtre /r. Leurs syntaxes sont les suivantes:\npour /d %&lt;paramtre&gt; dans ([« ][[[[&lt;chemin_d&amp;#39;accs&gt;]*[\"]) faire &lt;cmd&gt;  \npour /r [\"][[[[&lt;chemin_d&amp;#39;accs&gt;][\"] %&lt;paramtre&gt; dans ([\"]*[\"]) faire &lt;cmd&gt; \n\n\n\n\nOptions \n\n\nDescriptions","paragraphs":["Les fichiers de commandes sont des scripts de commande qui s&#39;exécutent dans l&#39;interpréteur de commandes Windows. Alors, quel pourrait être l’intérêt d’écrire ces lignes de commande dans un script? En fait, il y a plusieurs raisons:","évitez de devoir réécrire constamment les mêmes commandes lors de tâches répétitives;\nPossibilité de créer de vrais petits programmes facilitant les tâches à exécuter via l&#39;interpréteur de commandes.","Nous étudierons des méthodes pour concevoir ces programmes. Dans la suite de ce document, nous utiliserons la convention suivante:","les termes interprète de commande ou interprète décrivent l&#39;exécutable cmd.exe;\ndans les syntaxes de commande, le cadre des pièces avec les caractères [[[[ et ] sont facultatifs, le cadre des pièces avec les caractères &lt; et &gt; sont remplacés par différentes informations à fournir (celles-ci seront précises avec la syntaxe) et les parties encadrées avec les caractères  et  sont des parties à choix multiples o chaque choix est séparé des autres avec le caractère |.","La convention syntaxique est la même que pour l&#39;aide en ligne de commande, ce qui facilitera votre compréhension.\nI-A. L&#39;éditeur de texte ▲","Un simple éditeur de texte, tel que le bloc-notes fourni avec Windows, n’est pas pratique pour écrire des scripts batch. Pour exploiter pleinement les capacités de ces scripts, vous devez être en mesure de coder des caractères non anglais tels que des accents ou 砻 afin d&#39;accéder aux fichiers dont le nom contient ces types de caractères exotiques. La plupart des éditeurs de texte codent les fichiers avec le jeu de caractères ANSI correspondant à la langue d&#39;installation du système d&#39;exploitation, tandis que l&#39;interpréteur de commande utilise un temps de page de code (également appelé Page de code) en tant que CP-850, qui est le codage par défaut de l’interprète pour les systèmes Windows installés en français (France).\nSous Windows, vous disposez peut-être déjà d’un éditeur de texte, le Notepad ++ (la version 5.9.x ou une version ultérieure est nécessaire); si ce n&#39;est pas le cas, vous pouvez le télécharger ici: http://notepad-plus-plus.org/en/\nDans ce dernier cas, vous pourrez sélectionner le codage dans le menu Codage&gt; Codage de caractères, puis si vous voulez le français par exemple: sélectionnez Langues de l&#39;Europe de l&#39;Ouest&gt; OEM-850. Dans Notepad ++, le pages de code sont des appels OEM-XXX, au lieu de CP-XXX, mais ce sont les mêmes codages. Il convient également de noter que dans le même menu que OEM-850, il y a OEM-863: français; c&#39;est français, mais pour le Qubec. Cette manipulation sera effectuée pour que chaque script utilise l&#39;encodage correct. Il n&#39;est pas possible d&#39;effectuer cette opération automatiquement dans Notepad ++.","I-B. Encodage des caractères ▲","La gestion des pages de code dans l&#39;interpréteur se fait via les commandes mode et chcp, ces commandes sont utilisées pour afficher le page de code utilisé ou le modifier en utilisant l’une des syntaxes suivantes.\nDéfinir les page de code  utiliser (o     est le nombre de page de code).\nmode chatte sélectionnez cp=&lt;XXX&gt;  \nchcp &lt;XXX&gt;  \nVoir la page de code utilisé.\nmode chatte cp [/status]  \nchcp \nLe tableau 1 fournit une liste non exhaustive des différents pages de code utilisé par l&#39;interpréteur de commandes.","Page de code","La description","CP-437","pour le soutien des langues anglophones.","CP-720","pour le soutien des langues arabes.","CP-737","pour le soutien du grec.","CP-775","pour le soutien des langues baltes.","CP-850","pour la prise en charge des langues d&#39;Europe occidentale (mises à jour par le CP 858), y compris le français (France), mais également l&#39;allemand, le basque, le catalan, le danois, l&#39;espagnol, le finnois, l&#39;italien, le français espagnol, le norvégien, le portugais, le suédois, l&#39;afrikaans, le féroïen, Flamand et irlandais.","CP-852","pour le soutien des langues d&#39;Europe centrale.","CP-855","pour le soutien de l&#39;alphabet cyrillique.","CP-857","pour le soutien du turc.","CP-858","pour le support des langues d&#39;Europe occidentale, y compris le français (France), il s&#39;agit d&#39;une mise à jour 1998 basée sur le CP-850 ou seul le symbole € a été ajouté au point de code 0xD5.","CP-861","pour le soutien de islandais.","CP-863","pour le soutien du français (Qubec).","CP-864","pour le soutien des langues arabes.","CP-866","pour le soutien de l&#39;alphabet cyrillique.","CP-869","pour le soutien du grec.","Tableau 1: page de code \nIl convient de noter que, malgré la mise à jour du CP-850 par le CP-858, le codage par défaut de l’interpréteur Windows installé en français (France) reste le CP-850. Il est donc préférable d&#39;utiliser le CP-850. La liste de pages de code supporté par un système Windows est disponible dans le registre sous la clé: HKLM  SYSTEM  CurrentControlSet  Control  Nls  CodePage. Vous remarquerez la présence de 1252 dans le mentionné précédemment, c&#39;est l&#39;encodage Windows-1252 utilisé par les API Windows et donc par la plupart des ordinateurs portables sur des systèmes installés en français (France); cependant, il n&#39;est pas recommandé de l&#39;utiliser dans l&#39;interpréteur de commandes car les commandes ne sont pas faites pour le prendre en charge, cela peut même causer des bogues dans certains cas. Le codage par défaut pour l&#39;interpréteur peut être trouvé via la valeur OEMCP De type REG_SZ toujours dans ce qui est mentionné ci-dessus.\nIl est possible d&#39;ajouter Pages de code manquant (par défaut, seulement pages de code sont disponibles) en installant le pack de langue correspondant au codage souhaité. Chaque module linguistique comprend une table de conversion qui permet à Windows de convertir un point de code en une représentation graphique et de l’afficher. Il est également possible d’utiliser Unicode (UCS-2 uniquement) avec la sortie de commande interne de l’interpréteur pour permettre une interaction avec les programmes utilisant le langage Unicode natif (pour Perl par exemple) en appelant l’interprète via la commande suivante (o     est la commande à exécuter).\ncmd / u &lt;ordre&gt;  \nDans Notepad ++, vous pouvez ajouter les caractères manquants au clavier via le menu Edition&gt; Panneau de caractères ASCII, puis double-cliquez sur le caractère souhaité.","I-C. Bonjour le monde ▲","Nous allons commencer par le monde traditionnel hello, voici le code (Script 1). Copiez le code dans Notepad ++, puis enregistrez-le avec l&#39;encodage OEM-850 et l&#39;extension .bat ou .cmd (uniquement sur les systèmes Vista et supérieurs).","La différence entre le fichier .bat et le fichier .cmd réside dans l&#39;interpréteur de commandes. En fait, sur les systèmes Windows XP, il existait deux interpréteurs de commandes: cmd.exe et COMMAND.COM. Les fichiers avec l&#39;extension .bat ont été gérés par cmd.exe et les fichiers avec l&#39;extension .cmd ont été gérés par COMMAND.COM, les deux types de fichiers ayant des spécificités différentes. Cependant, sous Windows Vista et au-dessus, il ne reste que cmd.exe. Tous les scripts .bat et .cmd sont exécutés par cmd.exe et ont les mêmes spécificités.","1.234567.89\n@écho de\ncls","écho Bonjour Monde !!!! Dj l ?\nécho.\npause","Lorsque nous exécutons ce script en cliquant dessus, nous obtenons l&#39;affichage suivant.","Regardons la composition du script 1. La première ligne, @Écho off, est déjà intéressant, il est composé:","préfixe @ qui sert à inverser l&#39;état de l&#39;affichage standard;\nde la commande écho qui est utilisé pour gérer l&#39;affichage sur la ligne de commande;\net le paramètre de qui sert à désactiver la vue standard.","L’affichage standard définit ce que l’interpréteur de commandes affiche par défaut. Par exemple, lors du lancement de l&#39;interpréteur de commande ci-dessous; la vue standard renvoie le chemin du répertoire en cours, soit C:  Utilisateurs  Portable&gt;.","Lors de l&#39;exécution d&#39;un script, la vue par défaut renvoie, par défaut, le chemin d&#39;accès du répertoire actuel, suivi de l&#39;exécution de la commande, comme dans l&#39;exemple ci-dessous.","Le préfixe @, lorsqu&#39;il est placé en début de ligne, sert à inverser l&#39;état de l&#39;affichage standard (activé ou désactivé) pour l&#39;exécution de la commande qui le suit (pas seulement pour la commande écho). Ce comportement se termine lorsque la commande est exécutée. Donc la commande @cd / d &quot;C:  Users  Portable &quot; ne sera affiché que si l&#39;affichage standard est désactivé. La syntaxe du préfixe @ est la suivante (o     est la commande à exécuter):\n@&lt;ordre&gt;  \nLa commande écho Verts l&#39;affichage dans l&#39;interprète, il peut:","changer le statut de l&#39;affichage standard;\nafficher l&#39;état de l&#39;affichage standard;\nafficher un message ou une ligne vide dans l&#39;interprète.","La désactivation de l&#39;affichage standard peut s&#39;effectuer via la syntaxe suivante (uniquement les erreurs et les messages de la commande écho sont affichés).\nécho de  \nActiver l&#39;affichage standard peut être effectué via la syntaxe suivante (tout est affiché).\nécho nous \nUtiliser sans paramètres, la commande écho renvoie le statut de la vue standard actuelle.\nécho  \nSi nous répétons le script 1, la ligne @Écho off pour désactiver la vue standard sans que la commande soit affichée. Sur la deuxième ligne du script 1, la commande cls est utilisé pour vider la fenêtre de l’interprète de son contenu, cette commande ne prend aucun paramètre. Sa syntaxe est donc la suivante.\ncls \nLa ligne suivante du script 1 est vide, elle ne sera donc pas prise en compte lors de l&#39;exécution du script, ce qui le rendra plus lisible. La quatrième ligne est composée de la commande rem et une chaîne de caractères, cette commande vous permet d’insérer des remarques dans votre script. Si et seulement si l&#39;affichage standard est activé, la commande rem sera affiché. La syntaxe de la commande rem est la suivante (o     est la chaîne de caractères insérée dans la remarque).\nLa cinquième ligne du script 1, :: Ceci est un commentaire., est composé du préfixe :: et une chaîne de caractères. Le préfixe :: définit la chaîne de caractères qui la suit sous forme de commentaire; ce comportement se termine sur la première ligne de retour. Indépendamment de l’état de l’affichage standard, la chaîne de caractères précédée du préfixe :: ne sera pas affiché. La syntaxe est la suivante (o     est le commentaire inséré).\nSuit une autre ligne vide puis la commande echo Hello World !!!! Dj l? qui affiche Bonjour Monde !!!! Dj l? dans la fenêtre de l&#39;interprète. La syntaxe suivante vous permet d’afficher un message même si l’affichage standard est désactivé (o     est le message d’affichage).\nécho &lt;message&gt;  \nPuis vient la commande écho. ce qui permet d&#39;afficher la ligne vide que l&#39;on voit dans l&#39;affichage obtenu. Si un point suit directement la commande écho et qu&#39;après le point il y a un retour de la ligne, celle-ci affiche une ligne vide.\nécho.  \nSur la ligne suivante se trouve la commande pause qui met en pause l&#39;exécution du script jusqu&#39;à ce que l&#39;utilisateur appuie sur une touche du clavier, il affiche le message Appuyez sur une touche pour continuer &#8230; (quel que soit l&#39;état actuel de la vue standard) et ne prend aucun paramètre. En script 1, cette commande permet de visualiser le contenu de la fenêtre de l&#39;interpréteur avant la fermeture de celle-ci.\npause","I-D. Différence entre la commande rem et le préfixe :: ▲","Pour mieux comprendre la différence entre la commande rem et le préfixe ::, essayons le script 2.","1.234567.\ncls","@écho de","pause","Comme vous le voyez dans la vue script 2, la commande Rem Note 1, est présente l&#39;encoche; Lorsque l’écran standard est activé, toutes les commandes affichées sont affichées. La chaine :: Commentaire 1 n&#39;est pas affiché, cela est dû au fait que le préfixe :: n&#39;est pas une commande et n&#39;est donc pas renvoyé par la vue standard. Puis vient la commande @Écho off qui désactive l’affichage standard sans afficher la commande, suivi de la commande Rem Note 2 qui ne s&#39;affiche pas (l&#39;affichage standard est jusqu&#39;à présent désactivé), ni la chaîne :: commentaire 2 ce qui est en tout cas exclu par l&#39;affichage standard.","C&#39;EST À DIRE. Le personnage s&#39;échappe","Les caractères spéciaux (également appelés caractères mta) sont des caractères qui ont une signification particulière pour l&#39;interpréteur de commandes. Chaque fois que l&#39;interprète les rencontre, il leur applique le traitement correspondant, indépendamment de leur position dans la ligne de commande. Voici la liste:\nEt | ^ &lt; &gt; ()  \nPour pouvoir les utiliser dans une chaîne de caractères, vous devez les échapper avec le caractère ^c&#39;est-à-dire, mettez ce personnage devant lui. Ainsi, l&#39;interprète saura qu&#39;ils font partie d&#39;une chaîne et qu&#39;ils n&#39;ont rien à voir avec la commande. Voir le script 3 à titre d&#39;exemple.","1.23\n@écho de\nécho ^Et ^| ^^ ^&lt; ^&gt; ^ (^)\npause","Il convient également de noter que d&#39;autres caractères peuvent nécessiter une évasion, mais ils suivent d&#39;autres règles. Le personnage % doit être caché par lui-même pour être considéré comme faisant partie d&#39;une chaîne lorsqu&#39;il est utilisé dans un script, comme indiqué dans le script 4.","1.23\n@écho de\nécho %%\npause","Un autre cas est note, il concerne les personnages &quot; et  qui doit être échappé avec le personnage  lorsqu&#39;il est utilisé dans un paramètre cité. Dans le script 5, si les personnages &quot; et  n&#39;avait pas été manqué, le résultat ne serait pas celui attendu. L&#39;interprète aurait compris qu&#39;il y avait une chaîne bloc-notes &quot;cmd / c&quot; et une chaine &quot;% CD%  ~% nx0&quot; &quot;, ce qui aurait entraîné une erreur dans l’évaluation de la commande.","1.23\n@écho de\ncourir comme / Utilisateur:% Nom d&#39;utilisateur% &quot;cmd / c  &quot;bloc-notes &quot;%CD%\\% ~ Nx0 &quot;&quot;\npause","Caractère d&#39;échappement ^ peut également être utilisé pour écrire une même commande sur plusieurs lignes. Quand l&#39;interprète rencontre le personnage ^ devant un retour à la ligne, il supprime ce caractère et renvoie la ligne, puis continue à lire les données fournies à la ligne suivante. Exemple avec le script 6.","1.234\n@écho de\nécho foo ^\nbar\npause","D&#39;autres échappements existent, mais ils seront abordés plus tard dans ce document, car ils appliquent des ordres précis et ne concernent pas les autres. Par exemple, la commande écho qui considère le point comme une évasion de la chaîne qui le suit. Quand la commande écho est directement suivie d’un point; elle considère la chaîne située après le point comme un affichage de la chaîne et renvoie la ligne incluse. Cela vous permet d’utiliser un mot au début de la chaîne qui aurait autrement été considéré comme un paramètre. Exemple avec le script 7.","1.234567.89dix.11121314151617181920212223242526\n@écho de","écho Afficher une ligne vide sans le point:\nécho","écho.\nécho.","écho Afficher une ligne vide avec le point:\nécho.","écho.\nécho.","écho Affichage de la chaîne &quot;/?  Impression cette aide. &quot;sans le point:\nécho     /?  Impression cette aide.","écho.\nécho.","écho Affichage de la chaîne &quot;/?  Impression cette aide. &quot;avec le point:\nécho.    /?  Impression cette aide.","écho.\nécho.\npause","Dans l&#39;affichage ci-dessous, nous remarquons que l&#39;affichage d&#39;une ligne vide sans point renvoie l&#39;état de l&#39;affichage standard contrairement à celui avec un point. Si l&#39;emplacement d&#39;une ligne de retour avait été utilisé par plusieurs espaces, le résultat aurait été identique, quel que soit le nombre d&#39;espaces. En effet, l&#39;interprète n&#39;évalue pas le nombre d&#39;espaces entre deux composants d&#39;une ligne de commande, il aurait donc considéré qu&#39;aucun paramètre n&#39;était fourni. C&#39;est la même chose avec la chaîne /? Imprimer cette aide., l&#39;interprète considère la sous-chaîne /? en tant que paramètre qui affiche l&#39;aide dans la ligne de commande.","Le tableau 2 résume les différents types d’échappement que nous venons de voir.","échappement","La description","^","Plac devant l&#39;un des caractères spéciaux, soit &amp; ^ | &lt;&gt; ()cela signifie que le caractère qui le suit fait partie de la chaîne et n&#39;a rien à voir avec la commande.","Plac devant une ligne de retour, cela signifie que la ligne suivante fait partie de la même commande.","%","Plac devant le personnage % dans un script, cela signifie que le caractère qui le suit fait partie de la chaîne.","Plac devant l&#39;un des personnages  et &quot; dans un paramètre cité, cela signifie que le caractère qui le suit fait partie de l&#39;argument cité.",".","Plac immédiatement après la commande écho, cela signifie que la chaîne qui suit est une chaîne d&#39;affichage et non un paramètre de la commande écho.","Tableau 2: Échappement","SI. Les bugs de la commande rem et du préfixe :: ▲","Un problème récurrent dans script de batch est-ce que des commentaires et des commentaires (fournis via rem et ::) causer des bugs dus à une mauvaise utilisation. La commande rem et le préfixe :: en prenant une chaîne de caractères comme paramètres, ils attendent une chaîne de caractères valide. Ainsi, les échappements doivent être utilisés pour les caractères suivants: &amp; | ^ < > ()%.","Les variables sont gérées via la commande ensemble, il existe deux types dont voici la liste:","variables de chaîne de caractères;\nnombre entier signe de variables.","Chaque type de variable est déclaré et marqué différemment; il est possible de les couler, c&#39;est-à-dire de les passer d&#39;un type à l&#39;autre, à condition de respecter les règles suivantes:","une chaîne de caractères qui ne peut être numérique que si elle ne contient que des nombres;\nun nombre peut toujours être transtyp en une chaîne de caractères (qui ne contiendra que des nombres).","Les variables sont accessibles via un identifiant qui leur est propre. Ainsi, chaque fois que cet identifiant est mentionné, l&#39;interpréteur pourra fournir la valeur associée. Cela peut être fait en utilisant le personnage % des deux côtés de l&#39;identifiant, on parle d&#39;expansion de la variable. Par exemple avec la variable CHEMIN (qui est une variable d’environnement: fournie par le système), pour obtenir sa valeur; la syntaxe doit être utilisée % CHEMIN% comme dans le script 8.","1.23\n@écho de\nécho % CHEMIN%\npause","Ce qui produirait un affichage similaire à celui ci-dessous.","Les identificateurs de variable ne sont pas sensibles à la casse, c&#39;est-à-dire que l&#39;interpréteur ne fait pas la différence entre les majuscules et les minuscules lorsqu&#39;il développe, crée ou modifie une variable. Donc les identifiants CHEMIN, Chemin et chemin identifier une seule et même variable.\nII-A. Variables d&#39;environnement ▲","Nous allons commencer par les variables d’environnement, elles sont toutes de type string. C&#39;est le système d&#39;exploitation qui définit leurs valeurs, soit parce que d&#39;un système à l&#39;autre, leurs valeurs peuvent être différentes, soit parce que ces variables sont définies de manière dynamique au fur et à mesure de leur développement. Cela permet d’accéder à des fichiers dont le chemin d’accès peut ne pas être identique d’une machine à l’autre ou d’obtenir, par exemple, l’heure ou la date dont les valeurs sont modifiées de façon permanente.\nDans le tableau 3, vous trouverez la liste de ces variables. Dans la première colonne, vous trouverez le nom de ces variables. ces noms sont réservés par le système et même s&#39;il est possible de changer leur valeur lors de l&#39;exécution du script, les modifications apportées prendront fin en même temps que le script. De plus, dans certains cas, la modification de leur valeur peut amener le script à mal évaluer l&#39;environnement. La deuxième colonne donne la description de la valeur renvoyée par la variable. Et enfin, la troisième colonne donne la compatibilité en fonction de la version du système. Dans cette colonne, les systèmes NT sont mentionnés, il s&#39;agit de la famille du système d&#39;exploitation. Les systèmes NT sont des systèmes basés sur un noyau de type NT à partir du système Windows du même nom. Cette famille comprend le jour où ces lignes sont écrites:","Systèmes Windows NT X.Y (X étant la révision majeure et Y la révision mineure);\nSystèmes Windows 2000\nSystèmes Windows XP\nSystèmes Windows Server 2003\nSystèmes Windows Vista\nSystèmes Windows Server 2008\nSystèmes Windows 7\nSystèmes Windows Server 2012\net les systèmes Windows 8.","Variable","La description","compatibilité","AllUsersProfile","Renvoie le chemin d&#39;accès complet au répertoire des données utilisateur commun à tous les utilisateurs. Par défaut: HomeDrive %%  ProgramData.","Disponible sur tous les systèmes NT.","Données d&#39;application","Renvoie le répertoire de données d&#39;application commun sous la forme % UserProfile%  AppData  Roaming.","Disponible sur tous les systèmes NT.","CD","Renvoie le chemin complet du répertoire dans lequel le script est exécuté. Ce répertoire peut être différent du répertoire dans lequel le script a démarré (s&#39;il a été déplacé au cours de son exécution).","Disponible sur tous les systèmes NT.","CMDCMDLINE","Renvoie la ligne de commande d&#39;origine qui a appelé l&#39;interpréteur de commandes.","Disponible sur tous les systèmes NT.","CMDEXTVERSION","Renvoie le numéro de version des extensions de commande du processeur de commandes en cours.","Disponible sur tous les systèmes NT.","CommonProgramFiles","Renvoie le chemin complet vers les applications 32 bits communes aux systèmes 32 bits ou les applications 64 bits vers 64 bits, telles que: % ProgramFiles%  Fichiers communs.","Disponible sur tous les systèmes NT.","CommonProgramFiles (x86)","Renvoie le chemin complet du répertoire de fichiers communs 32bits sur les systèmes 64bits:% ProgramFiles (x86)%  Fichiers communs.","Disponible uniquement sur les systèmes NT 64bits.","Programme commun W6432","Renvoie le chemin complet du fichier commun des applications 16 bits sur les systèmes 64 bits et les systèmes Vista 32 bits et supérieurs: % ProgramW6432%  Fichiers communs.","Disponible uniquement sur les systèmes NT 64 bits et les systèmes Vista 32 bits et supérieurs.","Nom de l&#39;ordinateur","Renvoie le nom de l&#39;ordinateur sur lequel le script est exécuté.","Disponible sur tous les systèmes NT.","ComSpec","Renvoie le chemin complet de l&#39;interprète: % WinDir%  system32  cmd.exe.","Disponible sur tous les systèmes NT.","Daté","Renvoie la date actuelle en utilisant le même format que la commande daté.","Disponible sur tous les systèmes NT.","ErrorLevel","Renvoie la valeur du code d&#39;erreur actuel. Cette valeur est modifiée après chaque ligne de commande, en fonction du résultat de la commande. En général, la variable ErrorLevel renvoie 1 ou plus en cas d&#39;erreur de la dernière commande et 0 si aucune erreur ne s&#39;est produite. Cependant, il arrive que ce comportement varie en fonction des commandes, il est donc recommandé de se reporter à l&#39;aide concernant cette commande.","Disponible sur tous les systèmes NT.","FP_NO_HOST_CHECK","CAROLINE DU NORD.","Disponible sur tous les systèmes NT.","Le plus haut numéro de numéro de noeud","Renvoie le numéro de nœud NUMA le plus élevé de l&#39;ordinateur sur lequel le script est exécuté.","Disponible uniquement sur les systèmes NT 64bits.","HomeDrive","Renvoie le point de montage de la partition qui héberge les répertoires de l&#39;utilisateur. Par défaut: C:.","Disponible sur tous les systèmes NT.","HomePath","Renvoie le chemin d&#39;accès au répertoire de l&#39;utilisateur actuellement connecté. Par défaut:  Utilisateurs % nom d&#39;utilisateur%.","Disponible sur tous les systèmes NT.","LocalAppData","Renvoie le répertoire local des données d&#39;application sous la forme: % UserProfile%  AppData  Local.","Disponible sur tous les systèmes NT.","LogonServer","Renvoie l&#39;URL locale du système d&#39;exploitation sous la forme \\% Nom de l&#39;ordinateur%.","Disponible sur tous les systèmes NT.","NUMBER_OF_PROCESSORS","Renvoie le nombre de cœurs logiques sur l&#39;ordinateur sur lequel le script est exécuté.","Disponible sur tous les systèmes NT.","OS","Renvoie le type de noyau sur lequel est basé le système d&#39;exploitation. Sur les systèmes NT, cette variable renvoie toujours la chaîne. Windows_NT.","Disponible sur tous les systèmes NT.","Chemin","Renvoie la liste des répertoires reconnus par le système comme contenant des exécutables. Chaque répertoire est répertorié par son chemin d&#39;accès complet, suffixé d&#39;un point-virgule. Si un exécutable se trouve dans l&#39;un des répertoires de cette liste, il n&#39;est pas nécessaire de fournir un chemin complet pour l&#39;appeler sur la ligne de commande.","Disponible sur tous les systèmes NT.","PATHEXT","Retourne une liste des extensions de fichiers reconnues par le système comme étant à la fois des extensions de fichiers exécutables. Si une extension de fichier ne figure pas dans cette liste, le fichier ne peut pas être appelé en tant que commande.","Disponible sur tous les systèmes NT.","PROCESSOR_ARCHITECTURE","Renvoie le type d&#39;architecture (32 / 64bits) du processeur sur lequel le script est exécuté. Les valeurs possibles sont: X86 pour les processeurs 32 bits, AMD64 pour les processeurs 64 bits basés sur l&#39;architecture x86 et IA64 pour les processeurs Itanium.","Disponible sur tous les systèmes NT.","PROCESSOR_IDENTIFIER","Retourne une identification précise du processeur sur lequel le script est exécuté. Cette identification est une chaîne de caractères composée du type d&#39;architecture suivi de la famille, du modèle, de la révision et enfin du fabricant du processeur.","Disponible sur tous les systèmes NT.","PROCESSOR_LEVEL","Retourne une identification précise de la famille de la micro-architecture du processeur.","Disponible sur tous les systèmes NT.","PROCESSOR_REVISION","Renvoie un modèle de processeur spécifique et l&#39;identification de la révision sous la forme d&#39;une chaîne de caractères représentant un nombre hexadécimal à deux octets, le premier pour le modèle et le second pour la révision.","Disponible sur tous les systèmes NT.","Données de programme","Renvoie le répertoire de données d&#39;application 64 bits commun sous la forme: % SystemDrive%  ProgramData.","Disponible uniquement sur les systèmes NT 64bits.","Fichiers de programme","Renvoie le chemin complet du répertoire ProgramFiles. Ce répertoire contient des applications 32 bits sur des systèmes 32 bits ou des applications 64 bits sur des systèmes 64 bits.","Disponible sur tous les systèmes NT.","ProgramFiles (x86)","Renvoie le chemin complet du répertoire ProgramFiles (x86). Ce répertoire contient des applications 32 bits sur des systèmes 64 bits.","Disponible uniquement sur les systèmes NT 64bits.","ProgramW6432","Renvoie le chemin complet du répertoire ProgramW6432. Ce répertoire contient les applications 16 bits sur les systèmes 64 bits et les systèmes Vista 32 bits et supérieurs.","Disponible sur les systèmes NT 32 et 64bits Vista et supérieurs.","Rapide","Renvoie la chaîne de configuration pour l&#39;affichage standard, par défaut: $ P $ G. Voir l&#39;aide de la commande rapide pour plus d&#39;informations: invite /?.","Disponible sur tous les systèmes NT.","PSModulePath","Renvoie le chemin d&#39;accès complet aux modules PowerShell.","Disponible uniquement sur Vista et les systèmes supérieurs. (XP avec mise à jour KB926140)","Publique","Renvoie le chemin complet du répertoire de documents publics sous la forme HomeDrive %%  Users  Public.","Disponible uniquement sur Vista et les systèmes supérieurs.","au hasard","Retourne un nombre aléatoire compris entre 0 et 32767.","Disponible sur tous les systèmes NT.","Nom de session","Retourne le nom de la session en cours. Par défaut: Console.","Disponible sur tous les systèmes NT.","SystemDrive","Renvoie le point de montage de la partition sur laquelle le système d&#39;exploitation est installé.","Disponible sur tous les systèmes NT.","RacineSystème","Renvoie le chemin complet du système d&#39;exploitation sous la forme % SystemDrive%  Windows.","Disponible sur tous les systèmes NT.","Temp","Renvoie le chemin d&#39;accès complet au répertoire de fichiers temporaires de l&#39;utilisateur. Par défaut: % UserProfile%  AppData  Local  Temp.","Disponible sur tous les systèmes NT.","Temps","Renvoie l&#39;heure actuelle en utilisant le même format que la commande temps.","Disponible sur tous les systèmes NT.","tmp","Même temp.","Disponible sur tous les systèmes NT.","UserDomain","Renvoie le nom de domaine de l&#39;ordinateur sur lequel le script est exécuté. Si le système n&#39;appartient pas à un domaine, le nom de domaine sera le nom de l&#39;ordinateur sur lequel le script est exécuté.","Disponible sur tous les systèmes NT.","Nom d&#39;utilisateur","Renvoie le nom de l&#39;utilisateur actuellement connecté.","Disponible sur tous les systèmes NT.","Profil de l&#39;utilisateur","Renvoie le chemin d&#39;accès complet au répertoire d&#39;utilisateurs de l&#39;utilisateur actuellement connecté en tant que: HomeDrive %%  Users % nom_utilisateur%.","Disponible sur tous les systèmes NT.","WinDir","Renvoie le chemin complet du répertoire d&#39;installation du système. Par défaut: % SystemDrive%  Windows.","Disponible sur tous les systèmes NT.","Tableau 3: Variables d&#39;environnement","II-B. L&#39;ensemble ▲","La commande ensemble variables gre dans l&#39;interpréteur, cela permet:","créer une variable;\nassigner une valeur à une variable\nmodifier le contenu d&#39;une variable;\nsupprimer le contenu d&#39;une variable;\neffectuer des opérations mathématiques ou logiques entre les nombres;\nRécupération de l&#39;entrée d&#39;un utilisateur pour la placer dans une variable\net jette le contenu d&#39;une variable.","Voici la syntaxe de la commande ensemble.\nAttribuez une valeur à la variable sous forme de chaîne de caractères (o     est son identifiant et     est une chaîne de caractères).\nensemble [« ]&lt;variable&gt;=&lt;chane&gt;[« ]  \nAttribuez à la variable une valeur sous forme de signe de nombre entier (o     est une expression numérique à évaluer: détaillée plus loin).\nensemble /à [« ]&lt;expression&gt;[« ]  \nAttribuez à la variable une valeur, entrée par l&#39;utilisateur, sous forme de chaîne de caractères après l&#39;affichage de la chaîne d&#39;invite, le cas échéant (o     est son identifiant et o     est une chaîne de caractères indique à l&#39;utilisateur de l&#39;inviter à entrer une chaîne de clés).\nensemble / p [« ]&lt;variable&gt;=[[[[&lt;chane_invite&gt;][« ]  \nSupprime la valeur de la variable de mémoire, son identifiant reste indexé par l&#39;interpréteur, mais sa valeur est indéfinie.\nensemble [« ]&lt;variable&gt;=[« ]  \nVoici les règles habituelles de la commande ensemble:","Si la commande ensemble est utilisé sans paramètre, il affiche les variables définies dans le contexte actuel (détaillé plus tard).\nS&#39;il est utilisé avec comme paramètre une chaîne (ou un nom de variable), sans valeur ni signe gal; il affiche ensuite la variable dont le nom correspond à la chaîne de paramètres donnée et / ou les variables dont le nom commence par la chaîne de paramètres donnée.\nSi elle est utilisée avec un nom de variable et un signe gal non valide, alors le contenu de la variable est vide de mémoire, il est possible de vérifier si une variable est définie, mais nous aborderons ce point dans le chapitre suivant.\nToute chaîne non numérique dans l&#39;expression de valeur est traitée comme un identificateur de variable et est convertie en un nombre avant d&#39;être utilisée (utilisée avec le paramètre /à), si la variable n’existe pas ou est indéfinie, elle prend la valeur 0.\nUne valeur d&#39;expression numérique doit toujours être placée entre guillemets pour permettre l&#39;utilisation d&#39;opérateurs logiques et d&#39;opérateurs de regroupement.","Regardons de plus près le fonctionnement de la commande ensemble avec le script 9.","1.234567.89dix.11121314151617181920\n@écho de\nensemble VAR_Espace_Un=&quot;Ma chaine avec des espaces&quot;\nensemble VAR_Espace_Deux &quot;=Mon canal avec des espaces &quot;\nensemble &quot;VAR_Espace_Trois=Mon canal avec des espaces &quot;","ensemble / p VAR_Saisie_Un=    ma première saisie:    \nensemble / p &quot;VAR_Saisie_Two=    ma saisie deux: &quot;\nensemble / a VAR_Calcul_Un=1 + 10\nensemble / a VAR_Calcul_Two &quot;=2 + 20 &quot;\nensemble / a &quot;VAR_Calcul_Trois=3 + 30 &quot;\nécho.\nécho %% VAR_Espace_Un\nécho %% VAR_Espace_Deux\nécho %% VAR_Espace_Trois\nécho.\nensemble VAR_Saisie\nécho.\nensemble VAR_Calcul\nécho.\npause","Comme vous pouvez le constater, les guillemets occupent une place de choix dans ce script. observez où ils sont placés. De la ligne 2 à la ligne 4, les valeurs des variables sont des chaînes de caractères avec des espaces. La déclaration de la variable VAR_Espace_Un se fait avec des guillemets placés des deux côtés de la chaîne, la déclaration de la variable VAR_Espace_Deux se fait avec des guillemets: une place devant le signe gal et l’autre au bout de la chaîne; la déclaration de la troisième variable VAR_Espace_Trois se fait avec des guillemets: un avant le nom de la variable et l’autre en fin de ligne. Si nous nous référons à l&#39;affichage obtenu, nous remarquons que les première et troisième variables affichent une sortie correcte; la seconde variable quand ça ne marche pas; il est donc facile de déduire que si les guillemets s&#39;ouvrent avant l&#39;identifiant de la variable et se ferment après la valeur de la variable, ils ne font pas partie de la variable; et si les guillemets s’ouvrent avant la valeur de la variable et se ferment après la valeur de la variable, ils font partie de la variable.\nLes deux saisies de l&#39;utilisateur ont également abouti à un résultat intéressant, la ligne de commande qui décline VAR_Saisie_Un n&#39;utilisez pas de guillemets; par contre the line of order VAR_Saisie_Deux, elle, en utilise. Lors de l&#39;affichage des invitations de saisie utilisateur, les espaces se sont mutés avant les chaînes d&#39;invités ont disparu, et ceux-ci se sont après affichés. Sur les espaces en début de ligne sont ignorés et ceux de la fin sont considérés comme faisant partie de la chaîne d&#39;invitation.\nEn ce qui concerne les variables VAR_Calcul_XXX, elles sont toutes préférables mais respectent également les règles de syntaxe; c’est &#8211; dire toujours mettre l’expression numérique entre guillemets. Cela sera utile dans la suite du chapitre.","II-C. Les variables de type chane de caractères ▲","Ce sont, mon sens, les plus utilise en batch. Ce sont toutes les variables composées de caractères alphanumériques et autres caractères. Les chansons de caractères sont claires via la commande ensemble et il n&#39;est pas nécessaire d&#39;utiliser des guillemets pour que les espaces soient pris en compte, en tant que partie intégrante de la chaîne, et ce, ce sont eux qui sont placés dans la chaîne.\nElles offrent aussi d&#39;autres possibilités comme la substitution de chaîne dans l&#39;expansion de la variable. Ainsi avec la syntaxe suivante, il est possible de modifier la variable lors de son expansion sans que cela ne soit que sa valeur (o     est l&#39;identifiant de la variable,     is the chane remplacer et     est la chane inser la place de ). Exemple avec le script 10.\n%:=%","1.23456\n@écho de\nensemble &quot;X=une chane &quot;\nécho La variable avec substitution: % X: une = ma%\nécho La valeur réelle de la variable: %X%\nécho.\npause","peut aussi tre une chane prcde d&#39;un astrisque (*), dans ce cas, la substitution commence par la valeur de la variable et se termine après la première occurrence de la chaîne spéciale dans la substitution. Exemple avec le script 11.","1.2345\n@écho de\nensemble &quot;X=chaîne&quot;\nécho Substitution avec astrisque: % X: * t = d%\nécho.\npause","Il ne faut jamais utiliser un astrisque seul dans la substitution, sans quoi, l&#39;interprète de commande se ferme sans autre forme de procs. L &#39;astrisque en fin de chaîne ne provoque pas d&#39; erreur, mais ne permet pas la substitution, la variable est étendue avec sa valeur d &#39;origine.\nLa substitution ne modifie pas la valeur de la variable, elle transforme juste la variable au moment de l&#39;expansion. Pour modifier la valeur de la variable, il faut faire avec la commande ensemble. Exemple avec le script 12.","1.23456\n@écho de\nensemble &quot;VAR=ma chane &quot;\nécho % VAR%\nensemble &quot;VAR=% VAR: chane = voiture%&quot;\nécho % VAR%\npause","Vous pouvez aussi ne pas développer une partie d&#39;une chanson en slectionnant les caractères voulus. Cela se fait via la syntaxe suivante (o     est l&amp;#39;identifiant de la variable,     est l&amp;#39;index du premier caractre en partant de 0 et     est la longueur de la slection). Exemple avec le script 13.\n%:~,%","1.23456\n@écho de\nensemble &quot;VAR=ma chane&quot;\nécho %VAR:~0,2%\nensemble &quot;VAR=%VAR:~3,6%&quot;\nécho %VAR%\npause","Si la     n&amp;#39;est pas spcifie, tout le reste de la chane est slectionn, en partant du caractre fourni en . Si une des valeurs donnes est ngative, alors la valeur utilise est la longueur totale de la chane ajoute  la valeur ngative.","1.234567.89dix.11\n@écho de","ensemble &quot;VAR=ma chane&quot;","écho %VAR:~-6%","écho %VAR:~0,-7%","pause","II-D. Les variables de type nombre entier sign▲","The command set /a permet d&amp;#39;utiliser les nombres entiers signs allant de -2147483648  +2147483647 (cods sur 32bits). Si vous n&amp;#39;utilisez pas le paramtre /a dans la commande, alors la squence de chiffres sera considre comme tant une chane de caractres, et non un nombre. La syntaxe de la commande set /a est la suivante.\nensemble /a &lt;expression&gt;  \n    utilise, quant  elle, la syntaxe suivante.\n[« ]&lt;s&#39;identifier&gt;[[[[&lt;affectation&gt;[{[{[{[&lt;sous-expression&gt;]][« ]  \nLes expressions numriques doivent tre places entre des guillemets si elles contiennent des oprateurs logiques ou de groupement (dtaill plus loin dans ce chapitre). Ces diffrentes constituantes sont:","qui est l&amp;#39;identifiant de la variable de destination;\n    qui est l&amp;#39;oprateur d&amp;#39;attribution de l&amp;#39;expression, comme le signe gal qui effectue l&amp;#39;opration d&amp;#39;attribuer une valeur  une variable, d&amp;#39;autres oprateurs d&amp;#39;attribution seront dtaills dans cette section;\npuis soit     qui est une valeur immdiate (un nombre quelconque), soit     qui est une sous-expression, ces dernires seront dtailles dans le reste de cette section.","Vous pouvez spcifier plusieurs expressions en les sparant par des virgules.","@écho de\nensemble /a &quot;VAR1=1&quot;, &quot;VAR2=2&quot;\nécho VAR1: %VAR1%\nécho VAR2: %VAR2%\npause","Les chanes de caractres prsentes dans l&amp;#39;expression sont considres comme des variables et sont expanses ( l&amp;#39;exception de l&amp;#39;identifiant de la variable de destination), cela permet de faire des oprations sur des variables sans avoir  utiliser de symbole % pour leur expansion.","@écho de\nensemble /a &quot;VAR1=1&quot;\nensemble /a &quot;VAR2=VAR1&quot;\nécho VAR1: %VAR1%\nécho VAR2: %VAR2%\npause","Si un nom de variable inexistante ou indfinie est utilis, alors elle prend la valeur 0.","1.2345\n@écho de","ensemble /a &quot;VAR2=VAR1&quot;\nécho VAR2: %VAR2%\npause","Les sous-expressions sont constitues de nombres, d&amp;#39;oprateurs et ventuellement de parenthses, ces dernires s&amp;#39;utilisent de la mme manire qu&amp;#39;en mathmatiques et elles n&amp;#39;ont pas besoin d&amp;#39;tre chappes si, et seulement si, les guillemets sont utiliss. Toutes les constituantes d&amp;#39;une sous-expression sont soumises  la prsance, c&amp;#39;est&#8211;dire l&amp;#39;ordre dans lequel les diverses constituantes vont tre values. L&amp;#39;ordre de prsance utilis est le suivant (dans l&amp;#39;ordre dcroissant d&amp;#39;valuation):","le groupement soit ( );\nles oprateurs unaires ! ~ &#8211;;\nles oprateurs arithmtiques * / %;\nles oprateurs arithmtiques + &#8211;;\nle dcalage logique &lt;< >&gt;;\nle ET au niveau du bit Et;\nle OU exclusif au niveau du bit ^;\nle OU inclusif au niveau du bit |;\nl&amp;#39;&amp;#39;attribution = *= /= %= += -= &amp;= ^= |= &lt;&gt;=;\nle sparateur d&amp;#39;expression ,.","Il faut galement noter que l&amp;#39;utilisation du nombre -2147483648 tel quel dans une expression provoque une erreur, c&amp;#39;est d au transtypage effectu par l&amp;#39;interprteur. Ce dernier value d&amp;#39;abord la chane 2147483648 afin de la transtyper puis lui applique l&amp;#39;oprateur unaire &#8211;. Mais comme le nombre 2147483648 va au-del de la dfinition d&amp;#39;un nombre sur 32bits, l&amp;#39;opration gnre une erreur, exemple avec le script suivant.","1.234567.89dix.\n@écho de\nécho Nombre brute:\nensemble /a &quot;ParseError=-2147483648&quot;\nécho %ParseError%\necho.\nécho Nombre avec valuation:\nensemble /a &quot;ParseError=-2147483647 - 1&quot;\nécho %ParseError%\necho.\npause","Une autre mthode qui fonctionne pour ce cas est la suivante.","1.2345\n@écho de\nensemble &quot;SInt32=-2147483648&quot;\nensemble /a &quot;SInt32&quot;\nécho %SInt32%\npause","II-D-1. Les oprations arithmtiques▲","The command set /a prend en charge les cinq oprations arithmtiques suivantes:","l&amp;#39;addition;\nla soustraction;\nla multiplication;\nla division;\net le modulo (le modulo est une opration qui sert  rcuprer le reste d&amp;#39;une division).","Oprateur arithmtique","Oprateur d&amp;#39;attribution","Opration effectue","+","+=","Une addition","&#8211;","-=","Soustraction","*","*=","Multiplication","/","/=","Division","%","%=","Modulo","Tableau 4: Oprations arithmtiques \nUne note particulire pour le modulo: dans un script de commande, le symbole du modulo % doit tre prfix du caractre d&amp;#39;chappement %. Dans ce cas, c&amp;#39;est un pige dans lequel le novice peut se perdre, le premier symbole % est un caractre d&amp;#39;chappement qui permet au deuxime symbole %, le modulo, d&amp;#39;tre pris en compte  l&amp;#39;excution du script. Dans l&amp;#39;interprteur de commande, le modulo (%) n&amp;#39;as pas besoin d&amp;#39;tre chapp, c&amp;#39;est une spcificit du script. Ainsi la commande suivante fonctionne dans l&amp;#39;interprteur.\nensemble /a &quot;Mod=5 % 2&quot;  \nAlors que celle-ci ne fonctionne pas.\nensemble /a &quot;Mod=5 %% 2&quot;","Dans un script, par contre, c&amp;#39;est l&amp;#39;inverse.","1.23456\n@écho de\nensemble /a &quot;Mod=5 % 2&quot;\nécho Mod1: %Mod%\nensemble /a &quot;Mod=5 %% 2&quot;\nécho Mod2: %Mod%\npause","Ainsi, les oprations arithmtiques s&amp;#39;utilisent de manire classique dans les sous-expressions. Si une variable inexistante ou indfinie est utilise dans une sous-expression, elle prend la valeur 0, exemple avec le script 21.","1.234567.89dix.111213\n@écho de\nensemble /a &quot;Un=1&quot;\nensemble /a &quot;Deux=1 + 1&quot;\nensemble /a &quot;Trois=4 - 1&quot;\nensemble /a &quot;Quatre=2 * 2&quot;\nensemble /a &quot;Cinq=10 / 2&quot;\nensemble /a &quot;Six=26 %% 10&quot;\nensemble /a &quot;Sept=(( 2 + 1 ) * 2 ) + 1&quot;","ensemble /a &quot;Huit=8+Dix&quot;,&quot;Neuf=10-Un&quot;\nécho %Un%, %Deux%, %Trois%, %Quatre%, %Cinq%, %Six%, %Sept%, %Huit%, %Neuf%\necho.\npause","L&amp;#39;attribution permet d&amp;#39;effectuer des oprations sur des variables existantes, si une variable inexistante ou indfinie est utilise, elle prend la valeur 0.","1.234567.89dix.1112\n@écho de\nensemble /a &quot;Attrib1=1&quot;,&quot;Attrib2=2&quot;,&quot;Attrib3=3&quot;,&quot;Attrib4=4&quot;,&quot;Attrib5=5&quot;","ensemble /a &quot;Attrib0+=1&quot;\nensemble /a &quot;Attrib1+=1&quot;\nensemble /a &quot;Attrib2*=2&quot;\nensemble /a &quot;Attrib3-=2&quot;\nensemble /a &quot;Attrib4/=2&quot;\nensemble /a &quot;Attrib5%%=2&quot;\nécho %Attrib0%, %Attrib1%, %Attrib2%, %Attrib3%, %Attrib4%, %Attrib5%\necho.\npause","II-D-2. Les oprations logiques▲","Elles ne peuvent s&amp;#39;effectuer que sur des nombres et suivent les rgles de l&amp;#39;algbre de Boole. Les oprations logiques prises en charge par la commande set /a possdent, elles aussi, des oprateurs d&amp;#39;attribution. Exemple avec le script 23.","Oprateur logique","Oprateur d&amp;#39;attribution","La description","Et","&amp;=","ET logique au niveau du bit. (Bitwise AND)","^","^=","OU exclusif au niveau du bit. (Bitwise XOR)","|","|=","OU inclusif au niveau du bit. (Bitwise OR)","&lt;&lt;","&lt;&lt;=","Dcalage logique vers la gauche. Le bit entrant est  zro (pour l&amp;#39;lvation par puissances de deux).","&gt;&gt;","&gt;&gt;=","Dcalage logique vers la droite. Le bit entrant est gal au bit de signe (pour la propagation du bit de signe).","Tableau 5: Les oprateurs logiques","@écho de\nensemble /a &quot;Val1=-2147483647 - 1&quot;\nensemble /a &quot;Val2=1&quot;\nensemble /a &quot;Val1SwitchL01=Val1&lt;&lt;1&quot;,&quot;Val1SwitchL15=Val1&lt;&lt;15&quot;,&quot;Val1SwitchL31=Val1&lt;&lt;31&quot;\nensemble /a &quot;Val2SwitchL01=Val2&lt;&lt;1&quot;,&quot;Val2SwitchL15=Val2&lt;&lt;15&quot;,&quot;Val2SwitchL31=Val2&lt;&lt;31&quot;\nensemble /a &quot;Val1SwitchR01=Val1&gt;&gt;1&quot;,&quot;Val1SwitchR15=Val1&gt;&gt;15&quot;,&quot;Val1SwitchR31=Val1&gt;&gt;31&quot;\nensemble /a &quot;Val2SwitchR01=Val2&gt;&gt;1&quot;,&quot;Val2SwitchR15=Val2&gt;&gt;15&quot;,&quot;Val2SwitchR31=Val2&gt;&gt;31&quot;\nensemble /a &quot;Val1AttribSwitchR=Val1&quot;,&quot;Val1AttribSwitchR&gt;&gt;=15&quot;\nensemble /a &quot;Val2AttribSwitchL=Val2&quot;,&quot;Val2AttribSwitchL&lt;&lt;=15&quot;\nécho %Val1% ^&lt;^&lt; 1: %Val1SwitchL01%\nécho %Val1% ^&lt;^&lt; 15: %Val1SwitchL15%\nécho %Val1% ^&lt;^&lt; 31: %Val1SwitchL31%\necho.\nécho %Val2% ^&lt;^&lt; 1: %Val2SwitchL01%\nécho %Val2% ^&lt;^&lt; 15: %Val2SwitchL15%\nécho %Val2% ^&lt;^&lt; 31: %Val2SwitchL31%\necho.\nécho %Val1% ^&gt;^&gt; 1: %Val1SwitchR01%\nécho %Val1% ^&gt;^&gt; 15: %Val1SwitchR15%\nécho %Val1% ^&gt;^&gt; 31: %Val1SwitchR31%\necho.\nécho %Val2% ^&gt;^&gt; 1: %Val2SwitchR01%\nécho %Val2% ^&gt;^&gt; 15: %Val2SwitchR15%\nécho %Val2% ^&gt;^&gt; 31: %Val2SwitchR31%\necho.\nécho %Val1% ^&gt;^&gt;= 15: %Val1AttribSwitchR%\nécho %Val2% ^&lt;^&lt;= 15: %Val2AttribSwitchL%\necho.\nensemble /a &quot;Val3=1431655765&quot;\nensemble /a &quot;Val4=-858993460&quot;\nensemble /a &quot;Val3LogicalOrVal4=Val3 | Val4&quot;\nensemble /a &quot;Val3LogicalXorVal4=Val3 ^ Val4&quot;\nensemble /a &quot;Val3LogicalAndVal4=Val3 Et Val4&quot;\nensemble /a &quot;Val3AttribOrVal4=Val3&quot;,&quot;Val3AttribOrVal4|=Val4&quot;\nensemble /a &quot;Val3AttribXorVal4=Val3&quot;,&quot;Val3AttribXorVal4^=Val4&quot;\nensemble /a &quot;Val3AttribAndVal4=Val3&quot;,&quot;Val3AttribAndVal4Et=Val4&quot;\nécho %Val3% ^| %Val4%: %Val3LogicalOrVal4%\nécho %Val3% ^|= %Val4%: %Val3AttribOrVal4%\necho.\nécho %Val3% ^^ %Val4%: %Val3LogicalXorVal4%\nécho %Val3% ^^= %Val4%: %Val3AttribXorVal4%\necho.\nécho %Val3% ^Et %Val4%: %Val3LogicalAndVal4%\nécho %Val3% ^Et= %Val4%: %Val3AttribAndVal4%\necho.\npause","II-D-3. Les oprateurs unaires▲","N.B.: Dans les sections II.D.3, II.ELes nombres entiers signs en notation hexadcimale et II.FLes nombres entiers signs en notation octale de ce document, sont abords diffrents concepts de reprsentation numrique communment utiliss en informatique, tels que:","l&amp;#39;criture de nombre en binaire;\nl&amp;#39;criture de nombre en hexadcimal;\nl&amp;#39;criture de nombre en octal;\nla reprsentation des nombres en complment  un;\nla reprsentation des nombres entiers signs en complment  deux.","Il est donc ncessaire, si vous ne les connaissez pas, de faire des recherches sur Wikipdia.\nLes oprateurs unaires ne s&amp;#39;appliquent qu&amp;#39;aux nombres qu&amp;#39;ils prcdent, ils ne possdent donc pas d&amp;#39;oprateur d&amp;#39;attribution. Leur syntaxe est la suivante (o     est l&amp;#39;oprateur unaire et     est le nombre auquel il s&amp;#39;applique).\n&lt;unaire&gt;&lt;nombre&gt;","Oprateur unaire","La description","!","NON logique, renvoie 1 si le nombre est gal  0 et 0 sinon. (Logical NOT).","~","NON au niveau du bit, complment  un. (Bitwise NOT)","&#8211;","Renvoie la valeur inverse, soit un nombre ngatif si le nombre d&amp;#39;origine est positif, complment  deux. (NEG)","Tableau 6: Les oprateurs unaires \nExemple avec le script 24.","1.234567.89dix.111213141516171819202122232425262728293031.323334\n@écho de","ensemble /a &quot;Val1=2147483647&quot;\nensemble /a &quot;Val2=1&quot;\nensemble /a &quot;Val3=0&quot;","ensemble /a &quot;LogicalNOT_Val1=!Val1&quot;\nensemble /a &quot;LogicalNOT_Val2=!Val2&quot;\nensemble /a &quot;LogicalNOT_Val3=!Val3&quot;","ensemble /a &quot;BitwiseNOT_Val1=~Val1&quot;\nensemble /a &quot;BitwiseNOT_Val2=~Val2&quot;\nensemble /a &quot;BitwiseNOT_Val3=~Val3&quot;","ensemble /a &quot;NEG_Val1=-Val1&quot;\nensemble /a &quot;NEG_Val2=-Val2&quot;\nensemble /a &quot;NEG_Val3=-Val3&quot;","écho              ╔════════════════════════════════════════╗\nécho              ║                 Nombre                 ║\nécho ╔════════════╬═════════════╦═════════════╦════════════╣\nécho ║ Oprateur  ║ %Val1%  ║      %Val2%      ║     %Val3%      ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ LogicalNOT ║ %LogicalNOT_Val1%           ║ %LogicalNOT_Val2%           ║ %LogicalNOT_Val3%          ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ BitwiseNOT ║ %BitwiseNOT_Val1% ║ %BitwiseNOT_Val2%          ║ %BitwiseNOT_Val3%         ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ NEG        ║ %NEG_Val1% ║ %NEG_Val2%          ║ %NEG_Val3%          ║\nécho ╚════════════╩═════════════╩═════════════╩════════════╝","echo.\npause","II-E. Les nombres entiers signs en notation hexadcimale▲","Les nombres en notation hexadcimale doivent tre dclars comme des nombres entiers en notation dcimale (ce que nous avons utilis jusqu&amp;#39; maintenant) avec la commande set /a &quot;&quot; et toujours tre prfixs par 0x (chiffre zro suivi de la lettre x). The command set /a a pour effet de transformer toutes les valeurs entres en valeurs numriques. Si c&amp;#39;est une chane de caractres alors la commande cherchera une variable portant ce nom, si c&amp;#39;est un nombre hexadcimal alors la commande set /a codera le nombre tel quel en binaire. Cependant, mme si un nombre est fourni en notation hexadcimale, l&amp;#39;interprteur l&amp;#39;expanse toujours en notation dcimale, exemple avec le script 25.","1.2345\n@écho de","ensemble /a &quot;Hexa=0x1 + 0x3&quot;\nécho Rsultat:    %Hexa%\npause","Le rsultat du script 25 nous montre que le calcul s&amp;#39;effectue correctement, de mme avec le script 26.","1.23456\n@écho de","ensemble /a &quot;Hexa=0x5 + 0x8&quot;","écho Rsultat:    %Hexa%\npause","Jusque-l tout va bien mme si le rsultat n&amp;#39;est pas en notation hexadcimale, il est quand mme celui attendu. Le problme c&amp;#39;est que l&amp;#39;interprteur de commande utilise toujours la reprsentation en complment  deux pour coder un nombre entier sign. Ainsi, ds lors que l&amp;#39;on utilise un nombre en notation hexadcimale suprieur  0x7FFFFFFF (soit 2147483647 en notation dcimale), ce nombre est en fait un nombre ngatif comme le montre le script 27.","1.234\n@écho de\nensemble /a &quot;Hexa=0x80000000&quot;\nécho Rsultat:    %Hexa%\npause","Un rsultat plutt droutant pour quiconque ne s&amp;#39;y attend pas, en effet la reprsentation en complment  deux code les nombres ngatifs de 0xFFFFFFFF, soit -1,  0x80000000, soit -2147483648. Exemple avec le script 28.","1.23456\n@écho de","ensemble /a &quot;Hexa=0x80000000 + 0x7FFFFFFF&quot;","écho Rsultat:    %Hexa%\npause","Comme vous pouvez le voir, on additionne 0x80000000 (soit -2147483648 en reprsentation hexadcimale en complment  deux)  0x7FFFFFFF (soit +2147483647, toujours dans la mme reprsentation) ce qui nous donne le rsultat de -1, le rsultat est un nombre entier sign dcimal utilisant la reprsentation en complment  deux cod sur 32bits soit 0xFFFFFFFF. Pour rcuprer un nombre hexadcimal, il faut le calculer  l&amp;#39;aide d&amp;#39;un algorithme de divisions successives; et pour les nombres ngatifs, de l&amp;#39;oprateur unaire Bitwise NOT dont dispose la commande set /a, voir le script 29.","1.234567.89dix.111213141516171819202122232425262728293031.323334353637383940414243444546\n@écho de","ensemble &quot;SInt32=-2147483648&quot;","ensemble /a &quot;SInt32&quot;","ensemble /a &quot;SInt32=~SInt32&quot;","ensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;","ensemble /a &quot;Nibble0=15 - Nibble0&quot;\nensemble /a &quot;Nibble1=15 - Nibble1&quot;\nensemble /a &quot;Nibble2=15 - Nibble2&quot;\nensemble /a &quot;Nibble3=15 - Nibble3&quot;\nensemble /a &quot;Nibble4=15 - Nibble4&quot;\nensemble /a &quot;Nibble5=15 - Nibble5&quot;\nensemble /a &quot;Nibble6=15 - Nibble6&quot;\nensemble /a &quot;Nibble7=15 - Nibble7&quot;","ensemble &quot;LSW=%Nibble3% %Nibble2% %Nibble1% %Nibble0%&quot;","ensemble &quot;MSW=%Nibble7% %Nibble6% %Nibble5% %Nibble4%&quot;\nécho %MSW% %LSW%","ensemble &quot;SInt32=2147483647&quot;\nensemble /a &quot;SInt32&quot;\nensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;\nensemble &quot;LSW=%Nibble3% %Nibble2% %Nibble1% %Nibble0%&quot;\nensemble &quot;MSW=%Nibble7% %Nibble6% %Nibble5% %Nibble4%&quot;\nécho %MSW% %LSW%\npause","La sortie du script 29 nous donne bien des nombres hexadcimaux, mais dans une reprsentation dcimale (80000000 soit -2147483648 cod 0x80000000 et 715151515151515 soit 2147483647 cod 0x7FFFFFFF), pour pouvoir les convertir dans une notation hexadcimale; il nous faut utiliser les conditions que nous tudierons au prochain chapitre.","II-F. Les nombres entiers signs en notation octale▲","Les nombres en notation octale fonctionnent comme les autres et supportent les mmes oprations. Pour tre considrs par l&amp;#39;interprteur comme des nombres en notation octale, ils doivent tre prfixs par 0 (chiffre zro). Ils vont donc de -2147483648  2147483647 (cods sur 32bits) soit en notation octale -020000000000  +017777777777. Les nombres en notation octale sont cods tels quels en binaire, mais le principe selon lequel tout nombre est expans en entier sign en notation dcimale cod en complment  deux s&amp;#39;applique aussi pour eux. Notez aussi qu&amp;#39;ils ont le mme problme de transtypage que les nombres dcimaux, exemple avec le script 30.","@écho de\nensemble /a &quot;Octal1=-017777777777 - 1&quot;\nensemble /a &quot;Octal2=017777777777&quot;\nensemble /a &quot;Octal3=Octal1 + Octal2&quot;\nécho Octal1: %Octal1%\nécho Octal2: %Octal2%\nécho Octal3: %Octal3%\npause","Notez aussi que l&amp;#39;utilisation des nombres 08 et 09 gnre toujours une erreur du fait qu&amp;#39;ils sont prfixs par 0; et, que 8 et 9 ne sont pas des chiffres octaux. Lorsque la commande set /a rencontre un 0 en dbut de nombre, elle considre que tous les chiffres qui se trouvent aprs sont des octaux et lorsqu&amp;#39;elle rencontre 8 ou 9, le transtypage ne peut s&amp;#39;effectuer et la commande se termine sur une erreur. Exemple avec le script 31.","@écho de\nécho Nombre 08:\nensemble /a &quot;Octal1=08&quot;\necho.\nécho Nombre 09:\nensemble /a &quot;Octal1=09&quot;\necho.\npause","Les conditions sont supportes par la commande si. Elle permet d&amp;#39;effectuer des comparaisons de toutes sortes et d&amp;#39;excuter des commandes en fonction du rsultat de cette comparaison. autre et sinon si sont, quant  eux, des paramtres de la commande si et ne peuvent tre utiliss qu&amp;#39; l&amp;#39;intrieur de la commande si.\nIII-A. If, else, else if, not et /i▲","The command si se traduit simplement par si: si la condition est vraie, fais ceci; elle peut tre accompagne par le paramtre autre qui se traduit par sinon: si la condition est vraie, fais ceci, sinon fais cela. La syntaxe de la commande si est la suivante.\nsi &lt;chattedition&gt; &lt;commande1&gt; [[[[autre &lt;commande2&gt;]  \nComme vous pouvez le voir sur la syntaxe de la commande si, si vient en premier suivi de sa     et d&amp;#39;une commande (), puis vient autre et une commande (), on peut le traduire par:","si (si) la     se vrifie alors la     s&amp;#39;excute;\nsinon (autre) c&amp;#39;est la     qui s&amp;#39;excute.","Le paramtre autre ne peut tre utilis seul, il doit toujours tre utilis avec la commande si, et tre sur la mme ligne. Il y a deux rgles importantes  garder en tte lorsqu&amp;#39;on utilise des conditions:","la premire est que l&amp;#39;on ne peut utiliser qu&amp;#39;un maximum de 2048 caractres (sous Windows XP et infrieur) ou un peu plus de 4096 caractres (sous Windows Vista et suprieur) par ligne de commande, limite trs vite atteinte avec plusieurs conditions, plus leurs commandes et leurs paramtres;\net la deuxime est que les parenthses sont prises en compte par l&amp;#39;interprteur de commande comme des oprateurs de bloc, c&amp;#39;est pour cela qu&amp;#39;il faut les chapper lorsque l&amp;#39;on ne s&amp;#39;en sert pas  cette fin.","Les oprateurs de bloc permettent d&amp;#39;utiliser un bloc de commande en lieu et place d&amp;#39;une commande. Ainsi, chaque fois que la syntaxe autorise l&amp;#39;utilisation d&amp;#39;une commande, celle-ci peut tre remplace par un bloc de commandes.\nAinsi la syntaxe de la commande si peut tre modifie de la manire suivante.","Syntaxe des conditions if et else avec parenthses\nSélectionnez","si &lt;chattedition&gt; (\n    &lt;commande1&gt;\n    &lt;commande2&gt;\n) autre (\n    &lt;commande3&gt;\n    &lt;commande4&gt;\n)","L&amp;#39;utilisation des parenthses comme oprateurs de bloc permet d&amp;#39;excuter plusieurs commandes, par condition vrifie, au lieu d&amp;#39;une seule. La parenthse ouvrante associe  une condition doit se trouver sur la mme ligne que cette dernire; si une autre condition est utilise conjointement, alors elle doit se trouver sur la mme ligne que la parenthse fermante associe  la condition qui la prcde.\nThe command si autorise aussi le paramtre sinon si qui se traduit par sinon si, ce dernier permet de poser une condition supplmentaire avant l&amp;#39;excution ventuelle du autre. La syntaxe serait la suivante.\nsi &lt;chattedition1&gt; &lt;cmd1&gt; [[[[autre si &lt;chattedition2&gt; &lt;cmd2&gt;][[[[autre &lt;cmd3&gt;]  \nLes oprateurs de bloc fonctionnent de la mme manire avec le paramtre sinon si en plus. Il faut aussi noter que le paramtre sinon si peut tre utilis autant de fois que l&amp;#39;on veut dans la commande si.","Syntaxe des conditions if, else if et else\nSélectionnez","si &lt;chattedition1&gt; (\n    &lt;commande1&gt;\n    &lt;commande2&gt;\n) autre si &lt;chattedition2&gt; (\n    &lt;commande3&gt;\n    &lt;commande4&gt;\n) autre si &lt;chattedition3&gt; (\n    &lt;commande5&gt;\n    &lt;commande6&gt;\n) autre (\n    &lt;commande7&gt;\n    &lt;commande8&gt;\n)","La syntaxe ci-dessus pourrait tre traduite par:","si (si) la     est vraie: excuter     et ;\nsinon si (sinon si)     est vraie: excuter     et ;\nsinon si (sinon si)     est vraie: excuter     et ;\nsinon (autre): excuter     et .","Les conditions associes  la commande si et au paramtre sinon si prennent le modificateur ne pas qui permet d&amp;#39;excuter une commande si la condition est fausse. Le modificateur ne pas ne s&amp;#39;applique pas  toutes les conditions de la mme structure de contrle. Si le paramtre sinon si est utilis conjointement, son comportement dpendra de la prsence, ou non, du modificateur ne pas  l&amp;#39;intrieur de la condition.\nsi ne pas &lt;chattedition1&gt; &lt;cmd1&gt; autre si &lt;chattedition2&gt; &lt;cmd2&gt; autre &lt;cmd3&gt;  \nLa commande ci-dessus se traduit par:","si (si) la     est fausse: excuter la ;\nsinon (sinon si), si la     est vraie: excuter la ;\nsinon (autre), si la     est vraie et que la     est fausse, excuter la .","Les conditions associes  la commande si et au paramtre sinon si prennent le modificateur /i qui permet de ne pas tenir compte de la casse lorsque la condition traite des chanes de caractres. Ce modificateur ne fonctionne que sur les conditions qui traitent des chanes de caractres. Si le paramtre sinon si est utilis conjointement, son comportement dpendra de la prsence, ou non, du modificateur /i  l&amp;#39;intrieur de la condition.\nsi /i &lt;chattedition1&gt; &lt;cmd1&gt; autre si /i &lt;chattedition2&gt; &lt;cmd2&gt; autre &lt;cmd3&gt;  \nSe traduit par:","si (si) la     est vraie, sans tenir compte de la casse, excuter la ;\nsinon si (sinon si) la     est vraie, sans tenir compte de la casse, excuter la ;\nsinon (autre), si la     est fausse sans tenir compte de la casse et que la     est fausse sans tenir compte de la casse, excuter la .","Nous allons maintenant voir quelles sont les conditions supportes par la commande si et le paramtre sinon si.","III-B. La condition exist ▲","La condition exister     permet de tester si un chemin d&amp;#39;accs ou un fichier existe. Elle peut tre utilise avec le paramtre sinon si et le modificateur ne pas. Le modificateur /i ne fonctionne pas sur cette condition. Sa syntaxe est la suivante, o     est le chemin d&amp;#39;accs ou le fichier  tester. Si le chemin d&amp;#39;accs contient des espaces, il doit tre plac entre guillemets.\nsi [[[[ne pas] exister [« ]&lt;chemin&gt;[« ] &lt;ordre&gt;  \nExemple avec le script 32.","1.23\n@écho de\nsi exister &quot;%cd%&quot; écho %cd% existe bien.\npause","III-C. La condition defined ▲","La condition défini     permet de tester si une variable a une valeur dfinie. Elle peut tre utilise avec le paramtre sinon si, et le modificateur ne pas. Le modificateur /i ne fonctionne pas sur cette condition. Voir le script 33.\nsi [[[[ne pas] défini &lt;variable&gt; &lt;ordre&gt;","1.234567.89dix.111213141516171819\n@écho de\nensemble &quot;Def1=&quot;\nensemble &quot;Def2=abcd&quot;\nsi défini Def1 (\n    écho Def1 est dfinie.\n) autre (\n    écho Def1 n&amp;#39;est pas dfinie.\n)\nsi défini Def2 (\n    écho Def2 est dfinie.\n) autre (\n    écho Def2 n&amp;#39;est pas dfinie.\n)\nsi ne pas défini Def3 (\n    écho Def3 n&amp;#39;est pas dfinie.\n) autre (\n    écho Def3 est dfinie.\n)\npause","III-D. La condition errorlevel ▲","La condition errorlevel     permet de tester si le code d&amp;#39;erreur de la dernire commande excute est gal ou suprieur au nombre donn en . Le code d&amp;#39;erreur est un nombre renvoy par une commande pour donner des informations sur le droulement de son excution, il est aussi accessible via la variable ErrorLevel. En gnral, le code d&amp;#39;erreur est 0 si aucune erreur ne s&amp;#39;est produite; et il est gal ou suprieur  1 si une erreur s&amp;#39;est produite, chaque code d&amp;#39;erreur correspondant  une erreur prcise. Le nom de variable ErrorLevel est un nom de variable rserv, vous pouvez la modifier en l&amp;#39;crasant avec une nouvelle valeur, cependant, elle prendra la valeur donne jusqu&amp;#39; la fin du script. Attention toutefois, il arrive que des commandes ne modifient pas la variable ErrorLevel ou bien qu&amp;#39;elle lui donne toujours le code 0, ceci est souvent d  de mauvaises pratiques de programmation, fiez-vous  des codes d&amp;#39;erreurs connues et ayant une valeur concrte, ne traitez pas les autres, pour ce faire, consultez le manuel ou l&amp;#39;aide de la commande concerne. Si le modificateur ne pas est utilis, la     seras excute seulement si ErrorLevel est infrieur  l&amp;#39;. Le modificateur /i n&amp;#39;est pas support par la condition errorlevel .\nsi [[[[ne pas] errorlevel &lt;oprande&gt; &lt;ordre&gt;","1.234567.89dix.1112\n@écho de","setlocal\nensemble &quot;TestError1=Un petit test&quot;\nsi ne pas errorlevel 1 écho Aucune erreur dans la premire commande.\necho.\nensemble /a &quot;TestError2=09&quot;\necho.\nsi errorlevel 1 écho Le code d&amp;#39;erreur des nombres invalides est %ErrorLevel%.\npause","endlocal","III-E. La condition cmdextversion ▲","La condition cmdextversion     permet de tester si le numro de version des extensions de commande est gal ou suprieur au nombre donn en . Le numro de version des extensions de commande est  prendre en compte, car selon la version des extensions, le traitement des commandes peut tre modifi. Reportez-vous  l&amp;#39;aide concernant les commandes cites dans le tableau 7 pour plus de dtails. Chaque commande modifie l&amp;#39;est d&amp;#39;une manire qui lui est propre; ainsi la commande assoc ne sera pas modifie de la mme manire que la commande début, tout simplement parce qu&amp;#39;elle n&amp;#39;excute pas du tout la mme opration.","DEL ou ERASE","COLOR","CD ou CHDIR","MD ou MKDIR","PROMPT","PUSHD","POPD","ENSEMBLE","SETLOCAL","ENDLOCAL","IF","POUR","CALL","SHIFT","GOTO","START","ASSOC","FTYPE","Tableau 7: Commandes soumises aux extensions \nLa condition cmdextversion     est toujours fausse si les extensions de commande sont dsactives; la premire version des extensions est la version 1 et le numro de version est incrment de 1  chaque nouvelle version. Si le numro de version des extensions est gal ou suprieur  la valeur donne dans la condition cmdextversion     alors la condition est vraie; les extensions de commande tant rtrocompatibles d&amp;#39;une version  l&amp;#39;autre. Si le modificateur ne pas est utilis, la condition est vraie si le numro de version des extensions de commande est infrieur au nombre donn en . La condition cmdextversion     ne prend pas le modificateur /i. Le tableau 8 donne la liste des rvisions d&amp;#39;extensions de commande en fonction du systme d&amp;#39;exploitation.","Numro de version","Compatibilit","1","Windows 2000.","2","Tous les systmes NT XP et suprieur.","Tableau 8: Rvisions des extensions de commande \nsi [[[[ne pas] cmdextversion &lt;oprande&gt; &lt;ordre&gt;","1.234567.89dix.111213141516171819\n@écho de","setlocal enableextensions\nsi ne pas cmdextversion 1 (\n    écho CmdExtVersion 1:  ne pas Detected.\n) autre (\n    écho CmdExtVersion 1:  Detected. \n)\nsi cmdextversion 2 (\n    écho CmdExtVersion 2:  Detected.\n) autre (\n    écho CmdExtVersion 2:  ne pas Detected. \n)\nsi cmdextversion 3 (\n    écho CmdExtVersion 3:  Detected.\n) autre (\n    écho CmdExtVersion 3:  ne pas Detected. \n)\npause","III-F. La condition   ▲","La condition       permet d&amp;#39;effectuer des comparaisons sur des chanes et des nombres. La comparaison de chanes est effectue au moyen d&amp;#39;un XOR au niveau du bit entre chaque octet d&amp;#39;une chane puis les rsultats obtenus sur les diffrentes chanes sont compars numriquement. Si les deux chanes ne sont constitues que de chiffres alors elles sont transtypes en nombre puis values numriquement. Les comparateurs, pris en compte par la condition   , sont lists dans le tableau 9. La condition       prend les modificateurs ne pas et /i. Sa syntaxe est la suivante, si les chanes contiennent des espaces, elles doivent tre places entre guillemets.\nsi [/i]    [[[[ne pas] [« ]&lt;chane1&gt;[« ] &lt;comparateur&gt; [« ]&lt;chane2&gt;[« ] &lt;cmd&gt;","Comparateur","La description","EQU","EQUal, la condition est vraie si les deux chanes sont gales.","NEQ","Not EQual, la condition est vraie si les deux chanes sont diffrentes.","LSS","LeSS, la condition est vraie si chane1 est infrieure  chane2.","LEQ","Less or EQual, la condition est vraie si chane1 est infrieure ou gale  chane2.","GTR","GreaTeR, la condition est vraie si chane1 est suprieure  chane2.","GEQ","Greater or EQual, la condition est vraie si chane1 est suprieure ou gale  chane2.","Tableau 9: Oprateurs de comparaison","1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.\n@écho de\ncls\nensemble &quot;Chane1=Un Petit test&quot;","ensemble /a &quot;C1X=0x55^0x6E^0x20^0x50^0x65^0x74^0x69^0x74^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane2=Un petit test&quot;","ensemble /a &quot;C2X=0x55^0x6E^0x20^0x70^0x65^0x74^0x69^0x74^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane3=Un grand test&quot;","ensemble /a &quot;C3X=0x55^0x6E^0x20^0x67^0x72^0x62^0x6E^0x64^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane4=41&quot;\nensemble &quot;Chane5=12&quot;\nécho               Chane 1         Chane 2          Chane 3\nécho =============================================================\nécho Chane        %Chane1%    %Chane2%    %Chane3%\nécho évaluation    %C1X%              %C2X%               %C3X%\necho.\nsi &quot;%Chane1%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane1%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane1%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi /i &quot;%Chane1%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane1%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane1%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi &quot;%Chane1%&quot; GTR &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane3%&quot;.\n) autre si &quot;%Chane1%&quot; EQU &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane3%&quot;.\n) autre si &quot;%Chane1%&quot; LSS &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane3%&quot;.\n)\nsi /i &quot;%Chane1%&quot; GTR &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane3%&quot;.\n) autre si /i &quot;%Chane1%&quot; EQU &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane3%&quot;.\n) autre si /i &quot;%Chane1%&quot; LSS &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane3%&quot;.\n)\nsi &quot;%Chane3%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane3%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane3%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi /i &quot;%Chane3%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane3%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane3%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\necho.\necho.\nécho               Chane 4    Chane 5         \nécho =============================================================\nécho Chane        %Chane4%          %Chane5%\necho.\nsi %Chane4% GTR %Chane5% (\n    écho %Chane4% est suprieur  %Chane5%.\n) autre si %Chane4% EQU %Chane5% (\n    écho %Chane4% est gal  %Chane5%.\n) autre si %Chane4% LSS %Chane5% (\n    écho %Chane4% est infrieur  %Chane5%.\n)\necho.\npause","III-G. La condition &quot;&quot;==&quot;&quot;▲","La condition &quot;&quot;==&quot;&quot; permet de tester une galit entre des chanes de caractres. Les chanes doivent tre places entre guillemets si elles sont susceptibles de contenir des espaces. Cette condition prend les modificateurs ne pas et /i.","1.234567.89dix.11121314151617181920\n@écho de\ncls\nensemble &quot;Un=Une Chane&quot;\nensemble &quot;Deux=une chane&quot;\nsi &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If:      &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n) autre (\n    écho If:      &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n)\nsi ne pas &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If ne pas:  &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n) autre (\n    écho If ne pas:  &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n)\nsi /i &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If /i:   &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n) autre (\n    écho If /i:   &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n)\npause","III-H. Mise en application de la commande if▲","Dans cette section, nous allons reprendre le script 29 qui permettait de transformer un entier en sa reprsentation hexadcimale en notation en complment  deux. Grce  la commande si, nous allons faire en sorte de traiter les nombres ngatifs et positifs avec la mme fonction de calcul et d&amp;#39;afficher le rsultat dans une forme hexadcimale correcte.","1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99100101.102.103.104105106.107.108.109.110.111.112.113.114.\n@écho de","setlocal","ensemble /p &quot;SInt32=Entrez un nombre entre -2147483648 et 2147483647:    &quot;","ensemble /a &quot;SInt32&quot;","ensemble &quot;NegNum=false&quot;","si %SInt32% LSS 0 (\n    ensemble /a &quot;SInt32=~SInt32&quot;\n    ensemble &quot;NegNum=true&quot;\n)","ensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;","si &quot;%NegNum%&quot;==&quot;true&quot; (\n    ensemble /a &quot;Nibble0=15 - Nibble0&quot;\n    ensemble /a &quot;Nibble1=15 - Nibble1&quot;\n    ensemble /a &quot;Nibble2=15 - Nibble2&quot;\n    ensemble /a &quot;Nibble3=15 - Nibble3&quot;\n    ensemble /a &quot;Nibble4=15 - Nibble4&quot;\n    ensemble /a &quot;Nibble5=15 - Nibble5&quot;\n    ensemble /a &quot;Nibble6=15 - Nibble6&quot;\n    ensemble /a &quot;Nibble7=15 - Nibble7&quot;\n)","si %Nibble0% GTR 9 (\n    si %Nibble0% EQU dix ensemble &quot;Nibble0=A&quot;\n    si %Nibble0% EQU 11 ensemble &quot;Nibble0=B&quot;\n    si %Nibble0% EQU 12 ensemble &quot;Nibble0=C&quot;\n    si %Nibble0% EQU 13 ensemble &quot;Nibble0=D&quot;\n    si %Nibble0% EQU 14 ensemble &quot;Nibble0=E&quot;\n    si %Nibble0% EQU 15 ensemble &quot;Nibble0=F&quot;\n)\nsi %Nibble1% GTR 9 (\n    si %Nibble1% EQU dix ensemble &quot;Nibble1=A&quot;\n    si %Nibble1% EQU 11 ensemble &quot;Nibble1=B&quot;\n    si %Nibble1% EQU 12 ensemble &quot;Nibble1=C&quot;\n    si %Nibble1% EQU 13 ensemble &quot;Nibble1=D&quot;\n    si %Nibble1% EQU 14 ensemble &quot;Nibble1=E&quot;\n    si %Nibble1% EQU 15 ensemble &quot;Nibble1=F&quot;\n)\nsi %Nibble2% GTR 9 (\n    si %Nibble2% EQU dix ensemble &quot;Nibble2=A&quot;\n    si %Nibble2% EQU 11 ensemble &quot;Nibble2=B&quot;\n    si %Nibble2% EQU 12 ensemble &quot;Nibble2=C&quot;\n    si %Nibble2% EQU 13 ensemble &quot;Nibble2=D&quot;\n    si %Nibble2% EQU 14 ensemble &quot;Nibble2=E&quot;\n    si %Nibble2% EQU 15 ensemble &quot;Nibble2=F&quot;\n)\nsi %Nibble3% GTR 9 (\n    si %Nibble3% EQU dix ensemble &quot;Nibble3=A&quot;\n    si %Nibble3% EQU 11 ensemble &quot;Nibble3=B&quot;\n    si %Nibble3% EQU 12 ensemble &quot;Nibble3=C&quot;\n    si %Nibble3% EQU 13 ensemble &quot;Nibble3=D&quot;\n    si %Nibble3% EQU 14 ensemble &quot;Nibble3=E&quot;\n    si %Nibble3% EQU 15 ensemble &quot;Nibble3=F&quot;\n)\nsi %Nibble4% GTR 9 (\n    si %Nibble4% EQU dix ensemble &quot;Nibble4=A&quot;\n    si %Nibble4% EQU 11 ensemble &quot;Nibble4=B&quot;\n    si %Nibble4% EQU 12 ensemble &quot;Nibble4=C&quot;\n    si %Nibble4% EQU 13 ensemble &quot;Nibble4=D&quot;\n    si %Nibble4% EQU 14 ensemble &quot;Nibble4=E&quot;\n    si %Nibble4% EQU 15 ensemble &quot;Nibble4=F&quot;\n)\nsi %Nibble5% GTR 9 (\n    si %Nibble5% EQU dix ensemble &quot;Nibble5=A&quot;\n    si %Nibble5% EQU 11 ensemble &quot;Nibble5=B&quot;\n    si %Nibble5% EQU 12 ensemble &quot;Nibble5=C&quot;\n    si %Nibble5% EQU 13 ensemble &quot;Nibble5=D&quot;\n    si %Nibble5% EQU 14 ensemble &quot;Nibble5=E&quot;\n    si %Nibble5% EQU 15 ensemble &quot;Nibble5=F&quot;\n)\nsi %Nibble6% GTR 9 (\n    si %Nibble6% EQU dix ensemble &quot;Nibble6=A&quot;\n    si %Nibble6% EQU 11 ensemble &quot;Nibble6=B&quot;\n    si %Nibble6% EQU 12 ensemble &quot;Nibble6=C&quot;\n    si %Nibble6% EQU 13 ensemble &quot;Nibble6=D&quot;\n    si %Nibble6% EQU 14 ensemble &quot;Nibble6=E&quot;\n    si %Nibble6% EQU 15 ensemble &quot;Nibble6=F&quot;\n)\nsi %Nibble7% GTR 9 (\n    si %Nibble7% EQU dix ensemble &quot;Nibble7=A&quot;\n    si %Nibble7% EQU 11 ensemble &quot;Nibble7=B&quot;\n    si %Nibble7% EQU 12 ensemble &quot;Nibble7=C&quot;\n    si %Nibble7% EQU 13 ensemble &quot;Nibble7=D&quot;\n    si %Nibble7% EQU 14 ensemble &quot;Nibble7=E&quot;\n    si %Nibble7% EQU 15 ensemble &quot;Nibble7=F&quot;\n)","ensemble &quot;LSW=%Nibble3%%Nibble2%%Nibble1%%Nibble0%&quot;","ensemble &quot;MSW=%Nibble7%%Nibble6%%Nibble5%%Nibble4%&quot;","écho 0x%MSW%%LSW%","endlocal\npause","Ce script sera un script tmoin que nous ferons voluer tout au long de ce document, il nous permettra de comparer les diffrentes approches et ce qu&amp;#39;elles impliquent comme contrainte d&amp;#39;utilisation.\nEn son tat actuel, ce script est gourmand en ressource systme, car  chaque ligne de commande correspond un appel vers l&amp;#39;interprteur augmentant d&amp;#39;autant son temps de traitement. Les boucles pour devraient nous permettre de rduire considrablement son cot en temps d&amp;#39;excution et la taille du script par la mme occasion.","Un script batch s&amp;#39;excute toujours de manire linaire, du dbut vers la fin, et  moins que l&amp;#39;on ne redirige son excution, ce comportement reste inchang. Il existe plusieurs possibilits pour rediriger l&amp;#39;excution d&amp;#39;un script telles que: les labels, les sauts, les appels de fonction et les sorties.\nIV-A. Les labels▲","Les labels sont des adresses relatives se prsentant sous forme de chanes de caractres prfixes par : et termines par un caractre blanc (l&amp;#39;espace, la tabulation ou le retour  la ligne). Ces adresses relatives pointent vers le premier caractre situ aprs le retour  la ligne qui termine le label. Elles peuvent tre utilises pour adresser une portion de code. Chaque nom de label devrait tre unique dans le script. La syntaxe d&amp;#39;un label est la suivante, o  est le nom du label:\n:&lt;Étiquette&gt;","IV-B. Les sauts▲","The command goto effectue un saut inconditionnel vers le label spcifi en paramtre, permettant ainsi de continuer l&amp;#39;excution du programme dans une portion de code situe n&amp;#39;importe o dans le script. Une fois le saut effectu, l&amp;#39;excution continue  la ligne qui suit le label spcifi:\ngoto [[[[:]&lt;Étiquette&gt;","1.234567.8\n@écho de","goto :MonLabel\nécho Une phrase qui ne sera jamais affiche.",":MonLabel\nécho Une phrase qui sera affiche.\npause","Dans le script 39, la commande echo Une phrase qui ne sera jamais affiche. n&amp;#39;est pas traite, l&amp;#39;excution tant redirige par la commande goto:MonLabel vers la ligne suivant le label :MonLabel soit la commande echo Une phrase qui sera affiche.","IV-C. Contexte de commande▲","L&amp;#39;excution de l&amp;#39;interprteur ou d&amp;#39;un script s&amp;#39;effectue dans un processus hte auquel le systme d&amp;#39;exploitation alloue un espace mmoire. Cet espace mmoire est appel la pile. Une pile est une zone de mmoire dans laquelle les donnes sont places les unes  la suite des autres. Les donnes qui y sont places doivent tre rcupres dans un ordre particulier: la dernire donne place doit tre la premire  tre rcupre. Sur cette pile, le systme y place ce que l&amp;#39;on appelle un contexte.\nLors de sa cration, le contexte se voit attribuer, par le systme, une srie de variables: les variables d&amp;#39;environnement du systme, des variables contenant la commande et les paramtres de la commande ayant gnr le contexte et une adresse de sortie du contexte. Ainsi cr, le contexte reprsente l&amp;#39;environnement dans lequel le script va s&amp;#39;excuter en lui permettant de disposer de donnes qui lui sont propres.  chaque nouvelle excution d&amp;#39;un script ou d&amp;#39;une commande, l&amp;#39;interprteur cre un nouveau contexte et le place sur la pile. Ce nouveau contexte est appel contexte descendant.\nLes variables d&amp;#39;environnement sont hrites du systme lors de la cration du processus hte et se propagent par ascendance successive aux diffrents contextes descendants. Les variables contenant la commande et les arguments d&amp;#39;appels, elles, sont propres au contexte et ne se propagent jamais aux contextes descendants. L&amp;#39;adresse de sortie du contexte n&amp;#39;est pas accessible en tant que variable et, tout comme les arguments d&amp;#39;appel, est propre au contexte. Son rle est plus amplement dtaill dans le reste du chapitre.\nCertaines commandes s&amp;#39;excutent dans le contexte en cours alors que d&amp;#39;autres crent leurs propres contextes. C&amp;#39;est, en partie, ce qui fait la diffrence entre commande interne et externe: les commandes internes sont en fait des fonctions internes de l&amp;#39;interprteur qu&amp;#39;il est possible d&amp;#39;appeler via un alias de type nom de commande, alors que les commandes externes sont des excutables distincts de l&amp;#39;interprteur. L&amp;#39;excution d&amp;#39;une commande externe ou d&amp;#39;un script gnrera toujours un nouveau contexte. Les commandes internes s&amp;#39;excutent toujours dans le contexte courant. Il faut cependant noter que les commandes internes, mme si elles excutent toujours leurs fonctions principales dans le contexte courant, peuvent crer des contextes descendants afin d&amp;#39;excuter certaines fonctions comme la boucle pour qui gnre un contexte initial dans lequel se trouve l&amp;#39;ensemble  traiter et un contexte secondaire, cr  chaque itration de la boucle, dans lequel s&amp;#39;opre le traitement.\nIV-C-1. La porte des variables▲","Si le concept de contexte de commande est si important, c&amp;#39;est qu&amp;#39;il influe grandement sur l&amp;#39;utilisation des variables. En effet, chaque contexte est une fraction de la pile qui n&amp;#39;est pas accessible lorsque l&amp;#39;excution s&amp;#39;opre depuis un contexte ascendant. Les variables se propagent par ascendance; c&amp;#39;est&#8211;dire que lorsqu&amp;#39;un nouveau contexte est cr, il hrite des variables (et de leurs valeurs) du contexte ascendant (celui  partir duquel il a t cr). Si une variable est modifie dans un contexte descendant, sa valeur restera inchange dans le contexte ascendant. Ainsi, faire passer une variable vers un contexte descendant est simple (il suffit de crer le contexte), mais l&amp;#39;inverse s&amp;#39;avre plus compliqu, car il n&amp;#39;est pas possible de modifier une valeur dans un contexte ascendant.\nL&amp;#39;interprteur supporte l&amp;#39;expansion retarde des variables qui permet, dans une certaine mesure, de faire passer une valeur vers un contexte ascendant. Pour cela, le processus hte, lorsque l&amp;#39;expansion retarde est active, alloue une seconde zone de mmoire qui prend la forme d&amp;#39;un tas qui est accessible depuis n&amp;#39;importe quel contexte. Contrairement  la pile, il est possible, avec le tas, d&amp;#39;y placer et rcuprer les donnes dans n&amp;#39;importe quel ordre.  chaque fois qu&amp;#39;une variable est cre ou modifie, elle est place  la fois dans le contexte (autrement dit sur la pile) et dans le tas. Pour accder aux variables dont l&amp;#39;expansion est retarde, il faut utiliser le symbole ! au lieu du symbole % lors de leur expansion. Ainsi la variable prendra la dernire valeur qui lui a t attribue pendant l&amp;#39;excution et non la valeur qu&amp;#39;elle possde dans le contexte en cours. L&amp;#39;expansion retarde des variables sera plus amplement aborde dans le chapitre VIL&amp;#39;expansion retarde des variables.","IV-D. Les fonctions▲","Les fonctions sont des portions de code isoles, commenant par un label et finissant par un saut  une adresse spcifique: l&amp;#39;adresse de retour. La vraie diffrence avec une simple portion de code rside dans le fait qu&amp;#39;un nouveau contexte est cr, permettant ainsi aux fonctions de disposer de paramtres de commande et, dans certains cas, d&amp;#39;un code de sortie.\nIV-D-1. L&amp;#39;appel de fonction▲","The command appel permet d&amp;#39;effectuer des appels de fonction. Elle a la particularit de crer un contexte dans lequel va s&amp;#39;excuter la fonction appele (la portion de code); lors de la cration du contexte descendant, une adresse de retour et les arguments d&amp;#39;appel vont tre empils. La syntaxe de la commande appel est la suivante, o     est le nom de la fonction  appeler et     est le ou les paramtres  passer  la fonction.\nappel :&lt;étiquette&gt; [[[[&lt;paramtre&gt; [&#8230;]]  \nLors d&amp;#39;un appel  une fonction, si l&amp;#39;excution est redirige vers une autre adresse que l&amp;#39;adresse de retour et que, par la suite, d&amp;#39;autres appels sont effectus vers cette mme fonction, alors la premire adresse ne sera pas dpile, occasionnant une fuite de mmoire. Si un script comporte ce cas, son excution peut tre stoppe par l&amp;#39;interprteur (si l&amp;#39;utilisation de la pile atteint 90%) comme le montre le script 40.","1.2345\n@écho de\n:LabelUn\nappel :LabelDeux\n:LabelDeux\ngoto :LabelUn","IV-D-2. Sortie de fonction▲","The command goto prend aussi le label :eof (End Of File), qui prend la valeur de l&amp;#39;adresse de retour du contexte en cours, soit la ligne se trouvant immdiatement aprs le dernier appel effectu.\nThe command goto n&amp;#39;ajoute rien dans la pile, ainsi l&amp;#39;excution d&amp;#39;un goto ne peut occasionner de fuite de mmoire. Dans le cas prcis de l&amp;#39;excution d&amp;#39;un goto:eof, la commande goto incrmente le pointeur de pile de la taille totale des adresses des arguments d&amp;#39;appel et de la taille de l&amp;#39;adresse de retour, permettant  la pile de revenir  l&amp;#39;tat d&amp;#39;avant l&amp;#39;appel, puis effectue un saut inconditionnel  l&amp;#39;adresse de retour, soit la ligne suivant le dernier appel. Ainsi, si l&amp;#39;on modifie le script 40 de la manire suivante (script 41), on obtient un script qui ne finit jamais, car il n&amp;#39;y a ni fuite de mmoire (chaque appel de la fonction :LabelDeux finished by goto:eof), ni point de sortie (il y aura toujours une commande  excuter, l&amp;#39;excution revient toujours au :LabelUn). Seul l&amp;#39;appui sur les touches Ctrl+C permet de quitter le script.","1.234567.89dix.\n@écho de","ensemble /a &quot;Counter=0&quot;\n:LabelUn\nappel :LabelDeux\nensemble /a &quot;Counter+=1&quot;\ngoto :LabelUn\n:LabelDeux\nécho %Counter%\ngoto :eof","IV-E. Les paramtres de commande▲","Ils sont passs au contexte lors de sa cration et sont accessibles sous la forme de variables spciales: %n, n tant le numro d&amp;#39;index du paramtre. En effet, chaque contexte tant gnr suite  l&amp;#39;appel d&amp;#39;un script, d&amp;#39;une fonction ou d&amp;#39;une commande, il possde une commande d&amp;#39;appel et, la plupart du temps, de paramtres d&amp;#39;appel. L&amp;#39;index %0 contient le nom du script, de la fonction ou de la commande, l&amp;#39;index %1 contient le paramtre 1, l&amp;#39;index %2 contient le paramtre 2 et ainsi de suite. Le paramtre %* expanse tous les paramtres passs au contexte (%0 n&amp;#39;est pas un paramtre, mais une commande d&amp;#39;appel et n&amp;#39;est donc pas renvoye par %*). Exemple avec le script 42:","1.234567.89dix.1112131415\n@écho de","appel :MonLabel Param1 Param2\npause","goto :eof",":MonLabel\nécho %*\nécho %0\nécho %1\nécho %2\ngoto :eof","L&amp;#39;utilisation des paramtres suit plusieurs rgles:","les paramtres ne sont pas limits en nombre dans la commande d&amp;#39;appel, mais la rgle des 2048/4096 caractres maximum par ligne de commande s&amp;#39;applique;\npar souci de compatibilit avec les systmes Windows XP et antrieurs, il est prfrable de ne pas utiliser des paramtres avec un index suprieur  9, qui restent cependant accessibles via la commande décalage (voir section IV.E.2La commande shift).","IV-E-1. Les modificateurs de paramtres de commande▲","Les paramtres de commande supportent plusieurs modificateurs permettant de les parser, en voici la liste exhaustive:","Modificateur","La description","%~1","résultats %1 en supprimant les guillemets (&quot;) de dbut et de fin.","%~f1","renvoie le chemin d&amp;#39;accs vrifi du fichier dsign par %1, si le fichier n&amp;#39;est pas trouv, alors ce modificateur s&amp;#39;expanse en une chane vide.","%~d1","renvoie la lettre de lecteur du fichier dsign par %1.","%~p1","renvoie le chemin d&amp;#39;accs du fichier dsign par %1.","%~n1","renvoie le nom du fichier dsign par %1.","%~x1","renvoie l&amp;#39;extension du fichier dsign par %1.","%~s1","renvoie le chemin d&amp;#39;accs, sous forme de noms courts, du fichier dsign par %1.","%~a1","renvoie les attributs du fichier dsign par %1.","%~t1","renvoie la date et l&amp;#39;heure de cration du fichier dsign par %1.","%~z1","renvoie la taille du fichier dsign par %1.","%~$:1","est parcourue  la recherche d&amp;#39;occurrence de %1, si aucune occurrence de %1 n&amp;#39;est trouve ou que  n&amp;#39;est pas dfini dans le contexte en cours, alors ce modificateur s&amp;#39;expanse en une chane vide. Oui  est compos de plusieurs chanes, elles doivent tre spares par des points-virgules (;) afin que le modificateur puisse les distinguer correctement.","Tableau 10: Les modificateurs de paramtres de commande. \nLes modificateurs de paramtres de commande fonctionnent pour tous les index. Ils peuvent tre utiliss conjointement pour obtenir plusieurs informations en mme temps, comme le montre le script 43:","1.234567.89\n@écho de","cls\nappel :MonLabel %cmdcmdline%\npause\ngoto :eof\n:MonLabel\nécho %~dpnx€ComSpec:1\ngoto :eof","IV-E-2. La commande shift▲","The command décalage permet de dcaler l&amp;#39;index de tous les paramtres de -1, afin d&amp;#39;accder aux index suprieurs  neuf, ou de crer un mcanisme de gestion des paramtres (voir la mise en application de ce chapitreMise en application des contextes). Si les extensions de commande sont actives, la commande décalage prend le paramtre /n, o n est le numro d&amp;#39;index  partir duquel commence le dcalage des paramtres, tous les index gaux ou suprieurs  n seront dcals de -1.\ndécalage [/n] \nDans le script 44, le commande shift /1 permet d&amp;#39;accder au deuxime paramtre via l&amp;#39;index 1:.","1.234567.89\n@écho de\ncls\nappel :MonLabel &quot;rien&quot; %cmdcmdline%\npause\nsortie /b\n:MonLabel\ndécalage /1\nécho %~dpnx€ComSpec:1\ngoto :eof","IV-F. Les sorties▲","La sortie d&amp;#39;un contexte ou d&amp;#39;un processus peut s&amp;#39;effectuer via les commandes sortie et goto:eof. Dans le cas de goto:eof, si tous les contextes ont correctement t dpils, alors la dernire adresse dpile est:","soit l&amp;#39;adresse de sortie du processus dans le cas d&amp;#39;un script appel en cliquant dessus;\nsoit l&amp;#39;adresse de retour  l&amp;#39;interprteur si le script a t lanc depuis celui-ci.","The command sortie, elle, permet de sortir du processus hte, quel que soit le nombre de contextes empils. Si la commande sortie est utilise avec le paramtre /b, alors la sortie s&amp;#39;effectuera  l&amp;#39;adresse de sortie du contexte et non  l&amp;#39;adresse de sortie du processus hte. L&amp;#39;intrt de la commande sortie est qu&amp;#39;un code numrique de sortie peut tre spcifi, contrairement  goto:eof. La syntaxe de la commande exit est la suivante, o     est le code de sortie.\nsortie [/b]    [[[[&lt;CodeSortie&gt;]  \nDans le script 45, la sortie de la fonction :LabelDeux s&amp;#39;effectue  l&amp;#39;aide d&amp;#39;un goto:eof et la sortie de la fonction :LabelQuatre s&amp;#39;effectue  l&amp;#39;aide d&amp;#39;exit /b; dans les deux cas, le retour vers la procdure appelante s&amp;#39;opre correctement, car c&amp;#39;est la bonne adresse de retour qui est dpile. Dans la fonction :LabelSix du script 45, la commande exit /b provoque la fin du script, car la fonction :LabelSix a t appele avec la commande goto:LabelSix qui n&amp;#39;a rien empil. Comme tous les contextes prcdents ont t dpils correctement, seule la dernire adresse de retour subsiste. Cette adresse correspond  l&amp;#39;adresse de retour  l&amp;#39;interprteur si le script a t appel depuis celui-ci ou  l&amp;#39;adresse de sortie du processus, si le script a t appel par un double-clic.","1.234567.89dix.111213141516171819202122232425262728293031.323334353637\n@écho de\ncls\nensemble /a &quot;CounterGoto=0&quot;\nensemble /a &quot;CounterExit=0&quot;\nensemble /a &quot;CounterCounter=0&quot;\n:LabelUn\nappel :LabelDeux\nensemble /a &quot;CounterGoto+=1&quot;\nécho CounterGoto: %CounterGoto% sur affichage Goto 1.\nsi %CounterGoto% EQU 6 goto :LabelTrois\ngoto :LabelUn\n:LabelDeux\nensemble /a &quot;CounterGoto+=1&quot;\nécho CounterGoto: %CounterGoto% sur affichage Goto 2\ngoto :eof",":LabelTrois\nappel :LabelQuatre\nensemble /a &quot;CounterExit+=1&quot;\nécho CounterExit: %CounterExit% sur affichage Sortie 1.\nsi %CounterExit% EQU 6 goto :LabelCinq\ngoto :LabelTrois\n:LabelQuatre\nensemble /a &quot;CounterExit+=1&quot;\nécho CounterExit: %CounterExit% sur affichage Sortie 2\nsortie /b",":LabelCinq\ngoto :LabelSix\nensemble /a &quot;CounterCounter+=1&quot;\nécho CounterCounter: %CounterCounter% sur affichage Counter 1.\nsi %CounterCounter% EQU 6 sortie /b\ngoto :LabelCinq\n:LabelSix\nensemble /a &quot;CounterCounter+=1&quot;\nécho CounterCounter: %CounterCounter% sur affichage Counter 2.\nsortie /b","IV-G. Code de sortie▲","Comme expliqu prcdemment, un code de sortie peut tre spcifi pour une fonction ou pour un script. Cela se fait via la commande sortie [/b]     o     est un code de sortie numrique. Les codes de sortie sont rgis par les mmes rgles que les nombres entiers et sont cods sur 32 bits en arithmtique signe. Ce code de sortie est fix dans la variable ErrorLevel afin de pouvoir tre utilis par la suite. Exemple avec le script 46:","1.234567.89\n@écho de","écho %ErrorLevel%\nappel :UnLabel\nécho %ErrorLevel%\npause\nsortie /b\n:UnLabel\nsortie /b 1","IV-H. Script batch et adresse de retour▲","L&amp;#39;appel d&amp;#39;un script depuis l&amp;#39;interprteur ou en cliquant dessus gnre toujours un contexte complet. Cependant l&amp;#39;appel d&amp;#39;un script en ligne de commande depuis un autre script gnre un contexte ne possdant pas d&amp;#39;adresse de retour. Exemple avec le script 47:","1.234567.89dix.1112131415161718\n@écho de","si exister test.bat del /q test.bat","appel :WriteTestBat &gt;&gt;test.bat","test.bat","écho Return  %~nx0.\ndel /q test.bat\npause\nsortie /b",":WriteTestBat\nécho @écho de\nécho écho Une phrase affiche dans test.bat\nécho pause\ngoto :eof","Lorsqu&amp;#39;on excute le script 47, celui-ci cre un second script, test.bat. L&amp;#39;appel en ligne de commande Test.bat affiche alors Une phrase affiche depuis test.bat et met en pause l&amp;#39;excution. Lorsqu&amp;#39;on appuie sur une touche, cela provoque la fin des deux scripts. En effet, quand l&amp;#39;interprteur arrive  la fin d&amp;#39;un script et que celui-ci ne se termine pas par goto :eof ou sortie [/b], il effectue de lui-mme le saut  l&amp;#39;adresse de retour. Sauf que l&amp;#39;appel de test.bat n&amp;#39;a pas empil d&amp;#39;adresse de retour et de ce fait, l&amp;#39;adresse qui est dpile est celle du premier script. Pour parer  ce problme, il faut s&amp;#39;assurer que l&amp;#39;adresse de retour soit effectivement empile en utilisant la commande appel. Ainsi, en modifiant le script 47 de la manire suivante (script 48), l&amp;#39;appel et la sortie s&amp;#39;effectuent sans erreur.","1.234567.89dix.1112131415161718\n@écho de","si exister test.bat del /q test.bat","appel :WriteTestBat &gt;&gt;test.bat","appel test.bat","écho Return  %~nx0.\ndel /q test.bat\npause\nsortie /b",":WriteTestBat\nécho @écho de\nécho écho Une phrase affiche dans test.bat\nécho pause\ngoto :eof","IV-I. La commande start▲","The command début permet de lancer un script ou une commande dans un nouveau processus, permettant ainsi d&amp;#39;excuter des commandes dans un environnement modifi. Ainsi, toute variable cre ou modifie dans le script appelant est passe  ce nouveau processus.","Syntaxe de la commande start\nSélectionnez","début [&quot;[&quot;[\"[\"&lt;légende&gt;&quot;][/d[/d[/d[/d&lt;chemin&gt;] [/i] [/min] [/max]    [/separate[/separate[/separate[/separate|/shared][/low[/low\n      [/low|/normal|/high|/realtime|/abovenormal|/belownormal][/affinity[/affinity[/affinity[/affinity&lt;hexa&gt;]\n      [/wait] [/b]    [[[[&lt;ordre&gt;][[[[&lt;paramtres&gt;]","Paramtres","Descriptions","Titre de la fentre.","/d","Spcifie que le chemin d&amp;#39;accs donn par     est le rpertoire de dpart.","Chemin d&amp;#39;accs du rpertoire de dpart.","/b","Lance l&amp;#39;application dans la fentre courante (en tche de fond). L&amp;#39;arrt par Ctrl+C est remplac par Ctrl+Pause.","/i","Le nouveau contexte sera le contexte original du processus hte et non le contexte en cours.","/min","Dmarrer dans une fentre rduite.","/max","Dmarrer dans une fentre agrandie.","/separate","Dmarrer les programmes 16 bits dans un espace mmoire distinct. Ne fonctionne pas sur les systmes 64 bits.","/shared","Dmarrer les programmes 16 bits dans un espace mmoire partag. Ne fonctionne pas sur les systmes 64 bits.","/low","Dmarrer l&amp;#39;application dans la classe de priorit IDLE.","/normal","Dmarrer l&amp;#39;application dans la classe de priorit NORMAL.","/high","Dmarrer l&amp;#39;application dans la classe de priorit HIGH.","/realtime","Dmarrer l&amp;#39;application dans la classe de priorit REALTIME.","/abovenormal","Dmarrer l&amp;#39;application dans la classe de priorit ABOVENORMAL.","/belownormal","Dmarrer l&amp;#39;application dans la classe de priorit BELOWNORMAL.","/affinity","La nouvelle application aura le masque d&amp;#39;affinit de processeur spcifi, exprim en tant que valeur hexadcimale.","Affinit du processus sous forme de valeur hexadcimale.","/wait","Lancer la commande et attendre qu&amp;#39;elle soit finie pour continuer l&amp;#39;excution. S&amp;#39;il s&amp;#39;agit d&amp;#39;une commande interne ou d&amp;#39;un fichier batch, la fentre reste ouverte aprs l&amp;#39;excution de la commande.","Commande  excuter.","Paramtres  passer  la commande.","Tableau 11: Les paramtres de la commande start. \nLe script 49 appelle une nouvelle instance de lui-mme avec le paramtre foo aprs avoir dfini la variable X, la seconde instance affiche bien la valeur de X alors qu&amp;#39;elle n&amp;#39;a pas dclar X. Notez bien qu&amp;#39;il s&amp;#39;agit d&amp;#39;un nouveau processus, il est donc possible de le quitter avec la commande sortie sans aucun paramtre.","1.234567.89dix.\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\nensemble &quot;X=bar&quot;\ndébut %~nx0 foo\npause\nsortie /b\n:SecondInstance\nécho %X%\npause\nsortie","Premire instance:","Seconde instance:","Si l&amp;#39;on modifie le script 49 en ajoutant le paramtre /i dans l&#39;ordre début (script 50), alors le nouveau processus sera cr en hritant du contexte original du processus hte dans lequel la variable X n&amp;#39;a pas t dclare.","1.234567.89dix.\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\nensemble &quot;X=bar&quot;\ndébut /i %~nx0 foo\npause\nsortie /b\n:SecondInstance\nécho %X%\npause\nsortie","Premire instance:","Seconde instance:","Une autre application intressante de la commande début est l&amp;#39;excution parallle  l&amp;#39;aide du paramtre /b comme dans le script 51.\nN.B.: la commande temps libre n&amp;#39;est pas fournie en standard sur tous les systmes Windows. Si vous ne l&amp;#39;avez pas, veuillez supprimer la commande temps libre du script, d-commenter les commandes écho, ping et supprimer le caractre d&amp;#39;chappement dans la commande ping.","1.234567.89dix.11\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\ndébut /b %~nx0 foo","temps libre /t 10 /nobreak\npause\nsortie /b\n:SecondInstance\nécho %1\nsortie","IV-J. La commande setlocal▲","Cette commande permet de modifier partiellement les contextes en crant un contexte local. Les variables et leurs valeurs, dans ce nouveau contexte local, sont soumises aux rgles inhrentes  la cration de contexte. L&amp;#39;avantage de cette commande est que l&amp;#39;on peut crer un contexte sans passer par un appel. Ce contexte local ne possde pas d&amp;#39;adresse de retour ni de paramtres d&amp;#39;appel. Seules les variables, et ventuellement les extensions de commande, sont affectes. Ainsi, toutes les variables cres ou modifies dans ce contexte local y sont propres. Cette modification prend fin lorsque l&amp;#39;excution rencontre la commande endlocal. The command setlocal prend aussi les paramtres:","enabledelayedexpansion qui active l&amp;#39;expansion retarde;\ndisabledelayedexpansion qui dsactive l&amp;#39;expansion retarde;\nenableextensions qui active les extensions de commande;\ndisableextensions qui dsactive les extensions de commande.","setlocal [enableextensions[enableextensions[enableextensions[enableextensions|disableextensions][enabledelayedexpansion[enabledelayedexpansion[enabledelayedexpansion[enabledelayedexpansion|disabledelayedexpansion]","IV-K. La commande endlocal▲","Cette commande termine le contexte local gnr par la commande setlocal correspondante. Plusieurs contextes locaux pouvant tre empils les uns au-dessus des autres, toutes les modifications apportes dans le contexte local qui se termine sont perdues, y compris les modifications apportes par les paramtres de la commande setlocal. The command endlocal ne prend aucun paramtre. Exemple pour setlocal et endlocal avec le script 52:","1.234567.8\n@écho de\nsetlocal\nensemble &quot;X=foo&quot;\nécho %X%\nendlocal\nécho %X%\npause\nsortie","IV-L. Mise en application des contextes▲","1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99100101.102.103.104105106.107.108.109.110.111.112.113.114.115.116.117.118.119120.121.122.123.124.125.126.127.128.129.130.131.132.133.134.135.136.137.138.139.140141.142.143.144.145.146.147.148.149.150.151.152.153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.171.172.173.174.175.176.\n@écho de","ensemble &quot;ScriptName=%~nx0&quot;\nensemble &quot;NegNum=false&quot;\nensemble /a &quot;PrefixEnable=0&quot;\nensemble /a &quot;UpperPrefix=0&quot;","setlocal",":ParseArgs\nsi &quot;%~1&quot;==&quot;&quot; goto Init\nsi /i &quot;%~1&quot;==&quot;/?&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-?&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/h&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-h&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/Aidez-moi&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-help&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/hex&quot; (\n    ensemble &quot;SInt32=%~2&quot;\n    ensemble /a &quot;SInt32&quot;\n    si errorlevel 1 (\n        décalage /1\n        goto BadSyntax\n)\n    décalage /1\n    décalage /1\n    goto ParseArgs\n)\nsi /i &quot;%~1&quot;==&quot;/p&quot; (\n    ensemble /a &quot;PrefixEnable=1&quot;\n    si %~1 EQU /P ensemble /a &quot;UpperPrefix=1&quot;\n    décalage /1\n    goto ParseArgs\n)\n:BadSyntax\necho.","net helpmsg 87\nécho [[[[%~1 ]\necho.\nsi ne pas &quot;%~0&quot;==&quot;:BadSyntax&quot; endlocal\nsortie /b 1",":Init\nsi défini SInt32 goto Exec\n:UnknowError\nappel :BadSyntax /hex\nappel :Help\nendlocal\nsortie /b 2",":Exec","si %SInt32% LSS 0 (\n    ensemble &quot;NegNum=true&quot;\n    ensemble /a &quot;SInt32=~SInt32&quot;\n)","ensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;","si &quot;%NegNum%&quot;==&quot;true&quot; (\n    ensemble /a &quot;Nibble0=15  Nibble0&quot;\n    ensemble /a &quot;Nibble1=15  Nibble1&quot;\n    ensemble /a &quot;Nibble2=15  Nibble2&quot;\n    ensemble /a &quot;Nibble3=15  Nibble3&quot;\n    ensemble /a &quot;Nibble4=15  Nibble4&quot;\n    ensemble /a &quot;Nibble5=15  Nibble5&quot;\n    ensemble /a &quot;Nibble6=15  Nibble6&quot;\n    ensemble /a &quot;Nibble7=15  Nibble7&quot;\n)","si %Nibble0% GTR 9 (\n    si %Nibble0% EQU dix ensemble &quot;Nibble0=A&quot;\n    si %Nibble0% EQU 11 ensemble &quot;Nibble0=B&quot;\n    si %Nibble0% EQU 12 ensemble &quot;Nibble0=C&quot;\n    si %Nibble0% EQU 13 ensemble &quot;Nibble0=D&quot;\n    si %Nibble0% EQU 14 ensemble &quot;Nibble0=E&quot;\n    si %Nibble0% EQU 15 ensemble &quot;Nibble0=F&quot;\n)\nsi %Nibble1% GTR 9 (\n    si %Nibble1% EQU dix ensemble &quot;Nibble1=A&quot;\n    si %Nibble1% EQU 11 ensemble &quot;Nibble1=B&quot;\n    si %Nibble1% EQU 12 ensemble &quot;Nibble1=C&quot;\n    si %Nibble1% EQU 13 ensemble &quot;Nibble1=D&quot;\n    si %Nibble1% EQU 14 ensemble &quot;Nibble1=E&quot;\n    si %Nibble1% EQU 15 ensemble &quot;Nibble1=F&quot;\n)\nsi %Nibble2% GTR 9 (\n    si %Nibble2% EQU dix ensemble &quot;Nibble2=A&quot;\n    si %Nibble2% EQU 11 ensemble &quot;Nibble2=B&quot;\n    si %Nibble2% EQU 12 ensemble &quot;Nibble2=C&quot;\n    si %Nibble2% EQU 13 ensemble &quot;Nibble2=D&quot;\n    si %Nibble2% EQU 14 ensemble &quot;Nibble2=E&quot;\n    si %Nibble2% EQU 15 ensemble &quot;Nibble2=F&quot;\n)\nsi %Nibble3% GTR 9 (\n    si %Nibble3% EQU dix ensemble &quot;Nibble3=A&quot;\n    si %Nibble3% EQU 11 ensemble &quot;Nibble3=B&quot;\n    si %Nibble3% EQU 12 ensemble &quot;Nibble3=C&quot;\n    si %Nibble3% EQU 13 ensemble &quot;Nibble3=D&quot;\n    si %Nibble3% EQU 14 ensemble &quot;Nibble3=E&quot;\n    si %Nibble3% EQU 15 ensemble &quot;Nibble3=F&quot;\n)\nsi %Nibble4% GTR 9 (\n    si %Nibble4% EQU dix ensemble &quot;Nibble4=A&quot;\n    si %Nibble4% EQU 11 ensemble &quot;Nibble4=B&quot;\n    si %Nibble4% EQU 12 ensemble &quot;Nibble4=C&quot;\n    si %Nibble4% EQU 13 ensemble &quot;Nibble4=D&quot;\n    si %Nibble4% EQU 14 ensemble &quot;Nibble4=E&quot;\n    si %Nibble4% EQU 15 ensemble &quot;Nibble4=F&quot;\n)\nsi %Nibble5% GTR 9 (\n    si %Nibble5% EQU dix ensemble &quot;Nibble5=A&quot;\n    si %Nibble5% EQU 11 ensemble &quot;Nibble5=B&quot;\n    si %Nibble5% EQU 12 ensemble &quot;Nibble5=C&quot;\n    si %Nibble5% EQU 13 ensemble &quot;Nibble5=D&quot;\n    si %Nibble5% EQU 14 ensemble &quot;Nibble5=E&quot;\n    si %Nibble5% EQU 15 ensemble &quot;Nibble5=F&quot;\n)\nsi %Nibble6% GTR 9 (\n    si %Nibble6% EQU dix ensemble &quot;Nibble6=A&quot;\n    si %Nibble6% EQU 11 ensemble &quot;Nibble6=B&quot;\n    si %Nibble6% EQU 12 ensemble &quot;Nibble6=C&quot;\n    si %Nibble6% EQU 13 ensemble &quot;Nibble6=D&quot;\n    si %Nibble6% EQU 14 ensemble &quot;Nibble6=E&quot;\n    si %Nibble6% EQU 15 ensemble &quot;Nibble6=F&quot;\n)\nsi %Nibble7% GTR 9 (\n    si %Nibble7% EQU dix ensemble &quot;Nibble7=A&quot;\n    si %Nibble7% EQU 11 ensemble &quot;Nibble7=B&quot;\n    si %Nibble7% EQU 12 ensemble &quot;Nibble7=C&quot;\n    si %Nibble7% EQU 13 ensemble &quot;Nibble7=D&quot;\n    si %Nibble7% EQU 14 ensemble &quot;Nibble7=E&quot;\n    si %Nibble7% EQU 15 ensemble &quot;Nibble7=F&quot;\n)","ensemble &quot;LSW=%Nibble3%%Nibble2%%Nibble1%%Nibble0%&quot;","ensemble &quot;MSW=%Nibble7%%Nibble6%%Nibble5%%Nibble4%&quot;","si %PrefixEnable% EQU 1 (\n    si %UpperPrefix% EQU 1 (\n        écho 0X%MSW%%LSW%\n    ) autre (\n        écho 0x%MSW%%LSW%\n    )\n) autre (\n    écho %MSW%%LSW%\n)\ngoto End",":Help\necho.\nécho %ScriptName% [/p^[/p^[/p^[/p^|/P]/hex ^&lt;number^&gt;\nécho %ScriptName% -?^\necho.\nécho     /hex    Dfinit le ^&lt;number^&gt; qui doit tre exprim en hexadcimal.\nécho     /p      Dfinit que le prfixe doit tre affich en minuscules.\nécho     /P      Dfinit que le prfixe doit tre affich en majuscules.\necho.    /?      Affiche cette aide.\necho.",":End\nsi ne pas &quot;%~0&quot;==&quot;:Help&quot; endlocal\nsortie /b 0","Le script 53 doit tre appel avec des paramtres afin de fonctionner. Ainsi, quand on appelle ce script avec l&amp;#39;un des paramtres suivants: /?, &#8211;, /h, -h, /help ou -help, l&amp;#39;aide est affiche. Si on appelle le script avec les paramtres /hex n (ou n est le nombre voulu), il affiche la reprsentation hexadcimale de ce nombre. Notez galement l&amp;#39;utilisation du paramtre %~nx0 pour dfinir le nom du script, ici, la fonction :Help est appele via un appel au label :UnknowError (la commande exit /b 0 du label :End fournit le saut  l&amp;#39;adresse de retour), %0 aurait t, alors, la chane :Help.\nUn script devrait toujours avoir un squelette similaire  celui du script 53. Pour en connatre la raison, examinons ses diffrentes parties:","le script commence par @Écho off pour rendre plus net l&amp;#39;affichage, puis les variables de configuration sont initialises avec leurs valeurs par dfaut, ce qui permet au script de fonctionner mme si ces valeurs ne sont pas modifies par la suite. The command setlocal est utilise pour les cas d&amp;#39;erreur, par exemple si le nombre donn via l&amp;#39;argument /hex dpasse 32 bits. La variable ErrorLevel n&amp;#39;est pas remise  jour suite  une erreur dans une commande interne, ainsi, si l&amp;#39;on appelle le script depuis l&amp;#39;interprteur avec en paramtre un nombre invalide, tous les appels du script qui suivront, mme avec un nombre valide, se termineront sur une erreur. Pensez  utiliser la commande endlocal avant chaque point de sortie du script;\nvient ensuite le label :ParseArgs dans lequel les paramtres d&amp;#39;appel vont tre vrifis, chaque fois qu&amp;#39;un paramtre est trouv, sa valeur est dfinie dans la variable correspondante puis les paramtres d&amp;#39;appel sont dcals avant le retour au label :ParseArgs. Si le paramtre fourni dans la commande d&amp;#39;appel n&amp;#39;est pas trouv, l&amp;#39;excution continue jusqu&amp;#39;au label :BadSyntax qui affiche un message d&amp;#39;erreur et quitte le script avec le code d&amp;#39;erreur 1;\nune fois tous les paramtres lus, l&amp;#39;excution est redirige vers le label :Init, qui a pour fonction de vrifier que les donnes de travail ont bien t fournies dans la commande d&amp;#39;appel. En effet, ce script appel sans paramtre s&amp;#39;excute au moins jusqu&amp;#39;au label :Init. Dans ce label, il convient, en gnral, de modifier les variables de configuration en fonction des valeurs fournies dans la commande d&amp;#39;appel. Si les donnes fournies ne sont pas valides, l&amp;#39;excution continue au label :UnknowError qui, dans notre cas, va afficher o se trouve l&amp;#39;erreur ainsi que l&amp;#39;aide;\nsi les donnes de travail sont valides, l&amp;#39;excution est redirige vers le label :Exec qui va excuter le travail requis puis afficher le rsultat avant d&amp;#39;tre redirige vers le label :End;\nl&#39;étiquette :Help fournit une aide en ligne de commande (c&amp;#39;est toujours utile). Celui-ci se trouvant juste devant le label :End, il peut  la fois tre utilis comme une fonction ou comme une portion de code classique. Notez l&amp;#39;chappement de la commande écho avec le point  la ligne echo. /? Affiche cette aide. sans quoi l&amp;#39;interprteur aurait affich l&amp;#39;aide de la commande écho.","Les boucles sont gres par la commande pour, elle permettent une grande quantit d&amp;#39;actions sur des fichiers, des rpertoires ou des chanes de caractres. La boucle pour se compose d&amp;#39;un ensemble sur lequel s&amp;#39;opre une commande. le    est pars puis transite au moyen d&amp;#39;une     autour du . La syntaxe de base de la boucle pour est la suivante.\npour %&lt;variable&gt; dans (&lt;ensemble&gt;) faire &lt;ordre&gt;  \nle     est en fait un paramtre de commande propre  la boucle pour. Elle utilise donc la syntaxe et les modificateurs de paramtre de commande (voir section IV.E.1Les modificateurs de paramtres de commande pour plus d&amp;#39;information),  ceci prs que le paramtre est dsign par une lettre et que le caractre % du paramtre doit tre chapp lorsque la boucle est utilise dans un script. Ainsi dans un script, le paramtre %A doit tre utilis avec le caractre d&amp;#39;chappement %, ce qui nous donne la syntaxe %%A. Il faut aussi noter que les paramtres de la boucle pour respectent la casse, ainsi %a est diffrent de %A.\nle    est compos d&amp;#39;une ou plusieurs entres. Si plusieurs entres sont prsentes, elles doivent tre spares par des virgules pour permettre  la boucle de les distinguer correctement. Ce     peut tre:","soit des noms de fichiers (avec leurs chemins d&amp;#39;accs s&amp;#39;ils ne sont pas dans le rpertoire courant);\nsoit des chemins d&amp;#39;accs;\nsoit des chanes de caractres.","Toutes les composantes de l&amp;#39;    sont passes  la     sous forme de chanes de caractres. Seule l&amp;#39;utilisation qui en est faite dans le traitement dtermine s&amp;#39;il s&amp;#39;agit d&amp;#39;une chane de caractres, d&amp;#39;un nom de fichier ou d&amp;#39;un chemin d&amp;#39;accs. Si une chane de l&amp;#39;    contient un ou plusieurs espaces, elle doit tre place entre guillemets. Exemple avec le script 54:","1.2345\n@écho de\npour %%A dans (texte) faire écho %%A\npour %%B dans (&quot;%cd%&quot;) faire si exister %%B écho %%B\npause\nsortie /b","Si les extensions de commande sont actives, la boucle pour peut prendre un des paramtres de la liste suivante:\nV-A. Les boucles pour chemin d&amp;#39;accs▲","Les boucles pour chemin d&amp;#39;accs permettent d&amp;#39;effectuer des recherches de dossiers ou de fichiers. La recherche de dossier s&amp;#39;effectue avec le paramtre /d tandis que la recherche de fichier s&amp;#39;effectue avec le paramtre /r. Leurs syntaxes sont les suivantes:\npour /d %&lt;paramtre&gt; dans ([« ][[[[&lt;chemin_d&amp;#39;accs&gt;]*[\"]) faire &lt;cmd&gt;  \npour /r [\"][[[[&lt;chemin_d&amp;#39;accs&gt;][\"] %&lt;paramtre&gt; dans ([\"]*[\"]) faire &lt;cmd&gt;","Options","Descriptions"],"content_blocks":[{"id":"text-1","type":"text","heading":"","plain_text":"Les fichiers de commandes sont des scripts de commande qui s&#39;exécutent dans l&#39;interpréteur de commandes Windows. Alors, quel pourrait être l’intérêt d’écrire ces lignes de commande dans un script? En fait, il y a plusieurs raisons:","html":"<p>Les fichiers de commandes sont des scripts de commande qui s&#039;exécutent dans l&#039;interpréteur de commandes Windows. Alors, quel pourrait être l’intérêt d’écrire ces lignes de commande dans un script? En fait, il y a plusieurs raisons:</p>"},{"id":"text-2","type":"text","heading":"","plain_text":"évitez de devoir réécrire constamment les mêmes commandes lors de tâches répétitives;\nPossibilité de créer de vrais petits programmes facilitant les tâches à exécuter via l&#39;interpréteur de commandes.","html":"<p>évitez de devoir réécrire constamment les mêmes commandes lors de tâches répétitives;\nPossibilité de créer de vrais petits programmes facilitant les tâches à exécuter via l&#039;interpréteur de commandes.</p>"},{"id":"text-3","type":"text","heading":"","plain_text":"Nous étudierons des méthodes pour concevoir ces programmes. Dans la suite de ce document, nous utiliserons la convention suivante:","html":"<p>Nous étudierons des méthodes pour concevoir ces programmes. Dans la suite de ce document, nous utiliserons la convention suivante:</p>"},{"id":"text-4","type":"text","heading":"","plain_text":"les termes interprète de commande ou interprète décrivent l&#39;exécutable cmd.exe;\ndans les syntaxes de commande, le cadre des pièces avec les caractères [[[[ et ] sont facultatifs, le cadre des pièces avec les caractères &lt; et &gt; sont remplacés par différentes informations à fournir (celles-ci seront précises avec la syntaxe) et les parties encadrées avec les caractères  et  sont des parties à choix multiples o chaque choix est séparé des autres avec le caractère |.","html":"<p>les termes interprète de commande ou interprète décrivent l&#039;exécutable cmd.exe;\ndans les syntaxes de commande, le cadre des pièces avec les caractères [[[[ et ] sont facultatifs, le cadre des pièces avec les caractères &lt; et &gt; sont remplacés par différentes informations à fournir (celles-ci seront précises avec la syntaxe) et les parties encadrées avec les caractères  et  sont des parties à choix multiples o chaque choix est séparé des autres avec le caractère |.</p>"},{"id":"text-5","type":"text","heading":"","plain_text":"La convention syntaxique est la même que pour l&#39;aide en ligne de commande, ce qui facilitera votre compréhension.\nI-A. L&#39;éditeur de texte ▲","html":"<p>La convention syntaxique est la même que pour l&#039;aide en ligne de commande, ce qui facilitera votre compréhension.\nI-A. L&#039;éditeur de texte ▲</p>"},{"id":"text-6","type":"text","heading":"","plain_text":"Un simple éditeur de texte, tel que le bloc-notes fourni avec Windows, n’est pas pratique pour écrire des scripts batch. Pour exploiter pleinement les capacités de ces scripts, vous devez être en mesure de coder des caractères non anglais tels que des accents ou 砻 afin d&#39;accéder aux fichiers dont le nom contient ces types de caractères exotiques. La plupart des éditeurs de texte codent les fichiers avec le jeu de caractères ANSI correspondant à la langue d&#39;installation du système d&#39;exploitation, tandis que l&#39;interpréteur de commande utilise un temps de page de code (également appelé Page de code) en tant que CP-850, qui est le codage par défaut de l’interprète pour les systèmes Windows installés en français (France).\nSous Windows, vous disposez peut-être déjà d’un éditeur de texte, le Notepad ++ (la version 5.9.x ou une version ultérieure est nécessaire); si ce n&#39;est pas le cas, vous pouvez le télécharger ici: http://notepad-plus-plus.org/en/\nDans ce dernier cas, vous pourrez sélectionner le codage dans le menu Codage&gt; Codage de caractères, puis si vous voulez le français par exemple: sélectionnez Langues de l&#39;Europe de l&#39;Ouest&gt; OEM-850. Dans Notepad ++, le pages de code sont des appels OEM-XXX, au lieu de CP-XXX, mais ce sont les mêmes codages. Il convient également de noter que dans le même menu que OEM-850, il y a OEM-863: français; c&#39;est français, mais pour le Qubec. Cette manipulation sera effectuée pour que chaque script utilise l&#39;encodage correct. Il n&#39;est pas possible d&#39;effectuer cette opération automatiquement dans Notepad ++.","html":"<p>Un simple éditeur de texte, tel que le bloc-notes fourni avec Windows, n’est pas pratique pour écrire des scripts batch. Pour exploiter pleinement les capacités de ces scripts, vous devez être en mesure de coder des caractères non anglais tels que des accents ou 砻 afin d&#039;accéder aux fichiers dont le nom contient ces types de caractères exotiques. La plupart des éditeurs de texte codent les fichiers avec le jeu de caractères ANSI correspondant à la langue d&#039;installation du système d&#039;exploitation, tandis que l&#039;interpréteur de commande utilise un temps de page de code (également appelé Page de code) en tant que CP-850, qui est le codage par défaut de l’interprète pour les systèmes Windows installés en français (France).\nSous Windows, vous disposez peut-être déjà d’un éditeur de texte, le Notepad ++ (la version 5.9.x ou une version ultérieure est nécessaire); si ce n&#039;est pas le cas, vous pouvez le télécharger ici: http://notepad-plus-plus.org/en/\nDans ce dernier cas, vous pourrez sélectionner le codage dans le menu Codage&gt; Codage de caractères, puis si vous voulez le français par exemple: sélectionnez Langues de l&#039;Europe de l&#039;Ouest&gt; OEM-850. Dans Notepad ++, le pages de code sont des appels OEM-XXX, au lieu de CP-XXX, mais ce sont les mêmes codages. Il convient également de noter que dans le même menu que OEM-850, il y a OEM-863: français; c&#039;est français, mais pour le Qubec. Cette manipulation sera effectuée pour que chaque script utilise l&#039;encodage correct. Il n&#039;est pas possible d&#039;effectuer cette opération automatiquement dans Notepad ++.</p>"},{"id":"text-7","type":"text","heading":"","plain_text":"I-B. Encodage des caractères ▲","html":"<p>I-B. Encodage des caractères ▲</p>"},{"id":"text-8","type":"text","heading":"","plain_text":"La gestion des pages de code dans l&#39;interpréteur se fait via les commandes mode et chcp, ces commandes sont utilisées pour afficher le page de code utilisé ou le modifier en utilisant l’une des syntaxes suivantes.\nDéfinir les page de code  utiliser (o     est le nombre de page de code).\nmode chatte sélectionnez cp=&lt;XXX&gt;  \nchcp &lt;XXX&gt;  \nVoir la page de code utilisé.\nmode chatte cp [/status]  \nchcp \nLe tableau 1 fournit une liste non exhaustive des différents pages de code utilisé par l&#39;interpréteur de commandes.","html":"<p>La gestion des pages de code dans l&#039;interpréteur se fait via les commandes mode et chcp, ces commandes sont utilisées pour afficher le page de code utilisé ou le modifier en utilisant l’une des syntaxes suivantes.\nDéfinir les page de code  utiliser (o     est le nombre de page de code).\nmode chatte sélectionnez cp=&lt;XXX&gt;  \nchcp &lt;XXX&gt;  \nVoir la page de code utilisé.\nmode chatte cp [/status]  \nchcp \nLe tableau 1 fournit une liste non exhaustive des différents pages de code utilisé par l&#039;interpréteur de commandes.</p>"},{"id":"text-9","type":"text","heading":"","plain_text":"Page de code","html":"<p>Page de code</p>"},{"id":"text-10","type":"text","heading":"","plain_text":"La description","html":"<p>La description</p>"},{"id":"text-11","type":"text","heading":"","plain_text":"CP-437","html":"<p>CP-437</p>"},{"id":"text-12","type":"text","heading":"","plain_text":"pour le soutien des langues anglophones.","html":"<p>pour le soutien des langues anglophones.</p>"},{"id":"text-13","type":"text","heading":"","plain_text":"CP-720","html":"<p>CP-720</p>"},{"id":"text-14","type":"text","heading":"","plain_text":"pour le soutien des langues arabes.","html":"<p>pour le soutien des langues arabes.</p>"},{"id":"text-15","type":"text","heading":"","plain_text":"CP-737","html":"<p>CP-737</p>"},{"id":"text-16","type":"text","heading":"","plain_text":"pour le soutien du grec.","html":"<p>pour le soutien du grec.</p>"},{"id":"text-17","type":"text","heading":"","plain_text":"CP-775","html":"<p>CP-775</p>"},{"id":"text-18","type":"text","heading":"","plain_text":"pour le soutien des langues baltes.","html":"<p>pour le soutien des langues baltes.</p>"},{"id":"text-19","type":"text","heading":"","plain_text":"CP-850","html":"<p>CP-850</p>"},{"id":"text-20","type":"text","heading":"","plain_text":"pour la prise en charge des langues d&#39;Europe occidentale (mises à jour par le CP 858), y compris le français (France), mais également l&#39;allemand, le basque, le catalan, le danois, l&#39;espagnol, le finnois, l&#39;italien, le français espagnol, le norvégien, le portugais, le suédois, l&#39;afrikaans, le féroïen, Flamand et irlandais.","html":"<p>pour la prise en charge des langues d&#039;Europe occidentale (mises à jour par le CP 858), y compris le français (France), mais également l&#039;allemand, le basque, le catalan, le danois, l&#039;espagnol, le finnois, l&#039;italien, le français espagnol, le norvégien, le portugais, le suédois, l&#039;afrikaans, le féroïen, Flamand et irlandais.</p>"},{"id":"text-21","type":"text","heading":"","plain_text":"CP-852","html":"<p>CP-852</p>"},{"id":"text-22","type":"text","heading":"","plain_text":"pour le soutien des langues d&#39;Europe centrale.","html":"<p>pour le soutien des langues d&#039;Europe centrale.</p>"},{"id":"text-23","type":"text","heading":"","plain_text":"CP-855","html":"<p>CP-855</p>"},{"id":"text-24","type":"text","heading":"","plain_text":"pour le soutien de l&#39;alphabet cyrillique.","html":"<p>pour le soutien de l&#039;alphabet cyrillique.</p>"},{"id":"text-25","type":"text","heading":"","plain_text":"CP-857","html":"<p>CP-857</p>"},{"id":"text-26","type":"text","heading":"","plain_text":"pour le soutien du turc.","html":"<p>pour le soutien du turc.</p>"},{"id":"text-27","type":"text","heading":"","plain_text":"CP-858","html":"<p>CP-858</p>"},{"id":"text-28","type":"text","heading":"","plain_text":"pour le support des langues d&#39;Europe occidentale, y compris le français (France), il s&#39;agit d&#39;une mise à jour 1998 basée sur le CP-850 ou seul le symbole € a été ajouté au point de code 0xD5.","html":"<p>pour le support des langues d&#039;Europe occidentale, y compris le français (France), il s&#039;agit d&#039;une mise à jour 1998 basée sur le CP-850 ou seul le symbole € a été ajouté au point de code 0xD5.</p>"},{"id":"text-29","type":"text","heading":"","plain_text":"CP-861","html":"<p>CP-861</p>"},{"id":"text-30","type":"text","heading":"","plain_text":"pour le soutien de islandais.","html":"<p>pour le soutien de islandais.</p>"},{"id":"text-31","type":"text","heading":"","plain_text":"CP-863","html":"<p>CP-863</p>"},{"id":"text-32","type":"text","heading":"","plain_text":"pour le soutien du français (Qubec).","html":"<p>pour le soutien du français (Qubec).</p>"},{"id":"text-33","type":"text","heading":"","plain_text":"CP-864","html":"<p>CP-864</p>"},{"id":"text-34","type":"text","heading":"","plain_text":"pour le soutien des langues arabes.","html":"<p>pour le soutien des langues arabes.</p>"},{"id":"text-35","type":"text","heading":"","plain_text":"CP-866","html":"<p>CP-866</p>"},{"id":"text-36","type":"text","heading":"","plain_text":"pour le soutien de l&#39;alphabet cyrillique.","html":"<p>pour le soutien de l&#039;alphabet cyrillique.</p>"},{"id":"text-37","type":"text","heading":"","plain_text":"CP-869","html":"<p>CP-869</p>"},{"id":"text-38","type":"text","heading":"","plain_text":"pour le soutien du grec.","html":"<p>pour le soutien du grec.</p>"},{"id":"text-39","type":"text","heading":"","plain_text":"Tableau 1: page de code \nIl convient de noter que, malgré la mise à jour du CP-850 par le CP-858, le codage par défaut de l’interpréteur Windows installé en français (France) reste le CP-850. Il est donc préférable d&#39;utiliser le CP-850. La liste de pages de code supporté par un système Windows est disponible dans le registre sous la clé: HKLM  SYSTEM  CurrentControlSet  Control  Nls  CodePage. Vous remarquerez la présence de 1252 dans le mentionné précédemment, c&#39;est l&#39;encodage Windows-1252 utilisé par les API Windows et donc par la plupart des ordinateurs portables sur des systèmes installés en français (France); cependant, il n&#39;est pas recommandé de l&#39;utiliser dans l&#39;interpréteur de commandes car les commandes ne sont pas faites pour le prendre en charge, cela peut même causer des bogues dans certains cas. Le codage par défaut pour l&#39;interpréteur peut être trouvé via la valeur OEMCP De type REG_SZ toujours dans ce qui est mentionné ci-dessus.\nIl est possible d&#39;ajouter Pages de code manquant (par défaut, seulement pages de code sont disponibles) en installant le pack de langue correspondant au codage souhaité. Chaque module linguistique comprend une table de conversion qui permet à Windows de convertir un point de code en une représentation graphique et de l’afficher. Il est également possible d’utiliser Unicode (UCS-2 uniquement) avec la sortie de commande interne de l’interpréteur pour permettre une interaction avec les programmes utilisant le langage Unicode natif (pour Perl par exemple) en appelant l’interprète via la commande suivante (o     est la commande à exécuter).\ncmd / u &lt;ordre&gt;  \nDans Notepad ++, vous pouvez ajouter les caractères manquants au clavier via le menu Edition&gt; Panneau de caractères ASCII, puis double-cliquez sur le caractère souhaité.","html":"<p>Tableau 1: page de code \nIl convient de noter que, malgré la mise à jour du CP-850 par le CP-858, le codage par défaut de l’interpréteur Windows installé en français (France) reste le CP-850. Il est donc préférable d&#039;utiliser le CP-850. La liste de pages de code supporté par un système Windows est disponible dans le registre sous la clé: HKLM  SYSTEM  CurrentControlSet  Control  Nls  CodePage. Vous remarquerez la présence de 1252 dans le mentionné précédemment, c&#039;est l&#039;encodage Windows-1252 utilisé par les API Windows et donc par la plupart des ordinateurs portables sur des systèmes installés en français (France); cependant, il n&#039;est pas recommandé de l&#039;utiliser dans l&#039;interpréteur de commandes car les commandes ne sont pas faites pour le prendre en charge, cela peut même causer des bogues dans certains cas. Le codage par défaut pour l&#039;interpréteur peut être trouvé via la valeur OEMCP De type REG_SZ toujours dans ce qui est mentionné ci-dessus.\nIl est possible d&#039;ajouter Pages de code manquant (par défaut, seulement pages de code sont disponibles) en installant le pack de langue correspondant au codage souhaité. Chaque module linguistique comprend une table de conversion qui permet à Windows de convertir un point de code en une représentation graphique et de l’afficher. Il est également possible d’utiliser Unicode (UCS-2 uniquement) avec la sortie de commande interne de l’interpréteur pour permettre une interaction avec les programmes utilisant le langage Unicode natif (pour Perl par exemple) en appelant l’interprète via la commande suivante (o     est la commande à exécuter).\ncmd / u &lt;ordre&gt;  \nDans Notepad ++, vous pouvez ajouter les caractères manquants au clavier via le menu Edition&gt; Panneau de caractères ASCII, puis double-cliquez sur le caractère souhaité.</p>"},{"id":"text-40","type":"text","heading":"","plain_text":"I-C. Bonjour le monde ▲","html":"<p>I-C. Bonjour le monde ▲</p>"},{"id":"text-41","type":"text","heading":"","plain_text":"Nous allons commencer par le monde traditionnel hello, voici le code (Script 1). Copiez le code dans Notepad ++, puis enregistrez-le avec l&#39;encodage OEM-850 et l&#39;extension .bat ou .cmd (uniquement sur les systèmes Vista et supérieurs).","html":"<p>Nous allons commencer par le monde traditionnel hello, voici le code (Script 1). Copiez le code dans Notepad ++, puis enregistrez-le avec l&#039;encodage OEM-850 et l&#039;extension .bat ou .cmd (uniquement sur les systèmes Vista et supérieurs).</p>"},{"id":"text-42","type":"text","heading":"","plain_text":"La différence entre le fichier .bat et le fichier .cmd réside dans l&#39;interpréteur de commandes. En fait, sur les systèmes Windows XP, il existait deux interpréteurs de commandes: cmd.exe et COMMAND.COM. Les fichiers avec l&#39;extension .bat ont été gérés par cmd.exe et les fichiers avec l&#39;extension .cmd ont été gérés par COMMAND.COM, les deux types de fichiers ayant des spécificités différentes. Cependant, sous Windows Vista et au-dessus, il ne reste que cmd.exe. Tous les scripts .bat et .cmd sont exécutés par cmd.exe et ont les mêmes spécificités.","html":"<p>La différence entre le fichier .bat et le fichier .cmd réside dans l&#039;interpréteur de commandes. En fait, sur les systèmes Windows XP, il existait deux interpréteurs de commandes: cmd.exe et COMMAND.COM. Les fichiers avec l&#039;extension .bat ont été gérés par cmd.exe et les fichiers avec l&#039;extension .cmd ont été gérés par COMMAND.COM, les deux types de fichiers ayant des spécificités différentes. Cependant, sous Windows Vista et au-dessus, il ne reste que cmd.exe. Tous les scripts .bat et .cmd sont exécutés par cmd.exe et ont les mêmes spécificités.</p>"},{"id":"text-43","type":"text","heading":"","plain_text":"1.234567.89\n@écho de\ncls","html":"<p>1.234567.89\n@écho de\ncls</p>"},{"id":"text-44","type":"text","heading":"","plain_text":"écho Bonjour Monde !!!! Dj l ?\nécho.\npause","html":"<p>écho Bonjour Monde !!!! Dj l ?\nécho.\npause</p>"},{"id":"text-45","type":"text","heading":"","plain_text":"Lorsque nous exécutons ce script en cliquant dessus, nous obtenons l&#39;affichage suivant.","html":"<p>Lorsque nous exécutons ce script en cliquant dessus, nous obtenons l&#039;affichage suivant.</p>"},{"id":"text-46","type":"text","heading":"","plain_text":"Regardons la composition du script 1. La première ligne, @Écho off, est déjà intéressant, il est composé:","html":"<p>Regardons la composition du script 1. La première ligne, @Écho off, est déjà intéressant, il est composé:</p>"},{"id":"text-47","type":"text","heading":"","plain_text":"préfixe @ qui sert à inverser l&#39;état de l&#39;affichage standard;\nde la commande écho qui est utilisé pour gérer l&#39;affichage sur la ligne de commande;\net le paramètre de qui sert à désactiver la vue standard.","html":"<p>préfixe @ qui sert à inverser l&#039;état de l&#039;affichage standard;\nde la commande écho qui est utilisé pour gérer l&#039;affichage sur la ligne de commande;\net le paramètre de qui sert à désactiver la vue standard.</p>"},{"id":"text-48","type":"text","heading":"","plain_text":"L’affichage standard définit ce que l’interpréteur de commandes affiche par défaut. Par exemple, lors du lancement de l&#39;interpréteur de commande ci-dessous; la vue standard renvoie le chemin du répertoire en cours, soit C:  Utilisateurs  Portable&gt;.","html":"<p>L’affichage standard définit ce que l’interpréteur de commandes affiche par défaut. Par exemple, lors du lancement de l&#039;interpréteur de commande ci-dessous; la vue standard renvoie le chemin du répertoire en cours, soit C:  Utilisateurs  Portable&gt;.</p>"},{"id":"text-49","type":"text","heading":"","plain_text":"Lors de l&#39;exécution d&#39;un script, la vue par défaut renvoie, par défaut, le chemin d&#39;accès du répertoire actuel, suivi de l&#39;exécution de la commande, comme dans l&#39;exemple ci-dessous.","html":"<p>Lors de l&#039;exécution d&#039;un script, la vue par défaut renvoie, par défaut, le chemin d&#039;accès du répertoire actuel, suivi de l&#039;exécution de la commande, comme dans l&#039;exemple ci-dessous.</p>"},{"id":"text-50","type":"text","heading":"","plain_text":"Le préfixe @, lorsqu&#39;il est placé en début de ligne, sert à inverser l&#39;état de l&#39;affichage standard (activé ou désactivé) pour l&#39;exécution de la commande qui le suit (pas seulement pour la commande écho). Ce comportement se termine lorsque la commande est exécutée. Donc la commande @cd / d &quot;C:  Users  Portable &quot; ne sera affiché que si l&#39;affichage standard est désactivé. La syntaxe du préfixe @ est la suivante (o     est la commande à exécuter):\n@&lt;ordre&gt;  \nLa commande écho Verts l&#39;affichage dans l&#39;interprète, il peut:","html":"<p>Le préfixe @, lorsqu&#039;il est placé en début de ligne, sert à inverser l&#039;état de l&#039;affichage standard (activé ou désactivé) pour l&#039;exécution de la commande qui le suit (pas seulement pour la commande écho). Ce comportement se termine lorsque la commande est exécutée. Donc la commande @cd / d &quot;C:  Users  Portable &quot; ne sera affiché que si l&#039;affichage standard est désactivé. La syntaxe du préfixe @ est la suivante (o     est la commande à exécuter):\n@&lt;ordre&gt;  \nLa commande écho Verts l&#039;affichage dans l&#039;interprète, il peut:</p>"},{"id":"text-51","type":"text","heading":"","plain_text":"changer le statut de l&#39;affichage standard;\nafficher l&#39;état de l&#39;affichage standard;\nafficher un message ou une ligne vide dans l&#39;interprète.","html":"<p>changer le statut de l&#039;affichage standard;\nafficher l&#039;état de l&#039;affichage standard;\nafficher un message ou une ligne vide dans l&#039;interprète.</p>"},{"id":"text-52","type":"text","heading":"","plain_text":"La désactivation de l&#39;affichage standard peut s&#39;effectuer via la syntaxe suivante (uniquement les erreurs et les messages de la commande écho sont affichés).\nécho de  \nActiver l&#39;affichage standard peut être effectué via la syntaxe suivante (tout est affiché).\nécho nous \nUtiliser sans paramètres, la commande écho renvoie le statut de la vue standard actuelle.\nécho  \nSi nous répétons le script 1, la ligne @Écho off pour désactiver la vue standard sans que la commande soit affichée. Sur la deuxième ligne du script 1, la commande cls est utilisé pour vider la fenêtre de l’interprète de son contenu, cette commande ne prend aucun paramètre. Sa syntaxe est donc la suivante.\ncls \nLa ligne suivante du script 1 est vide, elle ne sera donc pas prise en compte lors de l&#39;exécution du script, ce qui le rendra plus lisible. La quatrième ligne est composée de la commande rem et une chaîne de caractères, cette commande vous permet d’insérer des remarques dans votre script. Si et seulement si l&#39;affichage standard est activé, la commande rem sera affiché. La syntaxe de la commande rem est la suivante (o     est la chaîne de caractères insérée dans la remarque).\nLa cinquième ligne du script 1, :: Ceci est un commentaire., est composé du préfixe :: et une chaîne de caractères. Le préfixe :: définit la chaîne de caractères qui la suit sous forme de commentaire; ce comportement se termine sur la première ligne de retour. Indépendamment de l’état de l’affichage standard, la chaîne de caractères précédée du préfixe :: ne sera pas affiché. La syntaxe est la suivante (o     est le commentaire inséré).\nSuit une autre ligne vide puis la commande echo Hello World !!!! Dj l? qui affiche Bonjour Monde !!!! Dj l? dans la fenêtre de l&#39;interprète. La syntaxe suivante vous permet d’afficher un message même si l’affichage standard est désactivé (o     est le message d’affichage).\nécho &lt;message&gt;  \nPuis vient la commande écho. ce qui permet d&#39;afficher la ligne vide que l&#39;on voit dans l&#39;affichage obtenu. Si un point suit directement la commande écho et qu&#39;après le point il y a un retour de la ligne, celle-ci affiche une ligne vide.\nécho.  \nSur la ligne suivante se trouve la commande pause qui met en pause l&#39;exécution du script jusqu&#39;à ce que l&#39;utilisateur appuie sur une touche du clavier, il affiche le message Appuyez sur une touche pour continuer &#8230; (quel que soit l&#39;état actuel de la vue standard) et ne prend aucun paramètre. En script 1, cette commande permet de visualiser le contenu de la fenêtre de l&#39;interpréteur avant la fermeture de celle-ci.\npause","html":"<p>La désactivation de l&#039;affichage standard peut s&#039;effectuer via la syntaxe suivante (uniquement les erreurs et les messages de la commande écho sont affichés).\nécho de  \nActiver l&#039;affichage standard peut être effectué via la syntaxe suivante (tout est affiché).\nécho nous \nUtiliser sans paramètres, la commande écho renvoie le statut de la vue standard actuelle.\nécho  \nSi nous répétons le script 1, la ligne @Écho off pour désactiver la vue standard sans que la commande soit affichée. Sur la deuxième ligne du script 1, la commande cls est utilisé pour vider la fenêtre de l’interprète de son contenu, cette commande ne prend aucun paramètre. Sa syntaxe est donc la suivante.\ncls \nLa ligne suivante du script 1 est vide, elle ne sera donc pas prise en compte lors de l&#039;exécution du script, ce qui le rendra plus lisible. La quatrième ligne est composée de la commande rem et une chaîne de caractères, cette commande vous permet d’insérer des remarques dans votre script. Si et seulement si l&#039;affichage standard est activé, la commande rem sera affiché. La syntaxe de la commande rem est la suivante (o     est la chaîne de caractères insérée dans la remarque).\nLa cinquième ligne du script 1, :: Ceci est un commentaire., est composé du préfixe :: et une chaîne de caractères. Le préfixe :: définit la chaîne de caractères qui la suit sous forme de commentaire; ce comportement se termine sur la première ligne de retour. Indépendamment de l’état de l’affichage standard, la chaîne de caractères précédée du préfixe :: ne sera pas affiché. La syntaxe est la suivante (o     est le commentaire inséré).\nSuit une autre ligne vide puis la commande echo Hello World !!!! Dj l? qui affiche Bonjour Monde !!!! Dj l? dans la fenêtre de l&#039;interprète. La syntaxe suivante vous permet d’afficher un message même si l’affichage standard est désactivé (o     est le message d’affichage).\nécho &lt;message&gt;  \nPuis vient la commande écho. ce qui permet d&#039;afficher la ligne vide que l&#039;on voit dans l&#039;affichage obtenu. Si un point suit directement la commande écho et qu&#039;après le point il y a un retour de la ligne, celle-ci affiche une ligne vide.\nécho.  \nSur la ligne suivante se trouve la commande pause qui met en pause l&#039;exécution du script jusqu&#039;à ce que l&#039;utilisateur appuie sur une touche du clavier, il affiche le message Appuyez sur une touche pour continuer &#8230; (quel que soit l&#039;état actuel de la vue standard) et ne prend aucun paramètre. En script 1, cette commande permet de visualiser le contenu de la fenêtre de l&#039;interpréteur avant la fermeture de celle-ci.\npause</p>"},{"id":"text-53","type":"text","heading":"","plain_text":"I-D. Différence entre la commande rem et le préfixe :: ▲","html":"<p>I-D. Différence entre la commande rem et le préfixe :: ▲</p>"},{"id":"text-54","type":"text","heading":"","plain_text":"Pour mieux comprendre la différence entre la commande rem et le préfixe ::, essayons le script 2.","html":"<p>Pour mieux comprendre la différence entre la commande rem et le préfixe ::, essayons le script 2.</p>"},{"id":"text-55","type":"text","heading":"","plain_text":"1.234567.\ncls","html":"<p>1.234567.\ncls</p>"},{"id":"text-56","type":"text","heading":"","plain_text":"@écho de","html":"<p>@écho de</p>"},{"id":"text-57","type":"text","heading":"","plain_text":"pause","html":"<p>pause</p>"},{"id":"text-58","type":"text","heading":"","plain_text":"Comme vous le voyez dans la vue script 2, la commande Rem Note 1, est présente l&#39;encoche; Lorsque l’écran standard est activé, toutes les commandes affichées sont affichées. La chaine :: Commentaire 1 n&#39;est pas affiché, cela est dû au fait que le préfixe :: n&#39;est pas une commande et n&#39;est donc pas renvoyé par la vue standard. Puis vient la commande @Écho off qui désactive l’affichage standard sans afficher la commande, suivi de la commande Rem Note 2 qui ne s&#39;affiche pas (l&#39;affichage standard est jusqu&#39;à présent désactivé), ni la chaîne :: commentaire 2 ce qui est en tout cas exclu par l&#39;affichage standard.","html":"<p>Comme vous le voyez dans la vue script 2, la commande Rem Note 1, est présente l&#039;encoche; Lorsque l’écran standard est activé, toutes les commandes affichées sont affichées. La chaine :: Commentaire 1 n&#039;est pas affiché, cela est dû au fait que le préfixe :: n&#039;est pas une commande et n&#039;est donc pas renvoyé par la vue standard. Puis vient la commande @Écho off qui désactive l’affichage standard sans afficher la commande, suivi de la commande Rem Note 2 qui ne s&#039;affiche pas (l&#039;affichage standard est jusqu&#039;à présent désactivé), ni la chaîne :: commentaire 2 ce qui est en tout cas exclu par l&#039;affichage standard.</p>"},{"id":"text-59","type":"text","heading":"","plain_text":"C&#39;EST À DIRE. Le personnage s&#39;échappe","html":"<p>C&#039;EST À DIRE. Le personnage s&#039;échappe</p>"},{"id":"text-60","type":"text","heading":"","plain_text":"Les caractères spéciaux (également appelés caractères mta) sont des caractères qui ont une signification particulière pour l&#39;interpréteur de commandes. Chaque fois que l&#39;interprète les rencontre, il leur applique le traitement correspondant, indépendamment de leur position dans la ligne de commande. Voici la liste:\nEt | ^ &lt; &gt; ()  \nPour pouvoir les utiliser dans une chaîne de caractères, vous devez les échapper avec le caractère ^c&#39;est-à-dire, mettez ce personnage devant lui. Ainsi, l&#39;interprète saura qu&#39;ils font partie d&#39;une chaîne et qu&#39;ils n&#39;ont rien à voir avec la commande. Voir le script 3 à titre d&#39;exemple.","html":"<p>Les caractères spéciaux (également appelés caractères mta) sont des caractères qui ont une signification particulière pour l&#039;interpréteur de commandes. Chaque fois que l&#039;interprète les rencontre, il leur applique le traitement correspondant, indépendamment de leur position dans la ligne de commande. Voici la liste:\nEt | ^ &lt; &gt; ()  \nPour pouvoir les utiliser dans une chaîne de caractères, vous devez les échapper avec le caractère ^c&#039;est-à-dire, mettez ce personnage devant lui. Ainsi, l&#039;interprète saura qu&#039;ils font partie d&#039;une chaîne et qu&#039;ils n&#039;ont rien à voir avec la commande. Voir le script 3 à titre d&#039;exemple.</p>"},{"id":"text-61","type":"text","heading":"","plain_text":"1.23\n@écho de\nécho ^Et ^| ^^ ^&lt; ^&gt; ^ (^)\npause","html":"<p>1.23\n@écho de\nécho ^Et ^| ^^ ^&lt; ^&gt; ^ (^)\npause</p>"},{"id":"text-62","type":"text","heading":"","plain_text":"Il convient également de noter que d&#39;autres caractères peuvent nécessiter une évasion, mais ils suivent d&#39;autres règles. Le personnage % doit être caché par lui-même pour être considéré comme faisant partie d&#39;une chaîne lorsqu&#39;il est utilisé dans un script, comme indiqué dans le script 4.","html":"<p>Il convient également de noter que d&#039;autres caractères peuvent nécessiter une évasion, mais ils suivent d&#039;autres règles. Le personnage % doit être caché par lui-même pour être considéré comme faisant partie d&#039;une chaîne lorsqu&#039;il est utilisé dans un script, comme indiqué dans le script 4.</p>"},{"id":"text-63","type":"text","heading":"","plain_text":"1.23\n@écho de\nécho %%\npause","html":"<p>1.23\n@écho de\nécho %%\npause</p>"},{"id":"text-64","type":"text","heading":"","plain_text":"Un autre cas est note, il concerne les personnages &quot; et  qui doit être échappé avec le personnage  lorsqu&#39;il est utilisé dans un paramètre cité. Dans le script 5, si les personnages &quot; et  n&#39;avait pas été manqué, le résultat ne serait pas celui attendu. L&#39;interprète aurait compris qu&#39;il y avait une chaîne bloc-notes &quot;cmd / c&quot; et une chaine &quot;% CD%  ~% nx0&quot; &quot;, ce qui aurait entraîné une erreur dans l’évaluation de la commande.","html":"<p>Un autre cas est note, il concerne les personnages &quot; et  qui doit être échappé avec le personnage  lorsqu&#039;il est utilisé dans un paramètre cité. Dans le script 5, si les personnages &quot; et  n&#039;avait pas été manqué, le résultat ne serait pas celui attendu. L&#039;interprète aurait compris qu&#039;il y avait une chaîne bloc-notes &quot;cmd / c&quot; et une chaine &quot;% CD%  ~% nx0&quot; &quot;, ce qui aurait entraîné une erreur dans l’évaluation de la commande.</p>"},{"id":"text-65","type":"text","heading":"","plain_text":"1.23\n@écho de\ncourir comme / Utilisateur:% Nom d&#39;utilisateur% &quot;cmd / c  &quot;bloc-notes &quot;%CD%\\% ~ Nx0 &quot;&quot;\npause","html":"<p>1.23\n@écho de\ncourir comme / Utilisateur:% Nom d&#039;utilisateur% &quot;cmd / c  &quot;bloc-notes &quot;%CD%\\% ~ Nx0 &quot;&quot;\npause</p>"},{"id":"text-66","type":"text","heading":"","plain_text":"Caractère d&#39;échappement ^ peut également être utilisé pour écrire une même commande sur plusieurs lignes. Quand l&#39;interprète rencontre le personnage ^ devant un retour à la ligne, il supprime ce caractère et renvoie la ligne, puis continue à lire les données fournies à la ligne suivante. Exemple avec le script 6.","html":"<p>Caractère d&#039;échappement ^ peut également être utilisé pour écrire une même commande sur plusieurs lignes. Quand l&#039;interprète rencontre le personnage ^ devant un retour à la ligne, il supprime ce caractère et renvoie la ligne, puis continue à lire les données fournies à la ligne suivante. Exemple avec le script 6.</p>"},{"id":"text-67","type":"text","heading":"","plain_text":"1.234\n@écho de\nécho foo ^\nbar\npause","html":"<p>1.234\n@écho de\nécho foo ^\nbar\npause</p>"},{"id":"text-68","type":"text","heading":"","plain_text":"D&#39;autres échappements existent, mais ils seront abordés plus tard dans ce document, car ils appliquent des ordres précis et ne concernent pas les autres. Par exemple, la commande écho qui considère le point comme une évasion de la chaîne qui le suit. Quand la commande écho est directement suivie d’un point; elle considère la chaîne située après le point comme un affichage de la chaîne et renvoie la ligne incluse. Cela vous permet d’utiliser un mot au début de la chaîne qui aurait autrement été considéré comme un paramètre. Exemple avec le script 7.","html":"<p>D&#039;autres échappements existent, mais ils seront abordés plus tard dans ce document, car ils appliquent des ordres précis et ne concernent pas les autres. Par exemple, la commande écho qui considère le point comme une évasion de la chaîne qui le suit. Quand la commande écho est directement suivie d’un point; elle considère la chaîne située après le point comme un affichage de la chaîne et renvoie la ligne incluse. Cela vous permet d’utiliser un mot au début de la chaîne qui aurait autrement été considéré comme un paramètre. Exemple avec le script 7.</p>"},{"id":"text-69","type":"text","heading":"","plain_text":"1.234567.89dix.11121314151617181920212223242526\n@écho de","html":"<p>1.234567.89dix.11121314151617181920212223242526\n@écho de</p>"},{"id":"text-70","type":"text","heading":"","plain_text":"écho Afficher une ligne vide sans le point:\nécho","html":"<p>écho Afficher une ligne vide sans le point:\nécho</p>"},{"id":"text-71","type":"text","heading":"","plain_text":"écho.\nécho.","html":"<p>écho.\nécho.</p>"},{"id":"text-72","type":"text","heading":"","plain_text":"écho Afficher une ligne vide avec le point:\nécho.","html":"<p>écho Afficher une ligne vide avec le point:\nécho.</p>"},{"id":"text-73","type":"text","heading":"","plain_text":"écho.\nécho.","html":"<p>écho.\nécho.</p>"},{"id":"text-74","type":"text","heading":"","plain_text":"écho Affichage de la chaîne &quot;/?  Impression cette aide. &quot;sans le point:\nécho     /?  Impression cette aide.","html":"<p>écho Affichage de la chaîne &quot;/?  Impression cette aide. &quot;sans le point:\nécho     /?  Impression cette aide.</p>"},{"id":"text-75","type":"text","heading":"","plain_text":"écho.\nécho.","html":"<p>écho.\nécho.</p>"},{"id":"text-76","type":"text","heading":"","plain_text":"écho Affichage de la chaîne &quot;/?  Impression cette aide. &quot;avec le point:\nécho.    /?  Impression cette aide.","html":"<p>écho Affichage de la chaîne &quot;/?  Impression cette aide. &quot;avec le point:\nécho.    /?  Impression cette aide.</p>"},{"id":"text-77","type":"text","heading":"","plain_text":"écho.\nécho.\npause","html":"<p>écho.\nécho.\npause</p>"},{"id":"text-78","type":"text","heading":"","plain_text":"Dans l&#39;affichage ci-dessous, nous remarquons que l&#39;affichage d&#39;une ligne vide sans point renvoie l&#39;état de l&#39;affichage standard contrairement à celui avec un point. Si l&#39;emplacement d&#39;une ligne de retour avait été utilisé par plusieurs espaces, le résultat aurait été identique, quel que soit le nombre d&#39;espaces. En effet, l&#39;interprète n&#39;évalue pas le nombre d&#39;espaces entre deux composants d&#39;une ligne de commande, il aurait donc considéré qu&#39;aucun paramètre n&#39;était fourni. C&#39;est la même chose avec la chaîne /? Imprimer cette aide., l&#39;interprète considère la sous-chaîne /? en tant que paramètre qui affiche l&#39;aide dans la ligne de commande.","html":"<p>Dans l&#039;affichage ci-dessous, nous remarquons que l&#039;affichage d&#039;une ligne vide sans point renvoie l&#039;état de l&#039;affichage standard contrairement à celui avec un point. Si l&#039;emplacement d&#039;une ligne de retour avait été utilisé par plusieurs espaces, le résultat aurait été identique, quel que soit le nombre d&#039;espaces. En effet, l&#039;interprète n&#039;évalue pas le nombre d&#039;espaces entre deux composants d&#039;une ligne de commande, il aurait donc considéré qu&#039;aucun paramètre n&#039;était fourni. C&#039;est la même chose avec la chaîne /? Imprimer cette aide., l&#039;interprète considère la sous-chaîne /? en tant que paramètre qui affiche l&#039;aide dans la ligne de commande.</p>"},{"id":"text-79","type":"text","heading":"","plain_text":"Le tableau 2 résume les différents types d’échappement que nous venons de voir.","html":"<p>Le tableau 2 résume les différents types d’échappement que nous venons de voir.</p>"},{"id":"text-80","type":"text","heading":"","plain_text":"échappement","html":"<p>échappement</p>"},{"id":"text-81","type":"text","heading":"","plain_text":"La description","html":"<p>La description</p>"},{"id":"text-82","type":"text","heading":"","plain_text":"^","html":"<p>^</p>"},{"id":"text-83","type":"text","heading":"","plain_text":"Plac devant l&#39;un des caractères spéciaux, soit &amp; ^ | &lt;&gt; ()cela signifie que le caractère qui le suit fait partie de la chaîne et n&#39;a rien à voir avec la commande.","html":"<p>Plac devant l&#039;un des caractères spéciaux, soit &amp; ^ | &lt;&gt; ()cela signifie que le caractère qui le suit fait partie de la chaîne et n&#039;a rien à voir avec la commande.</p>"},{"id":"text-84","type":"text","heading":"","plain_text":"Plac devant une ligne de retour, cela signifie que la ligne suivante fait partie de la même commande.","html":"<p>Plac devant une ligne de retour, cela signifie que la ligne suivante fait partie de la même commande.</p>"},{"id":"text-85","type":"text","heading":"","plain_text":"%","html":"<p>%</p>"},{"id":"text-86","type":"text","heading":"","plain_text":"Plac devant le personnage % dans un script, cela signifie que le caractère qui le suit fait partie de la chaîne.","html":"<p>Plac devant le personnage % dans un script, cela signifie que le caractère qui le suit fait partie de la chaîne.</p>"},{"id":"text-87","type":"text","heading":"","plain_text":"Plac devant l&#39;un des personnages  et &quot; dans un paramètre cité, cela signifie que le caractère qui le suit fait partie de l&#39;argument cité.","html":"<p>Plac devant l&#039;un des personnages  et &quot; dans un paramètre cité, cela signifie que le caractère qui le suit fait partie de l&#039;argument cité.</p>"},{"id":"text-88","type":"text","heading":"","plain_text":".","html":"<p>.</p>"},{"id":"text-89","type":"text","heading":"","plain_text":"Plac immédiatement après la commande écho, cela signifie que la chaîne qui suit est une chaîne d&#39;affichage et non un paramètre de la commande écho.","html":"<p>Plac immédiatement après la commande écho, cela signifie que la chaîne qui suit est une chaîne d&#039;affichage et non un paramètre de la commande écho.</p>"},{"id":"text-90","type":"text","heading":"","plain_text":"Tableau 2: Échappement","html":"<p>Tableau 2: Échappement</p>"},{"id":"text-91","type":"text","heading":"","plain_text":"SI. Les bugs de la commande rem et du préfixe :: ▲","html":"<p>SI. Les bugs de la commande rem et du préfixe :: ▲</p>"},{"id":"text-92","type":"text","heading":"","plain_text":"Un problème récurrent dans script de batch est-ce que des commentaires et des commentaires (fournis via rem et ::) causer des bugs dus à une mauvaise utilisation. La commande rem et le préfixe :: en prenant une chaîne de caractères comme paramètres, ils attendent une chaîne de caractères valide. Ainsi, les échappements doivent être utilisés pour les caractères suivants: &amp; | ^ < > ()%.","html":"<p>Un problème récurrent dans script de batch est-ce que des commentaires et des commentaires (fournis via rem et ::) causer des bugs dus à une mauvaise utilisation. La commande rem et le préfixe :: en prenant une chaîne de caractères comme paramètres, ils attendent une chaîne de caractères valide. Ainsi, les échappements doivent être utilisés pour les caractères suivants: &amp; | ^ &lt; &gt; ()%.</p>"},{"id":"text-93","type":"text","heading":"","plain_text":"Les variables sont gérées via la commande ensemble, il existe deux types dont voici la liste:","html":"<p>Les variables sont gérées via la commande ensemble, il existe deux types dont voici la liste:</p>"},{"id":"text-94","type":"text","heading":"","plain_text":"variables de chaîne de caractères;\nnombre entier signe de variables.","html":"<p>variables de chaîne de caractères;\nnombre entier signe de variables.</p>"},{"id":"text-95","type":"text","heading":"","plain_text":"Chaque type de variable est déclaré et marqué différemment; il est possible de les couler, c&#39;est-à-dire de les passer d&#39;un type à l&#39;autre, à condition de respecter les règles suivantes:","html":"<p>Chaque type de variable est déclaré et marqué différemment; il est possible de les couler, c&#039;est-à-dire de les passer d&#039;un type à l&#039;autre, à condition de respecter les règles suivantes:</p>"},{"id":"text-96","type":"text","heading":"","plain_text":"une chaîne de caractères qui ne peut être numérique que si elle ne contient que des nombres;\nun nombre peut toujours être transtyp en une chaîne de caractères (qui ne contiendra que des nombres).","html":"<p>une chaîne de caractères qui ne peut être numérique que si elle ne contient que des nombres;\nun nombre peut toujours être transtyp en une chaîne de caractères (qui ne contiendra que des nombres).</p>"},{"id":"text-97","type":"text","heading":"","plain_text":"Les variables sont accessibles via un identifiant qui leur est propre. Ainsi, chaque fois que cet identifiant est mentionné, l&#39;interpréteur pourra fournir la valeur associée. Cela peut être fait en utilisant le personnage % des deux côtés de l&#39;identifiant, on parle d&#39;expansion de la variable. Par exemple avec la variable CHEMIN (qui est une variable d’environnement: fournie par le système), pour obtenir sa valeur; la syntaxe doit être utilisée % CHEMIN% comme dans le script 8.","html":"<p>Les variables sont accessibles via un identifiant qui leur est propre. Ainsi, chaque fois que cet identifiant est mentionné, l&#039;interpréteur pourra fournir la valeur associée. Cela peut être fait en utilisant le personnage % des deux côtés de l&#039;identifiant, on parle d&#039;expansion de la variable. Par exemple avec la variable CHEMIN (qui est une variable d’environnement: fournie par le système), pour obtenir sa valeur; la syntaxe doit être utilisée % CHEMIN% comme dans le script 8.</p>"},{"id":"text-98","type":"text","heading":"","plain_text":"1.23\n@écho de\nécho % CHEMIN%\npause","html":"<p>1.23\n@écho de\nécho % CHEMIN%\npause</p>"},{"id":"text-99","type":"text","heading":"","plain_text":"Ce qui produirait un affichage similaire à celui ci-dessous.","html":"<p>Ce qui produirait un affichage similaire à celui ci-dessous.</p>"},{"id":"text-100","type":"text","heading":"","plain_text":"Les identificateurs de variable ne sont pas sensibles à la casse, c&#39;est-à-dire que l&#39;interpréteur ne fait pas la différence entre les majuscules et les minuscules lorsqu&#39;il développe, crée ou modifie une variable. Donc les identifiants CHEMIN, Chemin et chemin identifier une seule et même variable.\nII-A. Variables d&#39;environnement ▲","html":"<p>Les identificateurs de variable ne sont pas sensibles à la casse, c&#039;est-à-dire que l&#039;interpréteur ne fait pas la différence entre les majuscules et les minuscules lorsqu&#039;il développe, crée ou modifie une variable. Donc les identifiants CHEMIN, Chemin et chemin identifier une seule et même variable.\nII-A. Variables d&#039;environnement ▲</p>"},{"id":"text-101","type":"text","heading":"","plain_text":"Nous allons commencer par les variables d’environnement, elles sont toutes de type string. C&#39;est le système d&#39;exploitation qui définit leurs valeurs, soit parce que d&#39;un système à l&#39;autre, leurs valeurs peuvent être différentes, soit parce que ces variables sont définies de manière dynamique au fur et à mesure de leur développement. Cela permet d’accéder à des fichiers dont le chemin d’accès peut ne pas être identique d’une machine à l’autre ou d’obtenir, par exemple, l’heure ou la date dont les valeurs sont modifiées de façon permanente.\nDans le tableau 3, vous trouverez la liste de ces variables. Dans la première colonne, vous trouverez le nom de ces variables. ces noms sont réservés par le système et même s&#39;il est possible de changer leur valeur lors de l&#39;exécution du script, les modifications apportées prendront fin en même temps que le script. De plus, dans certains cas, la modification de leur valeur peut amener le script à mal évaluer l&#39;environnement. La deuxième colonne donne la description de la valeur renvoyée par la variable. Et enfin, la troisième colonne donne la compatibilité en fonction de la version du système. Dans cette colonne, les systèmes NT sont mentionnés, il s&#39;agit de la famille du système d&#39;exploitation. Les systèmes NT sont des systèmes basés sur un noyau de type NT à partir du système Windows du même nom. Cette famille comprend le jour où ces lignes sont écrites:","html":"<p>Nous allons commencer par les variables d’environnement, elles sont toutes de type string. C&#039;est le système d&#039;exploitation qui définit leurs valeurs, soit parce que d&#039;un système à l&#039;autre, leurs valeurs peuvent être différentes, soit parce que ces variables sont définies de manière dynamique au fur et à mesure de leur développement. Cela permet d’accéder à des fichiers dont le chemin d’accès peut ne pas être identique d’une machine à l’autre ou d’obtenir, par exemple, l’heure ou la date dont les valeurs sont modifiées de façon permanente.\nDans le tableau 3, vous trouverez la liste de ces variables. Dans la première colonne, vous trouverez le nom de ces variables. ces noms sont réservés par le système et même s&#039;il est possible de changer leur valeur lors de l&#039;exécution du script, les modifications apportées prendront fin en même temps que le script. De plus, dans certains cas, la modification de leur valeur peut amener le script à mal évaluer l&#039;environnement. La deuxième colonne donne la description de la valeur renvoyée par la variable. Et enfin, la troisième colonne donne la compatibilité en fonction de la version du système. Dans cette colonne, les systèmes NT sont mentionnés, il s&#039;agit de la famille du système d&#039;exploitation. Les systèmes NT sont des systèmes basés sur un noyau de type NT à partir du système Windows du même nom. Cette famille comprend le jour où ces lignes sont écrites:</p>"},{"id":"text-102","type":"text","heading":"","plain_text":"Systèmes Windows NT X.Y (X étant la révision majeure et Y la révision mineure);\nSystèmes Windows 2000\nSystèmes Windows XP\nSystèmes Windows Server 2003\nSystèmes Windows Vista\nSystèmes Windows Server 2008\nSystèmes Windows 7\nSystèmes Windows Server 2012\net les systèmes Windows 8.","html":"<p>Systèmes Windows NT X.Y (X étant la révision majeure et Y la révision mineure);\nSystèmes Windows 2000\nSystèmes Windows XP\nSystèmes Windows Server 2003\nSystèmes Windows Vista\nSystèmes Windows Server 2008\nSystèmes Windows 7\nSystèmes Windows Server 2012\net les systèmes Windows 8.</p>"},{"id":"text-103","type":"text","heading":"","plain_text":"Variable","html":"<p>Variable</p>"},{"id":"text-104","type":"text","heading":"","plain_text":"La description","html":"<p>La description</p>"},{"id":"text-105","type":"text","heading":"","plain_text":"compatibilité","html":"<p>compatibilité</p>"},{"id":"text-106","type":"text","heading":"","plain_text":"AllUsersProfile","html":"<p>AllUsersProfile</p>"},{"id":"text-107","type":"text","heading":"","plain_text":"Renvoie le chemin d&#39;accès complet au répertoire des données utilisateur commun à tous les utilisateurs. Par défaut: HomeDrive %%  ProgramData.","html":"<p>Renvoie le chemin d&#039;accès complet au répertoire des données utilisateur commun à tous les utilisateurs. Par défaut: HomeDrive %%  ProgramData.</p>"},{"id":"text-108","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-109","type":"text","heading":"","plain_text":"Données d&#39;application","html":"<p>Données d&#039;application</p>"},{"id":"text-110","type":"text","heading":"","plain_text":"Renvoie le répertoire de données d&#39;application commun sous la forme % UserProfile%  AppData  Roaming.","html":"<p>Renvoie le répertoire de données d&#039;application commun sous la forme % UserProfile%  AppData  Roaming.</p>"},{"id":"text-111","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-112","type":"text","heading":"","plain_text":"CD","html":"<p>CD</p>"},{"id":"text-113","type":"text","heading":"","plain_text":"Renvoie le chemin complet du répertoire dans lequel le script est exécuté. Ce répertoire peut être différent du répertoire dans lequel le script a démarré (s&#39;il a été déplacé au cours de son exécution).","html":"<p>Renvoie le chemin complet du répertoire dans lequel le script est exécuté. Ce répertoire peut être différent du répertoire dans lequel le script a démarré (s&#039;il a été déplacé au cours de son exécution).</p>"},{"id":"text-114","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-115","type":"text","heading":"","plain_text":"CMDCMDLINE","html":"<p>CMDCMDLINE</p>"},{"id":"text-116","type":"text","heading":"","plain_text":"Renvoie la ligne de commande d&#39;origine qui a appelé l&#39;interpréteur de commandes.","html":"<p>Renvoie la ligne de commande d&#039;origine qui a appelé l&#039;interpréteur de commandes.</p>"},{"id":"text-117","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-118","type":"text","heading":"","plain_text":"CMDEXTVERSION","html":"<p>CMDEXTVERSION</p>"},{"id":"text-119","type":"text","heading":"","plain_text":"Renvoie le numéro de version des extensions de commande du processeur de commandes en cours.","html":"<p>Renvoie le numéro de version des extensions de commande du processeur de commandes en cours.</p>"},{"id":"text-120","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-121","type":"text","heading":"","plain_text":"CommonProgramFiles","html":"<p>CommonProgramFiles</p>"},{"id":"text-122","type":"text","heading":"","plain_text":"Renvoie le chemin complet vers les applications 32 bits communes aux systèmes 32 bits ou les applications 64 bits vers 64 bits, telles que: % ProgramFiles%  Fichiers communs.","html":"<p>Renvoie le chemin complet vers les applications 32 bits communes aux systèmes 32 bits ou les applications 64 bits vers 64 bits, telles que: % ProgramFiles%  Fichiers communs.</p>"},{"id":"text-123","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-124","type":"text","heading":"","plain_text":"CommonProgramFiles (x86)","html":"<p>CommonProgramFiles (x86)</p>"},{"id":"text-125","type":"text","heading":"","plain_text":"Renvoie le chemin complet du répertoire de fichiers communs 32bits sur les systèmes 64bits:% ProgramFiles (x86)%  Fichiers communs.","html":"<p>Renvoie le chemin complet du répertoire de fichiers communs 32bits sur les systèmes 64bits:% ProgramFiles (x86)%  Fichiers communs.</p>"},{"id":"text-126","type":"text","heading":"","plain_text":"Disponible uniquement sur les systèmes NT 64bits.","html":"<p>Disponible uniquement sur les systèmes NT 64bits.</p>"},{"id":"text-127","type":"text","heading":"","plain_text":"Programme commun W6432","html":"<p>Programme commun W6432</p>"},{"id":"text-128","type":"text","heading":"","plain_text":"Renvoie le chemin complet du fichier commun des applications 16 bits sur les systèmes 64 bits et les systèmes Vista 32 bits et supérieurs: % ProgramW6432%  Fichiers communs.","html":"<p>Renvoie le chemin complet du fichier commun des applications 16 bits sur les systèmes 64 bits et les systèmes Vista 32 bits et supérieurs: % ProgramW6432%  Fichiers communs.</p>"},{"id":"text-129","type":"text","heading":"","plain_text":"Disponible uniquement sur les systèmes NT 64 bits et les systèmes Vista 32 bits et supérieurs.","html":"<p>Disponible uniquement sur les systèmes NT 64 bits et les systèmes Vista 32 bits et supérieurs.</p>"},{"id":"text-130","type":"text","heading":"","plain_text":"Nom de l&#39;ordinateur","html":"<p>Nom de l&#039;ordinateur</p>"},{"id":"text-131","type":"text","heading":"","plain_text":"Renvoie le nom de l&#39;ordinateur sur lequel le script est exécuté.","html":"<p>Renvoie le nom de l&#039;ordinateur sur lequel le script est exécuté.</p>"},{"id":"text-132","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-133","type":"text","heading":"","plain_text":"ComSpec","html":"<p>ComSpec</p>"},{"id":"text-134","type":"text","heading":"","plain_text":"Renvoie le chemin complet de l&#39;interprète: % WinDir%  system32  cmd.exe.","html":"<p>Renvoie le chemin complet de l&#039;interprète: % WinDir%  system32  cmd.exe.</p>"},{"id":"text-135","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-136","type":"text","heading":"","plain_text":"Daté","html":"<p>Daté</p>"},{"id":"text-137","type":"text","heading":"","plain_text":"Renvoie la date actuelle en utilisant le même format que la commande daté.","html":"<p>Renvoie la date actuelle en utilisant le même format que la commande daté.</p>"},{"id":"text-138","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-139","type":"text","heading":"","plain_text":"ErrorLevel","html":"<p>ErrorLevel</p>"},{"id":"text-140","type":"text","heading":"","plain_text":"Renvoie la valeur du code d&#39;erreur actuel. Cette valeur est modifiée après chaque ligne de commande, en fonction du résultat de la commande. En général, la variable ErrorLevel renvoie 1 ou plus en cas d&#39;erreur de la dernière commande et 0 si aucune erreur ne s&#39;est produite. Cependant, il arrive que ce comportement varie en fonction des commandes, il est donc recommandé de se reporter à l&#39;aide concernant cette commande.","html":"<p>Renvoie la valeur du code d&#039;erreur actuel. Cette valeur est modifiée après chaque ligne de commande, en fonction du résultat de la commande. En général, la variable ErrorLevel renvoie 1 ou plus en cas d&#039;erreur de la dernière commande et 0 si aucune erreur ne s&#039;est produite. Cependant, il arrive que ce comportement varie en fonction des commandes, il est donc recommandé de se reporter à l&#039;aide concernant cette commande.</p>"},{"id":"text-141","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-142","type":"text","heading":"","plain_text":"FP_NO_HOST_CHECK","html":"<p>FP_NO_HOST_CHECK</p>"},{"id":"text-143","type":"text","heading":"","plain_text":"CAROLINE DU NORD.","html":"<p>CAROLINE DU NORD.</p>"},{"id":"text-144","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-145","type":"text","heading":"","plain_text":"Le plus haut numéro de numéro de noeud","html":"<p>Le plus haut numéro de numéro de noeud</p>"},{"id":"text-146","type":"text","heading":"","plain_text":"Renvoie le numéro de nœud NUMA le plus élevé de l&#39;ordinateur sur lequel le script est exécuté.","html":"<p>Renvoie le numéro de nœud NUMA le plus élevé de l&#039;ordinateur sur lequel le script est exécuté.</p>"},{"id":"text-147","type":"text","heading":"","plain_text":"Disponible uniquement sur les systèmes NT 64bits.","html":"<p>Disponible uniquement sur les systèmes NT 64bits.</p>"},{"id":"text-148","type":"text","heading":"","plain_text":"HomeDrive","html":"<p>HomeDrive</p>"},{"id":"text-149","type":"text","heading":"","plain_text":"Renvoie le point de montage de la partition qui héberge les répertoires de l&#39;utilisateur. Par défaut: C:.","html":"<p>Renvoie le point de montage de la partition qui héberge les répertoires de l&#039;utilisateur. Par défaut: C:.</p>"},{"id":"text-150","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-151","type":"text","heading":"","plain_text":"HomePath","html":"<p>HomePath</p>"},{"id":"text-152","type":"text","heading":"","plain_text":"Renvoie le chemin d&#39;accès au répertoire de l&#39;utilisateur actuellement connecté. Par défaut:  Utilisateurs % nom d&#39;utilisateur%.","html":"<p>Renvoie le chemin d&#039;accès au répertoire de l&#039;utilisateur actuellement connecté. Par défaut:  Utilisateurs % nom d&#039;utilisateur%.</p>"},{"id":"text-153","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-154","type":"text","heading":"","plain_text":"LocalAppData","html":"<p>LocalAppData</p>"},{"id":"text-155","type":"text","heading":"","plain_text":"Renvoie le répertoire local des données d&#39;application sous la forme: % UserProfile%  AppData  Local.","html":"<p>Renvoie le répertoire local des données d&#039;application sous la forme: % UserProfile%  AppData  Local.</p>"},{"id":"text-156","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-157","type":"text","heading":"","plain_text":"LogonServer","html":"<p>LogonServer</p>"},{"id":"text-158","type":"text","heading":"","plain_text":"Renvoie l&#39;URL locale du système d&#39;exploitation sous la forme \\% Nom de l&#39;ordinateur%.","html":"<p>Renvoie l&#039;URL locale du système d&#039;exploitation sous la forme \\% Nom de l&#039;ordinateur%.</p>"},{"id":"text-159","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-160","type":"text","heading":"","plain_text":"NUMBER_OF_PROCESSORS","html":"<p>NUMBER_OF_PROCESSORS</p>"},{"id":"text-161","type":"text","heading":"","plain_text":"Renvoie le nombre de cœurs logiques sur l&#39;ordinateur sur lequel le script est exécuté.","html":"<p>Renvoie le nombre de cœurs logiques sur l&#039;ordinateur sur lequel le script est exécuté.</p>"},{"id":"text-162","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-163","type":"text","heading":"","plain_text":"OS","html":"<p>OS</p>"},{"id":"text-164","type":"text","heading":"","plain_text":"Renvoie le type de noyau sur lequel est basé le système d&#39;exploitation. Sur les systèmes NT, cette variable renvoie toujours la chaîne. Windows_NT.","html":"<p>Renvoie le type de noyau sur lequel est basé le système d&#039;exploitation. Sur les systèmes NT, cette variable renvoie toujours la chaîne. Windows_NT.</p>"},{"id":"text-165","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-166","type":"text","heading":"","plain_text":"Chemin","html":"<p>Chemin</p>"},{"id":"text-167","type":"text","heading":"","plain_text":"Renvoie la liste des répertoires reconnus par le système comme contenant des exécutables. Chaque répertoire est répertorié par son chemin d&#39;accès complet, suffixé d&#39;un point-virgule. Si un exécutable se trouve dans l&#39;un des répertoires de cette liste, il n&#39;est pas nécessaire de fournir un chemin complet pour l&#39;appeler sur la ligne de commande.","html":"<p>Renvoie la liste des répertoires reconnus par le système comme contenant des exécutables. Chaque répertoire est répertorié par son chemin d&#039;accès complet, suffixé d&#039;un point-virgule. Si un exécutable se trouve dans l&#039;un des répertoires de cette liste, il n&#039;est pas nécessaire de fournir un chemin complet pour l&#039;appeler sur la ligne de commande.</p>"},{"id":"text-168","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-169","type":"text","heading":"","plain_text":"PATHEXT","html":"<p>PATHEXT</p>"},{"id":"text-170","type":"text","heading":"","plain_text":"Retourne une liste des extensions de fichiers reconnues par le système comme étant à la fois des extensions de fichiers exécutables. Si une extension de fichier ne figure pas dans cette liste, le fichier ne peut pas être appelé en tant que commande.","html":"<p>Retourne une liste des extensions de fichiers reconnues par le système comme étant à la fois des extensions de fichiers exécutables. Si une extension de fichier ne figure pas dans cette liste, le fichier ne peut pas être appelé en tant que commande.</p>"},{"id":"text-171","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-172","type":"text","heading":"","plain_text":"PROCESSOR_ARCHITECTURE","html":"<p>PROCESSOR_ARCHITECTURE</p>"},{"id":"text-173","type":"text","heading":"","plain_text":"Renvoie le type d&#39;architecture (32 / 64bits) du processeur sur lequel le script est exécuté. Les valeurs possibles sont: X86 pour les processeurs 32 bits, AMD64 pour les processeurs 64 bits basés sur l&#39;architecture x86 et IA64 pour les processeurs Itanium.","html":"<p>Renvoie le type d&#039;architecture (32 / 64bits) du processeur sur lequel le script est exécuté. Les valeurs possibles sont: X86 pour les processeurs 32 bits, AMD64 pour les processeurs 64 bits basés sur l&#039;architecture x86 et IA64 pour les processeurs Itanium.</p>"},{"id":"text-174","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-175","type":"text","heading":"","plain_text":"PROCESSOR_IDENTIFIER","html":"<p>PROCESSOR_IDENTIFIER</p>"},{"id":"text-176","type":"text","heading":"","plain_text":"Retourne une identification précise du processeur sur lequel le script est exécuté. Cette identification est une chaîne de caractères composée du type d&#39;architecture suivi de la famille, du modèle, de la révision et enfin du fabricant du processeur.","html":"<p>Retourne une identification précise du processeur sur lequel le script est exécuté. Cette identification est une chaîne de caractères composée du type d&#039;architecture suivi de la famille, du modèle, de la révision et enfin du fabricant du processeur.</p>"},{"id":"text-177","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-178","type":"text","heading":"","plain_text":"PROCESSOR_LEVEL","html":"<p>PROCESSOR_LEVEL</p>"},{"id":"text-179","type":"text","heading":"","plain_text":"Retourne une identification précise de la famille de la micro-architecture du processeur.","html":"<p>Retourne une identification précise de la famille de la micro-architecture du processeur.</p>"},{"id":"text-180","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-181","type":"text","heading":"","plain_text":"PROCESSOR_REVISION","html":"<p>PROCESSOR_REVISION</p>"},{"id":"text-182","type":"text","heading":"","plain_text":"Renvoie un modèle de processeur spécifique et l&#39;identification de la révision sous la forme d&#39;une chaîne de caractères représentant un nombre hexadécimal à deux octets, le premier pour le modèle et le second pour la révision.","html":"<p>Renvoie un modèle de processeur spécifique et l&#039;identification de la révision sous la forme d&#039;une chaîne de caractères représentant un nombre hexadécimal à deux octets, le premier pour le modèle et le second pour la révision.</p>"},{"id":"text-183","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-184","type":"text","heading":"","plain_text":"Données de programme","html":"<p>Données de programme</p>"},{"id":"text-185","type":"text","heading":"","plain_text":"Renvoie le répertoire de données d&#39;application 64 bits commun sous la forme: % SystemDrive%  ProgramData.","html":"<p>Renvoie le répertoire de données d&#039;application 64 bits commun sous la forme: % SystemDrive%  ProgramData.</p>"},{"id":"text-186","type":"text","heading":"","plain_text":"Disponible uniquement sur les systèmes NT 64bits.","html":"<p>Disponible uniquement sur les systèmes NT 64bits.</p>"},{"id":"text-187","type":"text","heading":"","plain_text":"Fichiers de programme","html":"<p>Fichiers de programme</p>"},{"id":"text-188","type":"text","heading":"","plain_text":"Renvoie le chemin complet du répertoire ProgramFiles. Ce répertoire contient des applications 32 bits sur des systèmes 32 bits ou des applications 64 bits sur des systèmes 64 bits.","html":"<p>Renvoie le chemin complet du répertoire ProgramFiles. Ce répertoire contient des applications 32 bits sur des systèmes 32 bits ou des applications 64 bits sur des systèmes 64 bits.</p>"},{"id":"text-189","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-190","type":"text","heading":"","plain_text":"ProgramFiles (x86)","html":"<p>ProgramFiles (x86)</p>"},{"id":"text-191","type":"text","heading":"","plain_text":"Renvoie le chemin complet du répertoire ProgramFiles (x86). Ce répertoire contient des applications 32 bits sur des systèmes 64 bits.","html":"<p>Renvoie le chemin complet du répertoire ProgramFiles (x86). Ce répertoire contient des applications 32 bits sur des systèmes 64 bits.</p>"},{"id":"text-192","type":"text","heading":"","plain_text":"Disponible uniquement sur les systèmes NT 64bits.","html":"<p>Disponible uniquement sur les systèmes NT 64bits.</p>"},{"id":"text-193","type":"text","heading":"","plain_text":"ProgramW6432","html":"<p>ProgramW6432</p>"},{"id":"text-194","type":"text","heading":"","plain_text":"Renvoie le chemin complet du répertoire ProgramW6432. Ce répertoire contient les applications 16 bits sur les systèmes 64 bits et les systèmes Vista 32 bits et supérieurs.","html":"<p>Renvoie le chemin complet du répertoire ProgramW6432. Ce répertoire contient les applications 16 bits sur les systèmes 64 bits et les systèmes Vista 32 bits et supérieurs.</p>"},{"id":"text-195","type":"text","heading":"","plain_text":"Disponible sur les systèmes NT 32 et 64bits Vista et supérieurs.","html":"<p>Disponible sur les systèmes NT 32 et 64bits Vista et supérieurs.</p>"},{"id":"text-196","type":"text","heading":"","plain_text":"Rapide","html":"<p>Rapide</p>"},{"id":"text-197","type":"text","heading":"","plain_text":"Renvoie la chaîne de configuration pour l&#39;affichage standard, par défaut: $ P $ G. Voir l&#39;aide de la commande rapide pour plus d&#39;informations: invite /?.","html":"<p>Renvoie la chaîne de configuration pour l&#039;affichage standard, par défaut: $ P $ G. Voir l&#039;aide de la commande rapide pour plus d&#039;informations: invite /?.</p>"},{"id":"text-198","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-199","type":"text","heading":"","plain_text":"PSModulePath","html":"<p>PSModulePath</p>"},{"id":"text-200","type":"text","heading":"","plain_text":"Renvoie le chemin d&#39;accès complet aux modules PowerShell.","html":"<p>Renvoie le chemin d&#039;accès complet aux modules PowerShell.</p>"},{"id":"text-201","type":"text","heading":"","plain_text":"Disponible uniquement sur Vista et les systèmes supérieurs. (XP avec mise à jour KB926140)","html":"<p>Disponible uniquement sur Vista et les systèmes supérieurs. (XP avec mise à jour KB926140)</p>"},{"id":"text-202","type":"text","heading":"","plain_text":"Publique","html":"<p>Publique</p>"},{"id":"text-203","type":"text","heading":"","plain_text":"Renvoie le chemin complet du répertoire de documents publics sous la forme HomeDrive %%  Users  Public.","html":"<p>Renvoie le chemin complet du répertoire de documents publics sous la forme HomeDrive %%  Users  Public.</p>"},{"id":"text-204","type":"text","heading":"","plain_text":"Disponible uniquement sur Vista et les systèmes supérieurs.","html":"<p>Disponible uniquement sur Vista et les systèmes supérieurs.</p>"},{"id":"text-205","type":"text","heading":"","plain_text":"au hasard","html":"<p>au hasard</p>"},{"id":"text-206","type":"text","heading":"","plain_text":"Retourne un nombre aléatoire compris entre 0 et 32767.","html":"<p>Retourne un nombre aléatoire compris entre 0 et 32767.</p>"},{"id":"text-207","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-208","type":"text","heading":"","plain_text":"Nom de session","html":"<p>Nom de session</p>"},{"id":"text-209","type":"text","heading":"","plain_text":"Retourne le nom de la session en cours. Par défaut: Console.","html":"<p>Retourne le nom de la session en cours. Par défaut: Console.</p>"},{"id":"text-210","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-211","type":"text","heading":"","plain_text":"SystemDrive","html":"<p>SystemDrive</p>"},{"id":"text-212","type":"text","heading":"","plain_text":"Renvoie le point de montage de la partition sur laquelle le système d&#39;exploitation est installé.","html":"<p>Renvoie le point de montage de la partition sur laquelle le système d&#039;exploitation est installé.</p>"},{"id":"text-213","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-214","type":"text","heading":"","plain_text":"RacineSystème","html":"<p>RacineSystème</p>"},{"id":"text-215","type":"text","heading":"","plain_text":"Renvoie le chemin complet du système d&#39;exploitation sous la forme % SystemDrive%  Windows.","html":"<p>Renvoie le chemin complet du système d&#039;exploitation sous la forme % SystemDrive%  Windows.</p>"},{"id":"text-216","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-217","type":"text","heading":"","plain_text":"Temp","html":"<p>Temp</p>"},{"id":"text-218","type":"text","heading":"","plain_text":"Renvoie le chemin d&#39;accès complet au répertoire de fichiers temporaires de l&#39;utilisateur. Par défaut: % UserProfile%  AppData  Local  Temp.","html":"<p>Renvoie le chemin d&#039;accès complet au répertoire de fichiers temporaires de l&#039;utilisateur. Par défaut: % UserProfile%  AppData  Local  Temp.</p>"},{"id":"text-219","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-220","type":"text","heading":"","plain_text":"Temps","html":"<p>Temps</p>"},{"id":"text-221","type":"text","heading":"","plain_text":"Renvoie l&#39;heure actuelle en utilisant le même format que la commande temps.","html":"<p>Renvoie l&#039;heure actuelle en utilisant le même format que la commande temps.</p>"},{"id":"text-222","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-223","type":"text","heading":"","plain_text":"tmp","html":"<p>tmp</p>"},{"id":"text-224","type":"text","heading":"","plain_text":"Même temp.","html":"<p>Même temp.</p>"},{"id":"text-225","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-226","type":"text","heading":"","plain_text":"UserDomain","html":"<p>UserDomain</p>"},{"id":"text-227","type":"text","heading":"","plain_text":"Renvoie le nom de domaine de l&#39;ordinateur sur lequel le script est exécuté. Si le système n&#39;appartient pas à un domaine, le nom de domaine sera le nom de l&#39;ordinateur sur lequel le script est exécuté.","html":"<p>Renvoie le nom de domaine de l&#039;ordinateur sur lequel le script est exécuté. Si le système n&#039;appartient pas à un domaine, le nom de domaine sera le nom de l&#039;ordinateur sur lequel le script est exécuté.</p>"},{"id":"text-228","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-229","type":"text","heading":"","plain_text":"Nom d&#39;utilisateur","html":"<p>Nom d&#039;utilisateur</p>"},{"id":"text-230","type":"text","heading":"","plain_text":"Renvoie le nom de l&#39;utilisateur actuellement connecté.","html":"<p>Renvoie le nom de l&#039;utilisateur actuellement connecté.</p>"},{"id":"text-231","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-232","type":"text","heading":"","plain_text":"Profil de l&#39;utilisateur","html":"<p>Profil de l&#039;utilisateur</p>"},{"id":"text-233","type":"text","heading":"","plain_text":"Renvoie le chemin d&#39;accès complet au répertoire d&#39;utilisateurs de l&#39;utilisateur actuellement connecté en tant que: HomeDrive %%  Users % nom_utilisateur%.","html":"<p>Renvoie le chemin d&#039;accès complet au répertoire d&#039;utilisateurs de l&#039;utilisateur actuellement connecté en tant que: HomeDrive %%  Users % nom_utilisateur%.</p>"},{"id":"text-234","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-235","type":"text","heading":"","plain_text":"WinDir","html":"<p>WinDir</p>"},{"id":"text-236","type":"text","heading":"","plain_text":"Renvoie le chemin complet du répertoire d&#39;installation du système. Par défaut: % SystemDrive%  Windows.","html":"<p>Renvoie le chemin complet du répertoire d&#039;installation du système. Par défaut: % SystemDrive%  Windows.</p>"},{"id":"text-237","type":"text","heading":"","plain_text":"Disponible sur tous les systèmes NT.","html":"<p>Disponible sur tous les systèmes NT.</p>"},{"id":"text-238","type":"text","heading":"","plain_text":"Tableau 3: Variables d&#39;environnement","html":"<p>Tableau 3: Variables d&#039;environnement</p>"},{"id":"text-239","type":"text","heading":"","plain_text":"II-B. L&#39;ensemble ▲","html":"<p>II-B. L&#039;ensemble ▲</p>"},{"id":"text-240","type":"text","heading":"","plain_text":"La commande ensemble variables gre dans l&#39;interpréteur, cela permet:","html":"<p>La commande ensemble variables gre dans l&#039;interpréteur, cela permet:</p>"},{"id":"text-241","type":"text","heading":"","plain_text":"créer une variable;\nassigner une valeur à une variable\nmodifier le contenu d&#39;une variable;\nsupprimer le contenu d&#39;une variable;\neffectuer des opérations mathématiques ou logiques entre les nombres;\nRécupération de l&#39;entrée d&#39;un utilisateur pour la placer dans une variable\net jette le contenu d&#39;une variable.","html":"<p>créer une variable;\nassigner une valeur à une variable\nmodifier le contenu d&#039;une variable;\nsupprimer le contenu d&#039;une variable;\neffectuer des opérations mathématiques ou logiques entre les nombres;\nRécupération de l&#039;entrée d&#039;un utilisateur pour la placer dans une variable\net jette le contenu d&#039;une variable.</p>"},{"id":"text-242","type":"text","heading":"","plain_text":"Voici la syntaxe de la commande ensemble.\nAttribuez une valeur à la variable sous forme de chaîne de caractères (o     est son identifiant et     est une chaîne de caractères).\nensemble [« ]&lt;variable&gt;=&lt;chane&gt;[« ]  \nAttribuez à la variable une valeur sous forme de signe de nombre entier (o     est une expression numérique à évaluer: détaillée plus loin).\nensemble /à [« ]&lt;expression&gt;[« ]  \nAttribuez à la variable une valeur, entrée par l&#39;utilisateur, sous forme de chaîne de caractères après l&#39;affichage de la chaîne d&#39;invite, le cas échéant (o     est son identifiant et o     est une chaîne de caractères indique à l&#39;utilisateur de l&#39;inviter à entrer une chaîne de clés).\nensemble / p [« ]&lt;variable&gt;=[[[[&lt;chane_invite&gt;][« ]  \nSupprime la valeur de la variable de mémoire, son identifiant reste indexé par l&#39;interpréteur, mais sa valeur est indéfinie.\nensemble [« ]&lt;variable&gt;=[« ]  \nVoici les règles habituelles de la commande ensemble:","html":"<p>Voici la syntaxe de la commande ensemble.\nAttribuez une valeur à la variable sous forme de chaîne de caractères (o     est son identifiant et     est une chaîne de caractères).\nensemble [« ]&lt;variable&gt;=&lt;chane&gt;[« ]  \nAttribuez à la variable une valeur sous forme de signe de nombre entier (o     est une expression numérique à évaluer: détaillée plus loin).\nensemble /à [« ]&lt;expression&gt;[« ]  \nAttribuez à la variable une valeur, entrée par l&#039;utilisateur, sous forme de chaîne de caractères après l&#039;affichage de la chaîne d&#039;invite, le cas échéant (o     est son identifiant et o     est une chaîne de caractères indique à l&#039;utilisateur de l&#039;inviter à entrer une chaîne de clés).\nensemble / p [« ]&lt;variable&gt;=[[[[&lt;chane_invite&gt;][« ]  \nSupprime la valeur de la variable de mémoire, son identifiant reste indexé par l&#039;interpréteur, mais sa valeur est indéfinie.\nensemble [« ]&lt;variable&gt;=[« ]  \nVoici les règles habituelles de la commande ensemble:</p>"},{"id":"text-243","type":"text","heading":"","plain_text":"Si la commande ensemble est utilisé sans paramètre, il affiche les variables définies dans le contexte actuel (détaillé plus tard).\nS&#39;il est utilisé avec comme paramètre une chaîne (ou un nom de variable), sans valeur ni signe gal; il affiche ensuite la variable dont le nom correspond à la chaîne de paramètres donnée et / ou les variables dont le nom commence par la chaîne de paramètres donnée.\nSi elle est utilisée avec un nom de variable et un signe gal non valide, alors le contenu de la variable est vide de mémoire, il est possible de vérifier si une variable est définie, mais nous aborderons ce point dans le chapitre suivant.\nToute chaîne non numérique dans l&#39;expression de valeur est traitée comme un identificateur de variable et est convertie en un nombre avant d&#39;être utilisée (utilisée avec le paramètre /à), si la variable n’existe pas ou est indéfinie, elle prend la valeur 0.\nUne valeur d&#39;expression numérique doit toujours être placée entre guillemets pour permettre l&#39;utilisation d&#39;opérateurs logiques et d&#39;opérateurs de regroupement.","html":"<p>Si la commande ensemble est utilisé sans paramètre, il affiche les variables définies dans le contexte actuel (détaillé plus tard).\nS&#039;il est utilisé avec comme paramètre une chaîne (ou un nom de variable), sans valeur ni signe gal; il affiche ensuite la variable dont le nom correspond à la chaîne de paramètres donnée et / ou les variables dont le nom commence par la chaîne de paramètres donnée.\nSi elle est utilisée avec un nom de variable et un signe gal non valide, alors le contenu de la variable est vide de mémoire, il est possible de vérifier si une variable est définie, mais nous aborderons ce point dans le chapitre suivant.\nToute chaîne non numérique dans l&#039;expression de valeur est traitée comme un identificateur de variable et est convertie en un nombre avant d&#039;être utilisée (utilisée avec le paramètre /à), si la variable n’existe pas ou est indéfinie, elle prend la valeur 0.\nUne valeur d&#039;expression numérique doit toujours être placée entre guillemets pour permettre l&#039;utilisation d&#039;opérateurs logiques et d&#039;opérateurs de regroupement.</p>"},{"id":"text-244","type":"text","heading":"","plain_text":"Regardons de plus près le fonctionnement de la commande ensemble avec le script 9.","html":"<p>Regardons de plus près le fonctionnement de la commande ensemble avec le script 9.</p>"},{"id":"text-245","type":"text","heading":"","plain_text":"1.234567.89dix.11121314151617181920\n@écho de\nensemble VAR_Espace_Un=&quot;Ma chaine avec des espaces&quot;\nensemble VAR_Espace_Deux &quot;=Mon canal avec des espaces &quot;\nensemble &quot;VAR_Espace_Trois=Mon canal avec des espaces &quot;","html":"<p>1.234567.89dix.11121314151617181920\n@écho de\nensemble VAR_Espace_Un=&quot;Ma chaine avec des espaces&quot;\nensemble VAR_Espace_Deux &quot;=Mon canal avec des espaces &quot;\nensemble &quot;VAR_Espace_Trois=Mon canal avec des espaces &quot;</p>"},{"id":"text-246","type":"text","heading":"","plain_text":"ensemble / p VAR_Saisie_Un=    ma première saisie:    \nensemble / p &quot;VAR_Saisie_Two=    ma saisie deux: &quot;\nensemble / a VAR_Calcul_Un=1 + 10\nensemble / a VAR_Calcul_Two &quot;=2 + 20 &quot;\nensemble / a &quot;VAR_Calcul_Trois=3 + 30 &quot;\nécho.\nécho %% VAR_Espace_Un\nécho %% VAR_Espace_Deux\nécho %% VAR_Espace_Trois\nécho.\nensemble VAR_Saisie\nécho.\nensemble VAR_Calcul\nécho.\npause","html":"<p>ensemble / p VAR_Saisie_Un=    ma première saisie:    \nensemble / p &quot;VAR_Saisie_Two=    ma saisie deux: &quot;\nensemble / a VAR_Calcul_Un=1 + 10\nensemble / a VAR_Calcul_Two &quot;=2 + 20 &quot;\nensemble / a &quot;VAR_Calcul_Trois=3 + 30 &quot;\nécho.\nécho %% VAR_Espace_Un\nécho %% VAR_Espace_Deux\nécho %% VAR_Espace_Trois\nécho.\nensemble VAR_Saisie\nécho.\nensemble VAR_Calcul\nécho.\npause</p>"},{"id":"text-247","type":"text","heading":"","plain_text":"Comme vous pouvez le constater, les guillemets occupent une place de choix dans ce script. observez où ils sont placés. De la ligne 2 à la ligne 4, les valeurs des variables sont des chaînes de caractères avec des espaces. La déclaration de la variable VAR_Espace_Un se fait avec des guillemets placés des deux côtés de la chaîne, la déclaration de la variable VAR_Espace_Deux se fait avec des guillemets: une place devant le signe gal et l’autre au bout de la chaîne; la déclaration de la troisième variable VAR_Espace_Trois se fait avec des guillemets: un avant le nom de la variable et l’autre en fin de ligne. Si nous nous référons à l&#39;affichage obtenu, nous remarquons que les première et troisième variables affichent une sortie correcte; la seconde variable quand ça ne marche pas; il est donc facile de déduire que si les guillemets s&#39;ouvrent avant l&#39;identifiant de la variable et se ferment après la valeur de la variable, ils ne font pas partie de la variable; et si les guillemets s’ouvrent avant la valeur de la variable et se ferment après la valeur de la variable, ils font partie de la variable.\nLes deux saisies de l&#39;utilisateur ont également abouti à un résultat intéressant, la ligne de commande qui décline VAR_Saisie_Un n&#39;utilisez pas de guillemets; par contre the line of order VAR_Saisie_Deux, elle, en utilise. Lors de l&#39;affichage des invitations de saisie utilisateur, les espaces se sont mutés avant les chaînes d&#39;invités ont disparu, et ceux-ci se sont après affichés. Sur les espaces en début de ligne sont ignorés et ceux de la fin sont considérés comme faisant partie de la chaîne d&#39;invitation.\nEn ce qui concerne les variables VAR_Calcul_XXX, elles sont toutes préférables mais respectent également les règles de syntaxe; c’est &#8211; dire toujours mettre l’expression numérique entre guillemets. Cela sera utile dans la suite du chapitre.","html":"<p>Comme vous pouvez le constater, les guillemets occupent une place de choix dans ce script. observez où ils sont placés. De la ligne 2 à la ligne 4, les valeurs des variables sont des chaînes de caractères avec des espaces. La déclaration de la variable VAR_Espace_Un se fait avec des guillemets placés des deux côtés de la chaîne, la déclaration de la variable VAR_Espace_Deux se fait avec des guillemets: une place devant le signe gal et l’autre au bout de la chaîne; la déclaration de la troisième variable VAR_Espace_Trois se fait avec des guillemets: un avant le nom de la variable et l’autre en fin de ligne. Si nous nous référons à l&#039;affichage obtenu, nous remarquons que les première et troisième variables affichent une sortie correcte; la seconde variable quand ça ne marche pas; il est donc facile de déduire que si les guillemets s&#039;ouvrent avant l&#039;identifiant de la variable et se ferment après la valeur de la variable, ils ne font pas partie de la variable; et si les guillemets s’ouvrent avant la valeur de la variable et se ferment après la valeur de la variable, ils font partie de la variable.\nLes deux saisies de l&#039;utilisateur ont également abouti à un résultat intéressant, la ligne de commande qui décline VAR_Saisie_Un n&#039;utilisez pas de guillemets; par contre the line of order VAR_Saisie_Deux, elle, en utilise. Lors de l&#039;affichage des invitations de saisie utilisateur, les espaces se sont mutés avant les chaînes d&#039;invités ont disparu, et ceux-ci se sont après affichés. Sur les espaces en début de ligne sont ignorés et ceux de la fin sont considérés comme faisant partie de la chaîne d&#039;invitation.\nEn ce qui concerne les variables VAR_Calcul_XXX, elles sont toutes préférables mais respectent également les règles de syntaxe; c’est &#8211; dire toujours mettre l’expression numérique entre guillemets. Cela sera utile dans la suite du chapitre.</p>"},{"id":"text-248","type":"text","heading":"","plain_text":"II-C. Les variables de type chane de caractères ▲","html":"<p>II-C. Les variables de type chane de caractères ▲</p>"},{"id":"text-249","type":"text","heading":"","plain_text":"Ce sont, mon sens, les plus utilise en batch. Ce sont toutes les variables composées de caractères alphanumériques et autres caractères. Les chansons de caractères sont claires via la commande ensemble et il n&#39;est pas nécessaire d&#39;utiliser des guillemets pour que les espaces soient pris en compte, en tant que partie intégrante de la chaîne, et ce, ce sont eux qui sont placés dans la chaîne.\nElles offrent aussi d&#39;autres possibilités comme la substitution de chaîne dans l&#39;expansion de la variable. Ainsi avec la syntaxe suivante, il est possible de modifier la variable lors de son expansion sans que cela ne soit que sa valeur (o     est l&#39;identifiant de la variable,     is the chane remplacer et     est la chane inser la place de ). Exemple avec le script 10.\n%:=%","html":"<p>Ce sont, mon sens, les plus utilise en batch. Ce sont toutes les variables composées de caractères alphanumériques et autres caractères. Les chansons de caractères sont claires via la commande ensemble et il n&#039;est pas nécessaire d&#039;utiliser des guillemets pour que les espaces soient pris en compte, en tant que partie intégrante de la chaîne, et ce, ce sont eux qui sont placés dans la chaîne.\nElles offrent aussi d&#039;autres possibilités comme la substitution de chaîne dans l&#039;expansion de la variable. Ainsi avec la syntaxe suivante, il est possible de modifier la variable lors de son expansion sans que cela ne soit que sa valeur (o     est l&#039;identifiant de la variable,     is the chane remplacer et     est la chane inser la place de ). Exemple avec le script 10.\n%:=%</p>"},{"id":"text-250","type":"text","heading":"","plain_text":"1.23456\n@écho de\nensemble &quot;X=une chane &quot;\nécho La variable avec substitution: % X: une = ma%\nécho La valeur réelle de la variable: %X%\nécho.\npause","html":"<p>1.23456\n@écho de\nensemble &quot;X=une chane &quot;\nécho La variable avec substitution: % X: une = ma%\nécho La valeur réelle de la variable: %X%\nécho.\npause</p>"},{"id":"text-251","type":"text","heading":"","plain_text":"peut aussi tre une chane prcde d&#39;un astrisque (*), dans ce cas, la substitution commence par la valeur de la variable et se termine après la première occurrence de la chaîne spéciale dans la substitution. Exemple avec le script 11.","html":"<p>peut aussi tre une chane prcde d&#039;un astrisque (*), dans ce cas, la substitution commence par la valeur de la variable et se termine après la première occurrence de la chaîne spéciale dans la substitution. Exemple avec le script 11.</p>"},{"id":"text-252","type":"text","heading":"","plain_text":"1.2345\n@écho de\nensemble &quot;X=chaîne&quot;\nécho Substitution avec astrisque: % X: * t = d%\nécho.\npause","html":"<p>1.2345\n@écho de\nensemble &quot;X=chaîne&quot;\nécho Substitution avec astrisque: % X: * t = d%\nécho.\npause</p>"},{"id":"text-253","type":"text","heading":"","plain_text":"Il ne faut jamais utiliser un astrisque seul dans la substitution, sans quoi, l&#39;interprète de commande se ferme sans autre forme de procs. L &#39;astrisque en fin de chaîne ne provoque pas d&#39; erreur, mais ne permet pas la substitution, la variable est étendue avec sa valeur d &#39;origine.\nLa substitution ne modifie pas la valeur de la variable, elle transforme juste la variable au moment de l&#39;expansion. Pour modifier la valeur de la variable, il faut faire avec la commande ensemble. Exemple avec le script 12.","html":"<p>Il ne faut jamais utiliser un astrisque seul dans la substitution, sans quoi, l&#039;interprète de commande se ferme sans autre forme de procs. L &#039;astrisque en fin de chaîne ne provoque pas d&#039; erreur, mais ne permet pas la substitution, la variable est étendue avec sa valeur d &#039;origine.\nLa substitution ne modifie pas la valeur de la variable, elle transforme juste la variable au moment de l&#039;expansion. Pour modifier la valeur de la variable, il faut faire avec la commande ensemble. Exemple avec le script 12.</p>"},{"id":"text-254","type":"text","heading":"","plain_text":"1.23456\n@écho de\nensemble &quot;VAR=ma chane &quot;\nécho % VAR%\nensemble &quot;VAR=% VAR: chane = voiture%&quot;\nécho % VAR%\npause","html":"<p>1.23456\n@écho de\nensemble &quot;VAR=ma chane &quot;\nécho % VAR%\nensemble &quot;VAR=% VAR: chane = voiture%&quot;\nécho % VAR%\npause</p>"},{"id":"text-255","type":"text","heading":"","plain_text":"Vous pouvez aussi ne pas développer une partie d&#39;une chanson en slectionnant les caractères voulus. Cela se fait via la syntaxe suivante (o     est l&amp;#39;identifiant de la variable,     est l&amp;#39;index du premier caractre en partant de 0 et     est la longueur de la slection). Exemple avec le script 13.\n%:~,%","html":"<p>Vous pouvez aussi ne pas développer une partie d&#039;une chanson en slectionnant les caractères voulus. Cela se fait via la syntaxe suivante (o     est l&amp;#39;identifiant de la variable,     est l&amp;#39;index du premier caractre en partant de 0 et     est la longueur de la slection). Exemple avec le script 13.\n%:~,%</p>"},{"id":"text-256","type":"text","heading":"","plain_text":"1.23456\n@écho de\nensemble &quot;VAR=ma chane&quot;\nécho %VAR:~0,2%\nensemble &quot;VAR=%VAR:~3,6%&quot;\nécho %VAR%\npause","html":"<p>1.23456\n@écho de\nensemble &quot;VAR=ma chane&quot;\nécho %VAR:~0,2%\nensemble &quot;VAR=%VAR:~3,6%&quot;\nécho %VAR%\npause</p>"},{"id":"text-257","type":"text","heading":"","plain_text":"Si la     n&amp;#39;est pas spcifie, tout le reste de la chane est slectionn, en partant du caractre fourni en . Si une des valeurs donnes est ngative, alors la valeur utilise est la longueur totale de la chane ajoute  la valeur ngative.","html":"<p>Si la     n&amp;#39;est pas spcifie, tout le reste de la chane est slectionn, en partant du caractre fourni en . Si une des valeurs donnes est ngative, alors la valeur utilise est la longueur totale de la chane ajoute  la valeur ngative.</p>"},{"id":"text-258","type":"text","heading":"","plain_text":"1.234567.89dix.11\n@écho de","html":"<p>1.234567.89dix.11\n@écho de</p>"},{"id":"text-259","type":"text","heading":"","plain_text":"ensemble &quot;VAR=ma chane&quot;","html":"<p>ensemble &quot;VAR=ma chane&quot;</p>"},{"id":"text-260","type":"text","heading":"","plain_text":"écho %VAR:~-6%","html":"<p>écho %VAR:~-6%</p>"},{"id":"text-261","type":"text","heading":"","plain_text":"écho %VAR:~0,-7%","html":"<p>écho %VAR:~0,-7%</p>"},{"id":"text-262","type":"text","heading":"","plain_text":"pause","html":"<p>pause</p>"},{"id":"text-263","type":"text","heading":"","plain_text":"II-D. Les variables de type nombre entier sign▲","html":"<p>II-D. Les variables de type nombre entier sign▲</p>"},{"id":"text-264","type":"text","heading":"","plain_text":"The command set /a permet d&amp;#39;utiliser les nombres entiers signs allant de -2147483648  +2147483647 (cods sur 32bits). Si vous n&amp;#39;utilisez pas le paramtre /a dans la commande, alors la squence de chiffres sera considre comme tant une chane de caractres, et non un nombre. La syntaxe de la commande set /a est la suivante.\nensemble /a &lt;expression&gt;  \n    utilise, quant  elle, la syntaxe suivante.\n[« ]&lt;s&#39;identifier&gt;[[[[&lt;affectation&gt;[{[{[{[&lt;sous-expression&gt;]][« ]  \nLes expressions numriques doivent tre places entre des guillemets si elles contiennent des oprateurs logiques ou de groupement (dtaill plus loin dans ce chapitre). Ces diffrentes constituantes sont:","html":"<p>The command set /a permet d&amp;#39;utiliser les nombres entiers signs allant de -2147483648  +2147483647 (cods sur 32bits). Si vous n&amp;#39;utilisez pas le paramtre /a dans la commande, alors la squence de chiffres sera considre comme tant une chane de caractres, et non un nombre. La syntaxe de la commande set /a est la suivante.\nensemble /a &lt;expression&gt;  \n    utilise, quant  elle, la syntaxe suivante.\n[« ]&lt;s&#039;identifier&gt;[[[[&lt;affectation&gt;[{[{[{[&lt;sous-expression&gt;]][« ]  \nLes expressions numriques doivent tre places entre des guillemets si elles contiennent des oprateurs logiques ou de groupement (dtaill plus loin dans ce chapitre). Ces diffrentes constituantes sont:</p>"},{"id":"text-265","type":"text","heading":"","plain_text":"qui est l&amp;#39;identifiant de la variable de destination;\n    qui est l&amp;#39;oprateur d&amp;#39;attribution de l&amp;#39;expression, comme le signe gal qui effectue l&amp;#39;opration d&amp;#39;attribuer une valeur  une variable, d&amp;#39;autres oprateurs d&amp;#39;attribution seront dtaills dans cette section;\npuis soit     qui est une valeur immdiate (un nombre quelconque), soit     qui est une sous-expression, ces dernires seront dtailles dans le reste de cette section.","html":"<p>qui est l&amp;#39;identifiant de la variable de destination;\n    qui est l&amp;#39;oprateur d&amp;#39;attribution de l&amp;#39;expression, comme le signe gal qui effectue l&amp;#39;opration d&amp;#39;attribuer une valeur  une variable, d&amp;#39;autres oprateurs d&amp;#39;attribution seront dtaills dans cette section;\npuis soit     qui est une valeur immdiate (un nombre quelconque), soit     qui est une sous-expression, ces dernires seront dtailles dans le reste de cette section.</p>"},{"id":"text-266","type":"text","heading":"","plain_text":"Vous pouvez spcifier plusieurs expressions en les sparant par des virgules.","html":"<p>Vous pouvez spcifier plusieurs expressions en les sparant par des virgules.</p>"},{"id":"text-267","type":"text","heading":"","plain_text":"@écho de\nensemble /a &quot;VAR1=1&quot;, &quot;VAR2=2&quot;\nécho VAR1: %VAR1%\nécho VAR2: %VAR2%\npause","html":"<p>@écho de\nensemble /a &quot;VAR1=1&quot;, &quot;VAR2=2&quot;\nécho VAR1: %VAR1%\nécho VAR2: %VAR2%\npause</p>"},{"id":"text-268","type":"text","heading":"","plain_text":"Les chanes de caractres prsentes dans l&amp;#39;expression sont considres comme des variables et sont expanses ( l&amp;#39;exception de l&amp;#39;identifiant de la variable de destination), cela permet de faire des oprations sur des variables sans avoir  utiliser de symbole % pour leur expansion.","html":"<p>Les chanes de caractres prsentes dans l&amp;#39;expression sont considres comme des variables et sont expanses ( l&amp;#39;exception de l&amp;#39;identifiant de la variable de destination), cela permet de faire des oprations sur des variables sans avoir  utiliser de symbole % pour leur expansion.</p>"},{"id":"text-269","type":"text","heading":"","plain_text":"@écho de\nensemble /a &quot;VAR1=1&quot;\nensemble /a &quot;VAR2=VAR1&quot;\nécho VAR1: %VAR1%\nécho VAR2: %VAR2%\npause","html":"<p>@écho de\nensemble /a &quot;VAR1=1&quot;\nensemble /a &quot;VAR2=VAR1&quot;\nécho VAR1: %VAR1%\nécho VAR2: %VAR2%\npause</p>"},{"id":"text-270","type":"text","heading":"","plain_text":"Si un nom de variable inexistante ou indfinie est utilis, alors elle prend la valeur 0.","html":"<p>Si un nom de variable inexistante ou indfinie est utilis, alors elle prend la valeur 0.</p>"},{"id":"text-271","type":"text","heading":"","plain_text":"1.2345\n@écho de","html":"<p>1.2345\n@écho de</p>"},{"id":"text-272","type":"text","heading":"","plain_text":"ensemble /a &quot;VAR2=VAR1&quot;\nécho VAR2: %VAR2%\npause","html":"<p>ensemble /a &quot;VAR2=VAR1&quot;\nécho VAR2: %VAR2%\npause</p>"},{"id":"text-273","type":"text","heading":"","plain_text":"Les sous-expressions sont constitues de nombres, d&amp;#39;oprateurs et ventuellement de parenthses, ces dernires s&amp;#39;utilisent de la mme manire qu&amp;#39;en mathmatiques et elles n&amp;#39;ont pas besoin d&amp;#39;tre chappes si, et seulement si, les guillemets sont utiliss. Toutes les constituantes d&amp;#39;une sous-expression sont soumises  la prsance, c&amp;#39;est&#8211;dire l&amp;#39;ordre dans lequel les diverses constituantes vont tre values. L&amp;#39;ordre de prsance utilis est le suivant (dans l&amp;#39;ordre dcroissant d&amp;#39;valuation):","html":"<p>Les sous-expressions sont constitues de nombres, d&amp;#39;oprateurs et ventuellement de parenthses, ces dernires s&amp;#39;utilisent de la mme manire qu&amp;#39;en mathmatiques et elles n&amp;#39;ont pas besoin d&amp;#39;tre chappes si, et seulement si, les guillemets sont utiliss. Toutes les constituantes d&amp;#39;une sous-expression sont soumises  la prsance, c&amp;#39;est&#8211;dire l&amp;#39;ordre dans lequel les diverses constituantes vont tre values. L&amp;#39;ordre de prsance utilis est le suivant (dans l&amp;#39;ordre dcroissant d&amp;#39;valuation):</p>"},{"id":"text-274","type":"text","heading":"","plain_text":"le groupement soit ( );\nles oprateurs unaires ! ~ &#8211;;\nles oprateurs arithmtiques * / %;\nles oprateurs arithmtiques + &#8211;;\nle dcalage logique &lt;< >&gt;;\nle ET au niveau du bit Et;\nle OU exclusif au niveau du bit ^;\nle OU inclusif au niveau du bit |;\nl&amp;#39;&amp;#39;attribution = *= /= %= += -= &amp;= ^= |= &lt;&gt;=;\nle sparateur d&amp;#39;expression ,.","html":"<p>le groupement soit ( );\nles oprateurs unaires ! ~ &#8211;;\nles oprateurs arithmtiques * / %;\nles oprateurs arithmtiques + &#8211;;\nle dcalage logique &lt;&lt; &gt;&gt;;\nle ET au niveau du bit Et;\nle OU exclusif au niveau du bit ^;\nle OU inclusif au niveau du bit |;\nl&amp;#39;&amp;#39;attribution = *= /= %= += -= &amp;= ^= |= &lt;&gt;=;\nle sparateur d&amp;#39;expression ,.</p>"},{"id":"text-275","type":"text","heading":"","plain_text":"Il faut galement noter que l&amp;#39;utilisation du nombre -2147483648 tel quel dans une expression provoque une erreur, c&amp;#39;est d au transtypage effectu par l&amp;#39;interprteur. Ce dernier value d&amp;#39;abord la chane 2147483648 afin de la transtyper puis lui applique l&amp;#39;oprateur unaire &#8211;. Mais comme le nombre 2147483648 va au-del de la dfinition d&amp;#39;un nombre sur 32bits, l&amp;#39;opration gnre une erreur, exemple avec le script suivant.","html":"<p>Il faut galement noter que l&amp;#39;utilisation du nombre -2147483648 tel quel dans une expression provoque une erreur, c&amp;#39;est d au transtypage effectu par l&amp;#39;interprteur. Ce dernier value d&amp;#39;abord la chane 2147483648 afin de la transtyper puis lui applique l&amp;#39;oprateur unaire &#8211;. Mais comme le nombre 2147483648 va au-del de la dfinition d&amp;#39;un nombre sur 32bits, l&amp;#39;opration gnre une erreur, exemple avec le script suivant.</p>"},{"id":"text-276","type":"text","heading":"","plain_text":"1.234567.89dix.\n@écho de\nécho Nombre brute:\nensemble /a &quot;ParseError=-2147483648&quot;\nécho %ParseError%\necho.\nécho Nombre avec valuation:\nensemble /a &quot;ParseError=-2147483647 - 1&quot;\nécho %ParseError%\necho.\npause","html":"<p>1.234567.89dix.\n@écho de\nécho Nombre brute:\nensemble /a &quot;ParseError=-2147483648&quot;\nécho %ParseError%\necho.\nécho Nombre avec valuation:\nensemble /a &quot;ParseError=-2147483647 - 1&quot;\nécho %ParseError%\necho.\npause</p>"},{"id":"text-277","type":"text","heading":"","plain_text":"Une autre mthode qui fonctionne pour ce cas est la suivante.","html":"<p>Une autre mthode qui fonctionne pour ce cas est la suivante.</p>"},{"id":"text-278","type":"text","heading":"","plain_text":"1.2345\n@écho de\nensemble &quot;SInt32=-2147483648&quot;\nensemble /a &quot;SInt32&quot;\nécho %SInt32%\npause","html":"<p>1.2345\n@écho de\nensemble &quot;SInt32=-2147483648&quot;\nensemble /a &quot;SInt32&quot;\nécho %SInt32%\npause</p>"},{"id":"text-279","type":"text","heading":"","plain_text":"II-D-1. Les oprations arithmtiques▲","html":"<p>II-D-1. Les oprations arithmtiques▲</p>"},{"id":"text-280","type":"text","heading":"","plain_text":"The command set /a prend en charge les cinq oprations arithmtiques suivantes:","html":"<p>The command set /a prend en charge les cinq oprations arithmtiques suivantes:</p>"},{"id":"text-281","type":"text","heading":"","plain_text":"l&amp;#39;addition;\nla soustraction;\nla multiplication;\nla division;\net le modulo (le modulo est une opration qui sert  rcuprer le reste d&amp;#39;une division).","html":"<p>l&amp;#39;addition;\nla soustraction;\nla multiplication;\nla division;\net le modulo (le modulo est une opration qui sert  rcuprer le reste d&amp;#39;une division).</p>"},{"id":"text-282","type":"text","heading":"","plain_text":"Oprateur arithmtique","html":"<p>Oprateur arithmtique</p>"},{"id":"text-283","type":"text","heading":"","plain_text":"Oprateur d&amp;#39;attribution","html":"<p>Oprateur d&amp;#39;attribution</p>"},{"id":"text-284","type":"text","heading":"","plain_text":"Opration effectue","html":"<p>Opration effectue</p>"},{"id":"text-285","type":"text","heading":"","plain_text":"+","html":"<p>+</p>"},{"id":"text-286","type":"text","heading":"","plain_text":"+=","html":"<p>+=</p>"},{"id":"text-287","type":"text","heading":"","plain_text":"Une addition","html":"<p>Une addition</p>"},{"id":"text-288","type":"text","heading":"","plain_text":"&#8211;","html":"<p>&#8211;</p>"},{"id":"text-289","type":"text","heading":"","plain_text":"-=","html":"<p>-=</p>"},{"id":"text-290","type":"text","heading":"","plain_text":"Soustraction","html":"<p>Soustraction</p>"},{"id":"text-291","type":"text","heading":"","plain_text":"*","html":"<p>*</p>"},{"id":"text-292","type":"text","heading":"","plain_text":"*=","html":"<p>*=</p>"},{"id":"text-293","type":"text","heading":"","plain_text":"Multiplication","html":"<p>Multiplication</p>"},{"id":"text-294","type":"text","heading":"","plain_text":"/","html":"<p>/</p>"},{"id":"text-295","type":"text","heading":"","plain_text":"/=","html":"<p>/=</p>"},{"id":"text-296","type":"text","heading":"","plain_text":"Division","html":"<p>Division</p>"},{"id":"text-297","type":"text","heading":"","plain_text":"%","html":"<p>%</p>"},{"id":"text-298","type":"text","heading":"","plain_text":"%=","html":"<p>%=</p>"},{"id":"text-299","type":"text","heading":"","plain_text":"Modulo","html":"<p>Modulo</p>"},{"id":"text-300","type":"text","heading":"","plain_text":"Tableau 4: Oprations arithmtiques \nUne note particulire pour le modulo: dans un script de commande, le symbole du modulo % doit tre prfix du caractre d&amp;#39;chappement %. Dans ce cas, c&amp;#39;est un pige dans lequel le novice peut se perdre, le premier symbole % est un caractre d&amp;#39;chappement qui permet au deuxime symbole %, le modulo, d&amp;#39;tre pris en compte  l&amp;#39;excution du script. Dans l&amp;#39;interprteur de commande, le modulo (%) n&amp;#39;as pas besoin d&amp;#39;tre chapp, c&amp;#39;est une spcificit du script. Ainsi la commande suivante fonctionne dans l&amp;#39;interprteur.\nensemble /a &quot;Mod=5 % 2&quot;  \nAlors que celle-ci ne fonctionne pas.\nensemble /a &quot;Mod=5 %% 2&quot;","html":"<p>Tableau 4: Oprations arithmtiques \nUne note particulire pour le modulo: dans un script de commande, le symbole du modulo % doit tre prfix du caractre d&amp;#39;chappement %. Dans ce cas, c&amp;#39;est un pige dans lequel le novice peut se perdre, le premier symbole % est un caractre d&amp;#39;chappement qui permet au deuxime symbole %, le modulo, d&amp;#39;tre pris en compte  l&amp;#39;excution du script. Dans l&amp;#39;interprteur de commande, le modulo (%) n&amp;#39;as pas besoin d&amp;#39;tre chapp, c&amp;#39;est une spcificit du script. Ainsi la commande suivante fonctionne dans l&amp;#39;interprteur.\nensemble /a &quot;Mod=5 % 2&quot;  \nAlors que celle-ci ne fonctionne pas.\nensemble /a &quot;Mod=5 %% 2&quot;</p>"},{"id":"text-301","type":"text","heading":"","plain_text":"Dans un script, par contre, c&amp;#39;est l&amp;#39;inverse.","html":"<p>Dans un script, par contre, c&amp;#39;est l&amp;#39;inverse.</p>"},{"id":"text-302","type":"text","heading":"","plain_text":"1.23456\n@écho de\nensemble /a &quot;Mod=5 % 2&quot;\nécho Mod1: %Mod%\nensemble /a &quot;Mod=5 %% 2&quot;\nécho Mod2: %Mod%\npause","html":"<p>1.23456\n@écho de\nensemble /a &quot;Mod=5 % 2&quot;\nécho Mod1: %Mod%\nensemble /a &quot;Mod=5 %% 2&quot;\nécho Mod2: %Mod%\npause</p>"},{"id":"text-303","type":"text","heading":"","plain_text":"Ainsi, les oprations arithmtiques s&amp;#39;utilisent de manire classique dans les sous-expressions. Si une variable inexistante ou indfinie est utilise dans une sous-expression, elle prend la valeur 0, exemple avec le script 21.","html":"<p>Ainsi, les oprations arithmtiques s&amp;#39;utilisent de manire classique dans les sous-expressions. Si une variable inexistante ou indfinie est utilise dans une sous-expression, elle prend la valeur 0, exemple avec le script 21.</p>"},{"id":"text-304","type":"text","heading":"","plain_text":"1.234567.89dix.111213\n@écho de\nensemble /a &quot;Un=1&quot;\nensemble /a &quot;Deux=1 + 1&quot;\nensemble /a &quot;Trois=4 - 1&quot;\nensemble /a &quot;Quatre=2 * 2&quot;\nensemble /a &quot;Cinq=10 / 2&quot;\nensemble /a &quot;Six=26 %% 10&quot;\nensemble /a &quot;Sept=(( 2 + 1 ) * 2 ) + 1&quot;","html":"<p>1.234567.89dix.111213\n@écho de\nensemble /a &quot;Un=1&quot;\nensemble /a &quot;Deux=1 + 1&quot;\nensemble /a &quot;Trois=4 - 1&quot;\nensemble /a &quot;Quatre=2 * 2&quot;\nensemble /a &quot;Cinq=10 / 2&quot;\nensemble /a &quot;Six=26 %% 10&quot;\nensemble /a &quot;Sept=(( 2 + 1 ) * 2 ) + 1&quot;</p>"},{"id":"text-305","type":"text","heading":"","plain_text":"ensemble /a &quot;Huit=8+Dix&quot;,&quot;Neuf=10-Un&quot;\nécho %Un%, %Deux%, %Trois%, %Quatre%, %Cinq%, %Six%, %Sept%, %Huit%, %Neuf%\necho.\npause","html":"<p>ensemble /a &quot;Huit=8+Dix&quot;,&quot;Neuf=10-Un&quot;\nécho %Un%, %Deux%, %Trois%, %Quatre%, %Cinq%, %Six%, %Sept%, %Huit%, %Neuf%\necho.\npause</p>"},{"id":"text-306","type":"text","heading":"","plain_text":"L&amp;#39;attribution permet d&amp;#39;effectuer des oprations sur des variables existantes, si une variable inexistante ou indfinie est utilise, elle prend la valeur 0.","html":"<p>L&amp;#39;attribution permet d&amp;#39;effectuer des oprations sur des variables existantes, si une variable inexistante ou indfinie est utilise, elle prend la valeur 0.</p>"},{"id":"text-307","type":"text","heading":"","plain_text":"1.234567.89dix.1112\n@écho de\nensemble /a &quot;Attrib1=1&quot;,&quot;Attrib2=2&quot;,&quot;Attrib3=3&quot;,&quot;Attrib4=4&quot;,&quot;Attrib5=5&quot;","html":"<p>1.234567.89dix.1112\n@écho de\nensemble /a &quot;Attrib1=1&quot;,&quot;Attrib2=2&quot;,&quot;Attrib3=3&quot;,&quot;Attrib4=4&quot;,&quot;Attrib5=5&quot;</p>"},{"id":"text-308","type":"text","heading":"","plain_text":"ensemble /a &quot;Attrib0+=1&quot;\nensemble /a &quot;Attrib1+=1&quot;\nensemble /a &quot;Attrib2*=2&quot;\nensemble /a &quot;Attrib3-=2&quot;\nensemble /a &quot;Attrib4/=2&quot;\nensemble /a &quot;Attrib5%%=2&quot;\nécho %Attrib0%, %Attrib1%, %Attrib2%, %Attrib3%, %Attrib4%, %Attrib5%\necho.\npause","html":"<p>ensemble /a &quot;Attrib0+=1&quot;\nensemble /a &quot;Attrib1+=1&quot;\nensemble /a &quot;Attrib2*=2&quot;\nensemble /a &quot;Attrib3-=2&quot;\nensemble /a &quot;Attrib4/=2&quot;\nensemble /a &quot;Attrib5%%=2&quot;\nécho %Attrib0%, %Attrib1%, %Attrib2%, %Attrib3%, %Attrib4%, %Attrib5%\necho.\npause</p>"},{"id":"text-309","type":"text","heading":"","plain_text":"II-D-2. Les oprations logiques▲","html":"<p>II-D-2. Les oprations logiques▲</p>"},{"id":"text-310","type":"text","heading":"","plain_text":"Elles ne peuvent s&amp;#39;effectuer que sur des nombres et suivent les rgles de l&amp;#39;algbre de Boole. Les oprations logiques prises en charge par la commande set /a possdent, elles aussi, des oprateurs d&amp;#39;attribution. Exemple avec le script 23.","html":"<p>Elles ne peuvent s&amp;#39;effectuer que sur des nombres et suivent les rgles de l&amp;#39;algbre de Boole. Les oprations logiques prises en charge par la commande set /a possdent, elles aussi, des oprateurs d&amp;#39;attribution. Exemple avec le script 23.</p>"},{"id":"text-311","type":"text","heading":"","plain_text":"Oprateur logique","html":"<p>Oprateur logique</p>"},{"id":"text-312","type":"text","heading":"","plain_text":"Oprateur d&amp;#39;attribution","html":"<p>Oprateur d&amp;#39;attribution</p>"},{"id":"text-313","type":"text","heading":"","plain_text":"La description","html":"<p>La description</p>"},{"id":"text-314","type":"text","heading":"","plain_text":"Et","html":"<p>Et</p>"},{"id":"text-315","type":"text","heading":"","plain_text":"&amp;=","html":"<p>&amp;=</p>"},{"id":"text-316","type":"text","heading":"","plain_text":"ET logique au niveau du bit. (Bitwise AND)","html":"<p>ET logique au niveau du bit. (Bitwise AND)</p>"},{"id":"text-317","type":"text","heading":"","plain_text":"^","html":"<p>^</p>"},{"id":"text-318","type":"text","heading":"","plain_text":"^=","html":"<p>^=</p>"},{"id":"text-319","type":"text","heading":"","plain_text":"OU exclusif au niveau du bit. (Bitwise XOR)","html":"<p>OU exclusif au niveau du bit. (Bitwise XOR)</p>"},{"id":"text-320","type":"text","heading":"","plain_text":"|","html":"<p>|</p>"},{"id":"text-321","type":"text","heading":"","plain_text":"|=","html":"<p>|=</p>"},{"id":"text-322","type":"text","heading":"","plain_text":"OU inclusif au niveau du bit. (Bitwise OR)","html":"<p>OU inclusif au niveau du bit. (Bitwise OR)</p>"},{"id":"text-323","type":"text","heading":"","plain_text":"&lt;&lt;","html":"<p>&lt;&lt;</p>"},{"id":"text-324","type":"text","heading":"","plain_text":"&lt;&lt;=","html":"<p>&lt;&lt;=</p>"},{"id":"text-325","type":"text","heading":"","plain_text":"Dcalage logique vers la gauche. Le bit entrant est  zro (pour l&amp;#39;lvation par puissances de deux).","html":"<p>Dcalage logique vers la gauche. Le bit entrant est  zro (pour l&amp;#39;lvation par puissances de deux).</p>"},{"id":"text-326","type":"text","heading":"","plain_text":"&gt;&gt;","html":"<p>&gt;&gt;</p>"},{"id":"text-327","type":"text","heading":"","plain_text":"&gt;&gt;=","html":"<p>&gt;&gt;=</p>"},{"id":"text-328","type":"text","heading":"","plain_text":"Dcalage logique vers la droite. Le bit entrant est gal au bit de signe (pour la propagation du bit de signe).","html":"<p>Dcalage logique vers la droite. Le bit entrant est gal au bit de signe (pour la propagation du bit de signe).</p>"},{"id":"text-329","type":"text","heading":"","plain_text":"Tableau 5: Les oprateurs logiques","html":"<p>Tableau 5: Les oprateurs logiques</p>"},{"id":"text-330","type":"text","heading":"","plain_text":"@écho de\nensemble /a &quot;Val1=-2147483647 - 1&quot;\nensemble /a &quot;Val2=1&quot;\nensemble /a &quot;Val1SwitchL01=Val1&lt;&lt;1&quot;,&quot;Val1SwitchL15=Val1&lt;&lt;15&quot;,&quot;Val1SwitchL31=Val1&lt;&lt;31&quot;\nensemble /a &quot;Val2SwitchL01=Val2&lt;&lt;1&quot;,&quot;Val2SwitchL15=Val2&lt;&lt;15&quot;,&quot;Val2SwitchL31=Val2&lt;&lt;31&quot;\nensemble /a &quot;Val1SwitchR01=Val1&gt;&gt;1&quot;,&quot;Val1SwitchR15=Val1&gt;&gt;15&quot;,&quot;Val1SwitchR31=Val1&gt;&gt;31&quot;\nensemble /a &quot;Val2SwitchR01=Val2&gt;&gt;1&quot;,&quot;Val2SwitchR15=Val2&gt;&gt;15&quot;,&quot;Val2SwitchR31=Val2&gt;&gt;31&quot;\nensemble /a &quot;Val1AttribSwitchR=Val1&quot;,&quot;Val1AttribSwitchR&gt;&gt;=15&quot;\nensemble /a &quot;Val2AttribSwitchL=Val2&quot;,&quot;Val2AttribSwitchL&lt;&lt;=15&quot;\nécho %Val1% ^&lt;^&lt; 1: %Val1SwitchL01%\nécho %Val1% ^&lt;^&lt; 15: %Val1SwitchL15%\nécho %Val1% ^&lt;^&lt; 31: %Val1SwitchL31%\necho.\nécho %Val2% ^&lt;^&lt; 1: %Val2SwitchL01%\nécho %Val2% ^&lt;^&lt; 15: %Val2SwitchL15%\nécho %Val2% ^&lt;^&lt; 31: %Val2SwitchL31%\necho.\nécho %Val1% ^&gt;^&gt; 1: %Val1SwitchR01%\nécho %Val1% ^&gt;^&gt; 15: %Val1SwitchR15%\nécho %Val1% ^&gt;^&gt; 31: %Val1SwitchR31%\necho.\nécho %Val2% ^&gt;^&gt; 1: %Val2SwitchR01%\nécho %Val2% ^&gt;^&gt; 15: %Val2SwitchR15%\nécho %Val2% ^&gt;^&gt; 31: %Val2SwitchR31%\necho.\nécho %Val1% ^&gt;^&gt;= 15: %Val1AttribSwitchR%\nécho %Val2% ^&lt;^&lt;= 15: %Val2AttribSwitchL%\necho.\nensemble /a &quot;Val3=1431655765&quot;\nensemble /a &quot;Val4=-858993460&quot;\nensemble /a &quot;Val3LogicalOrVal4=Val3 | Val4&quot;\nensemble /a &quot;Val3LogicalXorVal4=Val3 ^ Val4&quot;\nensemble /a &quot;Val3LogicalAndVal4=Val3 Et Val4&quot;\nensemble /a &quot;Val3AttribOrVal4=Val3&quot;,&quot;Val3AttribOrVal4|=Val4&quot;\nensemble /a &quot;Val3AttribXorVal4=Val3&quot;,&quot;Val3AttribXorVal4^=Val4&quot;\nensemble /a &quot;Val3AttribAndVal4=Val3&quot;,&quot;Val3AttribAndVal4Et=Val4&quot;\nécho %Val3% ^| %Val4%: %Val3LogicalOrVal4%\nécho %Val3% ^|= %Val4%: %Val3AttribOrVal4%\necho.\nécho %Val3% ^^ %Val4%: %Val3LogicalXorVal4%\nécho %Val3% ^^= %Val4%: %Val3AttribXorVal4%\necho.\nécho %Val3% ^Et %Val4%: %Val3LogicalAndVal4%\nécho %Val3% ^Et= %Val4%: %Val3AttribAndVal4%\necho.\npause","html":"<p>@écho de\nensemble /a &quot;Val1=-2147483647 - 1&quot;\nensemble /a &quot;Val2=1&quot;\nensemble /a &quot;Val1SwitchL01=Val1&lt;&lt;1&quot;,&quot;Val1SwitchL15=Val1&lt;&lt;15&quot;,&quot;Val1SwitchL31=Val1&lt;&lt;31&quot;\nensemble /a &quot;Val2SwitchL01=Val2&lt;&lt;1&quot;,&quot;Val2SwitchL15=Val2&lt;&lt;15&quot;,&quot;Val2SwitchL31=Val2&lt;&lt;31&quot;\nensemble /a &quot;Val1SwitchR01=Val1&gt;&gt;1&quot;,&quot;Val1SwitchR15=Val1&gt;&gt;15&quot;,&quot;Val1SwitchR31=Val1&gt;&gt;31&quot;\nensemble /a &quot;Val2SwitchR01=Val2&gt;&gt;1&quot;,&quot;Val2SwitchR15=Val2&gt;&gt;15&quot;,&quot;Val2SwitchR31=Val2&gt;&gt;31&quot;\nensemble /a &quot;Val1AttribSwitchR=Val1&quot;,&quot;Val1AttribSwitchR&gt;&gt;=15&quot;\nensemble /a &quot;Val2AttribSwitchL=Val2&quot;,&quot;Val2AttribSwitchL&lt;&lt;=15&quot;\nécho %Val1% ^&lt;^&lt; 1: %Val1SwitchL01%\nécho %Val1% ^&lt;^&lt; 15: %Val1SwitchL15%\nécho %Val1% ^&lt;^&lt; 31: %Val1SwitchL31%\necho.\nécho %Val2% ^&lt;^&lt; 1: %Val2SwitchL01%\nécho %Val2% ^&lt;^&lt; 15: %Val2SwitchL15%\nécho %Val2% ^&lt;^&lt; 31: %Val2SwitchL31%\necho.\nécho %Val1% ^&gt;^&gt; 1: %Val1SwitchR01%\nécho %Val1% ^&gt;^&gt; 15: %Val1SwitchR15%\nécho %Val1% ^&gt;^&gt; 31: %Val1SwitchR31%\necho.\nécho %Val2% ^&gt;^&gt; 1: %Val2SwitchR01%\nécho %Val2% ^&gt;^&gt; 15: %Val2SwitchR15%\nécho %Val2% ^&gt;^&gt; 31: %Val2SwitchR31%\necho.\nécho %Val1% ^&gt;^&gt;= 15: %Val1AttribSwitchR%\nécho %Val2% ^&lt;^&lt;= 15: %Val2AttribSwitchL%\necho.\nensemble /a &quot;Val3=1431655765&quot;\nensemble /a &quot;Val4=-858993460&quot;\nensemble /a &quot;Val3LogicalOrVal4=Val3 | Val4&quot;\nensemble /a &quot;Val3LogicalXorVal4=Val3 ^ Val4&quot;\nensemble /a &quot;Val3LogicalAndVal4=Val3 Et Val4&quot;\nensemble /a &quot;Val3AttribOrVal4=Val3&quot;,&quot;Val3AttribOrVal4|=Val4&quot;\nensemble /a &quot;Val3AttribXorVal4=Val3&quot;,&quot;Val3AttribXorVal4^=Val4&quot;\nensemble /a &quot;Val3AttribAndVal4=Val3&quot;,&quot;Val3AttribAndVal4Et=Val4&quot;\nécho %Val3% ^| %Val4%: %Val3LogicalOrVal4%\nécho %Val3% ^|= %Val4%: %Val3AttribOrVal4%\necho.\nécho %Val3% ^^ %Val4%: %Val3LogicalXorVal4%\nécho %Val3% ^^= %Val4%: %Val3AttribXorVal4%\necho.\nécho %Val3% ^Et %Val4%: %Val3LogicalAndVal4%\nécho %Val3% ^Et= %Val4%: %Val3AttribAndVal4%\necho.\npause</p>"},{"id":"text-331","type":"text","heading":"","plain_text":"II-D-3. Les oprateurs unaires▲","html":"<p>II-D-3. Les oprateurs unaires▲</p>"},{"id":"text-332","type":"text","heading":"","plain_text":"N.B.: Dans les sections II.D.3, II.ELes nombres entiers signs en notation hexadcimale et II.FLes nombres entiers signs en notation octale de ce document, sont abords diffrents concepts de reprsentation numrique communment utiliss en informatique, tels que:","html":"<p>N.B.: Dans les sections II.D.3, II.ELes nombres entiers signs en notation hexadcimale et II.FLes nombres entiers signs en notation octale de ce document, sont abords diffrents concepts de reprsentation numrique communment utiliss en informatique, tels que:</p>"},{"id":"text-333","type":"text","heading":"","plain_text":"l&amp;#39;criture de nombre en binaire;\nl&amp;#39;criture de nombre en hexadcimal;\nl&amp;#39;criture de nombre en octal;\nla reprsentation des nombres en complment  un;\nla reprsentation des nombres entiers signs en complment  deux.","html":"<p>l&amp;#39;criture de nombre en binaire;\nl&amp;#39;criture de nombre en hexadcimal;\nl&amp;#39;criture de nombre en octal;\nla reprsentation des nombres en complment  un;\nla reprsentation des nombres entiers signs en complment  deux.</p>"},{"id":"text-334","type":"text","heading":"","plain_text":"Il est donc ncessaire, si vous ne les connaissez pas, de faire des recherches sur Wikipdia.\nLes oprateurs unaires ne s&amp;#39;appliquent qu&amp;#39;aux nombres qu&amp;#39;ils prcdent, ils ne possdent donc pas d&amp;#39;oprateur d&amp;#39;attribution. Leur syntaxe est la suivante (o     est l&amp;#39;oprateur unaire et     est le nombre auquel il s&amp;#39;applique).\n&lt;unaire&gt;&lt;nombre&gt;","html":"<p>Il est donc ncessaire, si vous ne les connaissez pas, de faire des recherches sur Wikipdia.\nLes oprateurs unaires ne s&amp;#39;appliquent qu&amp;#39;aux nombres qu&amp;#39;ils prcdent, ils ne possdent donc pas d&amp;#39;oprateur d&amp;#39;attribution. Leur syntaxe est la suivante (o     est l&amp;#39;oprateur unaire et     est le nombre auquel il s&amp;#39;applique).\n&lt;unaire&gt;&lt;nombre&gt;</p>"},{"id":"text-335","type":"text","heading":"","plain_text":"Oprateur unaire","html":"<p>Oprateur unaire</p>"},{"id":"text-336","type":"text","heading":"","plain_text":"La description","html":"<p>La description</p>"},{"id":"text-337","type":"text","heading":"","plain_text":"!","html":"<p>!</p>"},{"id":"text-338","type":"text","heading":"","plain_text":"NON logique, renvoie 1 si le nombre est gal  0 et 0 sinon. (Logical NOT).","html":"<p>NON logique, renvoie 1 si le nombre est gal  0 et 0 sinon. (Logical NOT).</p>"},{"id":"text-339","type":"text","heading":"","plain_text":"~","html":"<p>~</p>"},{"id":"text-340","type":"text","heading":"","plain_text":"NON au niveau du bit, complment  un. (Bitwise NOT)","html":"<p>NON au niveau du bit, complment  un. (Bitwise NOT)</p>"},{"id":"text-341","type":"text","heading":"","plain_text":"&#8211;","html":"<p>&#8211;</p>"},{"id":"text-342","type":"text","heading":"","plain_text":"Renvoie la valeur inverse, soit un nombre ngatif si le nombre d&amp;#39;origine est positif, complment  deux. (NEG)","html":"<p>Renvoie la valeur inverse, soit un nombre ngatif si le nombre d&amp;#39;origine est positif, complment  deux. (NEG)</p>"},{"id":"text-343","type":"text","heading":"","plain_text":"Tableau 6: Les oprateurs unaires \nExemple avec le script 24.","html":"<p>Tableau 6: Les oprateurs unaires \nExemple avec le script 24.</p>"},{"id":"text-344","type":"text","heading":"","plain_text":"1.234567.89dix.111213141516171819202122232425262728293031.323334\n@écho de","html":"<p>1.234567.89dix.111213141516171819202122232425262728293031.323334\n@écho de</p>"},{"id":"text-345","type":"text","heading":"","plain_text":"ensemble /a &quot;Val1=2147483647&quot;\nensemble /a &quot;Val2=1&quot;\nensemble /a &quot;Val3=0&quot;","html":"<p>ensemble /a &quot;Val1=2147483647&quot;\nensemble /a &quot;Val2=1&quot;\nensemble /a &quot;Val3=0&quot;</p>"},{"id":"text-346","type":"text","heading":"","plain_text":"ensemble /a &quot;LogicalNOT_Val1=!Val1&quot;\nensemble /a &quot;LogicalNOT_Val2=!Val2&quot;\nensemble /a &quot;LogicalNOT_Val3=!Val3&quot;","html":"<p>ensemble /a &quot;LogicalNOT_Val1=!Val1&quot;\nensemble /a &quot;LogicalNOT_Val2=!Val2&quot;\nensemble /a &quot;LogicalNOT_Val3=!Val3&quot;</p>"},{"id":"text-347","type":"text","heading":"","plain_text":"ensemble /a &quot;BitwiseNOT_Val1=~Val1&quot;\nensemble /a &quot;BitwiseNOT_Val2=~Val2&quot;\nensemble /a &quot;BitwiseNOT_Val3=~Val3&quot;","html":"<p>ensemble /a &quot;BitwiseNOT_Val1=~Val1&quot;\nensemble /a &quot;BitwiseNOT_Val2=~Val2&quot;\nensemble /a &quot;BitwiseNOT_Val3=~Val3&quot;</p>"},{"id":"text-348","type":"text","heading":"","plain_text":"ensemble /a &quot;NEG_Val1=-Val1&quot;\nensemble /a &quot;NEG_Val2=-Val2&quot;\nensemble /a &quot;NEG_Val3=-Val3&quot;","html":"<p>ensemble /a &quot;NEG_Val1=-Val1&quot;\nensemble /a &quot;NEG_Val2=-Val2&quot;\nensemble /a &quot;NEG_Val3=-Val3&quot;</p>"},{"id":"text-349","type":"text","heading":"","plain_text":"écho              ╔════════════════════════════════════════╗\nécho              ║                 Nombre                 ║\nécho ╔════════════╬═════════════╦═════════════╦════════════╣\nécho ║ Oprateur  ║ %Val1%  ║      %Val2%      ║     %Val3%      ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ LogicalNOT ║ %LogicalNOT_Val1%           ║ %LogicalNOT_Val2%           ║ %LogicalNOT_Val3%          ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ BitwiseNOT ║ %BitwiseNOT_Val1% ║ %BitwiseNOT_Val2%          ║ %BitwiseNOT_Val3%         ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ NEG        ║ %NEG_Val1% ║ %NEG_Val2%          ║ %NEG_Val3%          ║\nécho ╚════════════╩═════════════╩═════════════╩════════════╝","html":"<p>écho              ╔════════════════════════════════════════╗\nécho              ║                 Nombre                 ║\nécho ╔════════════╬═════════════╦═════════════╦════════════╣\nécho ║ Oprateur  ║ %Val1%  ║      %Val2%      ║     %Val3%      ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ LogicalNOT ║ %LogicalNOT_Val1%           ║ %LogicalNOT_Val2%           ║ %LogicalNOT_Val3%          ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ BitwiseNOT ║ %BitwiseNOT_Val1% ║ %BitwiseNOT_Val2%          ║ %BitwiseNOT_Val3%         ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ NEG        ║ %NEG_Val1% ║ %NEG_Val2%          ║ %NEG_Val3%          ║\nécho ╚════════════╩═════════════╩═════════════╩════════════╝</p>"},{"id":"text-350","type":"text","heading":"","plain_text":"echo.\npause","html":"<p>echo.\npause</p>"},{"id":"text-351","type":"text","heading":"","plain_text":"II-E. Les nombres entiers signs en notation hexadcimale▲","html":"<p>II-E. Les nombres entiers signs en notation hexadcimale▲</p>"},{"id":"text-352","type":"text","heading":"","plain_text":"Les nombres en notation hexadcimale doivent tre dclars comme des nombres entiers en notation dcimale (ce que nous avons utilis jusqu&amp;#39; maintenant) avec la commande set /a &quot;&quot; et toujours tre prfixs par 0x (chiffre zro suivi de la lettre x). The command set /a a pour effet de transformer toutes les valeurs entres en valeurs numriques. Si c&amp;#39;est une chane de caractres alors la commande cherchera une variable portant ce nom, si c&amp;#39;est un nombre hexadcimal alors la commande set /a codera le nombre tel quel en binaire. Cependant, mme si un nombre est fourni en notation hexadcimale, l&amp;#39;interprteur l&amp;#39;expanse toujours en notation dcimale, exemple avec le script 25.","html":"<p>Les nombres en notation hexadcimale doivent tre dclars comme des nombres entiers en notation dcimale (ce que nous avons utilis jusqu&amp;#39; maintenant) avec la commande set /a &quot;&quot; et toujours tre prfixs par 0x (chiffre zro suivi de la lettre x). The command set /a a pour effet de transformer toutes les valeurs entres en valeurs numriques. Si c&amp;#39;est une chane de caractres alors la commande cherchera une variable portant ce nom, si c&amp;#39;est un nombre hexadcimal alors la commande set /a codera le nombre tel quel en binaire. Cependant, mme si un nombre est fourni en notation hexadcimale, l&amp;#39;interprteur l&amp;#39;expanse toujours en notation dcimale, exemple avec le script 25.</p>"},{"id":"text-353","type":"text","heading":"","plain_text":"1.2345\n@écho de","html":"<p>1.2345\n@écho de</p>"},{"id":"text-354","type":"text","heading":"","plain_text":"ensemble /a &quot;Hexa=0x1 + 0x3&quot;\nécho Rsultat:    %Hexa%\npause","html":"<p>ensemble /a &quot;Hexa=0x1 + 0x3&quot;\nécho Rsultat:    %Hexa%\npause</p>"},{"id":"text-355","type":"text","heading":"","plain_text":"Le rsultat du script 25 nous montre que le calcul s&amp;#39;effectue correctement, de mme avec le script 26.","html":"<p>Le rsultat du script 25 nous montre que le calcul s&amp;#39;effectue correctement, de mme avec le script 26.</p>"},{"id":"text-356","type":"text","heading":"","plain_text":"1.23456\n@écho de","html":"<p>1.23456\n@écho de</p>"},{"id":"text-357","type":"text","heading":"","plain_text":"ensemble /a &quot;Hexa=0x5 + 0x8&quot;","html":"<p>ensemble /a &quot;Hexa=0x5 + 0x8&quot;</p>"},{"id":"text-358","type":"text","heading":"","plain_text":"écho Rsultat:    %Hexa%\npause","html":"<p>écho Rsultat:    %Hexa%\npause</p>"},{"id":"text-359","type":"text","heading":"","plain_text":"Jusque-l tout va bien mme si le rsultat n&amp;#39;est pas en notation hexadcimale, il est quand mme celui attendu. Le problme c&amp;#39;est que l&amp;#39;interprteur de commande utilise toujours la reprsentation en complment  deux pour coder un nombre entier sign. Ainsi, ds lors que l&amp;#39;on utilise un nombre en notation hexadcimale suprieur  0x7FFFFFFF (soit 2147483647 en notation dcimale), ce nombre est en fait un nombre ngatif comme le montre le script 27.","html":"<p>Jusque-l tout va bien mme si le rsultat n&amp;#39;est pas en notation hexadcimale, il est quand mme celui attendu. Le problme c&amp;#39;est que l&amp;#39;interprteur de commande utilise toujours la reprsentation en complment  deux pour coder un nombre entier sign. Ainsi, ds lors que l&amp;#39;on utilise un nombre en notation hexadcimale suprieur  0x7FFFFFFF (soit 2147483647 en notation dcimale), ce nombre est en fait un nombre ngatif comme le montre le script 27.</p>"},{"id":"text-360","type":"text","heading":"","plain_text":"1.234\n@écho de\nensemble /a &quot;Hexa=0x80000000&quot;\nécho Rsultat:    %Hexa%\npause","html":"<p>1.234\n@écho de\nensemble /a &quot;Hexa=0x80000000&quot;\nécho Rsultat:    %Hexa%\npause</p>"},{"id":"text-361","type":"text","heading":"","plain_text":"Un rsultat plutt droutant pour quiconque ne s&amp;#39;y attend pas, en effet la reprsentation en complment  deux code les nombres ngatifs de 0xFFFFFFFF, soit -1,  0x80000000, soit -2147483648. Exemple avec le script 28.","html":"<p>Un rsultat plutt droutant pour quiconque ne s&amp;#39;y attend pas, en effet la reprsentation en complment  deux code les nombres ngatifs de 0xFFFFFFFF, soit -1,  0x80000000, soit -2147483648. Exemple avec le script 28.</p>"},{"id":"text-362","type":"text","heading":"","plain_text":"1.23456\n@écho de","html":"<p>1.23456\n@écho de</p>"},{"id":"text-363","type":"text","heading":"","plain_text":"ensemble /a &quot;Hexa=0x80000000 + 0x7FFFFFFF&quot;","html":"<p>ensemble /a &quot;Hexa=0x80000000 + 0x7FFFFFFF&quot;</p>"},{"id":"text-364","type":"text","heading":"","plain_text":"écho Rsultat:    %Hexa%\npause","html":"<p>écho Rsultat:    %Hexa%\npause</p>"},{"id":"text-365","type":"text","heading":"","plain_text":"Comme vous pouvez le voir, on additionne 0x80000000 (soit -2147483648 en reprsentation hexadcimale en complment  deux)  0x7FFFFFFF (soit +2147483647, toujours dans la mme reprsentation) ce qui nous donne le rsultat de -1, le rsultat est un nombre entier sign dcimal utilisant la reprsentation en complment  deux cod sur 32bits soit 0xFFFFFFFF. Pour rcuprer un nombre hexadcimal, il faut le calculer  l&amp;#39;aide d&amp;#39;un algorithme de divisions successives; et pour les nombres ngatifs, de l&amp;#39;oprateur unaire Bitwise NOT dont dispose la commande set /a, voir le script 29.","html":"<p>Comme vous pouvez le voir, on additionne 0x80000000 (soit -2147483648 en reprsentation hexadcimale en complment  deux)  0x7FFFFFFF (soit +2147483647, toujours dans la mme reprsentation) ce qui nous donne le rsultat de -1, le rsultat est un nombre entier sign dcimal utilisant la reprsentation en complment  deux cod sur 32bits soit 0xFFFFFFFF. Pour rcuprer un nombre hexadcimal, il faut le calculer  l&amp;#39;aide d&amp;#39;un algorithme de divisions successives; et pour les nombres ngatifs, de l&amp;#39;oprateur unaire Bitwise NOT dont dispose la commande set /a, voir le script 29.</p>"},{"id":"text-366","type":"text","heading":"","plain_text":"1.234567.89dix.111213141516171819202122232425262728293031.323334353637383940414243444546\n@écho de","html":"<p>1.234567.89dix.111213141516171819202122232425262728293031.323334353637383940414243444546\n@écho de</p>"},{"id":"text-367","type":"text","heading":"","plain_text":"ensemble &quot;SInt32=-2147483648&quot;","html":"<p>ensemble &quot;SInt32=-2147483648&quot;</p>"},{"id":"text-368","type":"text","heading":"","plain_text":"ensemble /a &quot;SInt32&quot;","html":"<p>ensemble /a &quot;SInt32&quot;</p>"},{"id":"text-369","type":"text","heading":"","plain_text":"ensemble /a &quot;SInt32=~SInt32&quot;","html":"<p>ensemble /a &quot;SInt32=~SInt32&quot;</p>"},{"id":"text-370","type":"text","heading":"","plain_text":"ensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;","html":"<p>ensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;</p>"},{"id":"text-371","type":"text","heading":"","plain_text":"ensemble /a &quot;Nibble0=15 - Nibble0&quot;\nensemble /a &quot;Nibble1=15 - Nibble1&quot;\nensemble /a &quot;Nibble2=15 - Nibble2&quot;\nensemble /a &quot;Nibble3=15 - Nibble3&quot;\nensemble /a &quot;Nibble4=15 - Nibble4&quot;\nensemble /a &quot;Nibble5=15 - Nibble5&quot;\nensemble /a &quot;Nibble6=15 - Nibble6&quot;\nensemble /a &quot;Nibble7=15 - Nibble7&quot;","html":"<p>ensemble /a &quot;Nibble0=15 - Nibble0&quot;\nensemble /a &quot;Nibble1=15 - Nibble1&quot;\nensemble /a &quot;Nibble2=15 - Nibble2&quot;\nensemble /a &quot;Nibble3=15 - Nibble3&quot;\nensemble /a &quot;Nibble4=15 - Nibble4&quot;\nensemble /a &quot;Nibble5=15 - Nibble5&quot;\nensemble /a &quot;Nibble6=15 - Nibble6&quot;\nensemble /a &quot;Nibble7=15 - Nibble7&quot;</p>"},{"id":"text-372","type":"text","heading":"","plain_text":"ensemble &quot;LSW=%Nibble3% %Nibble2% %Nibble1% %Nibble0%&quot;","html":"<p>ensemble &quot;LSW=%Nibble3% %Nibble2% %Nibble1% %Nibble0%&quot;</p>"},{"id":"text-373","type":"text","heading":"","plain_text":"ensemble &quot;MSW=%Nibble7% %Nibble6% %Nibble5% %Nibble4%&quot;\nécho %MSW% %LSW%","html":"<p>ensemble &quot;MSW=%Nibble7% %Nibble6% %Nibble5% %Nibble4%&quot;\nécho %MSW% %LSW%</p>"},{"id":"text-374","type":"text","heading":"","plain_text":"ensemble &quot;SInt32=2147483647&quot;\nensemble /a &quot;SInt32&quot;\nensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;\nensemble &quot;LSW=%Nibble3% %Nibble2% %Nibble1% %Nibble0%&quot;\nensemble &quot;MSW=%Nibble7% %Nibble6% %Nibble5% %Nibble4%&quot;\nécho %MSW% %LSW%\npause","html":"<p>ensemble &quot;SInt32=2147483647&quot;\nensemble /a &quot;SInt32&quot;\nensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;\nensemble &quot;LSW=%Nibble3% %Nibble2% %Nibble1% %Nibble0%&quot;\nensemble &quot;MSW=%Nibble7% %Nibble6% %Nibble5% %Nibble4%&quot;\nécho %MSW% %LSW%\npause</p>"},{"id":"text-375","type":"text","heading":"","plain_text":"La sortie du script 29 nous donne bien des nombres hexadcimaux, mais dans une reprsentation dcimale (80000000 soit -2147483648 cod 0x80000000 et 715151515151515 soit 2147483647 cod 0x7FFFFFFF), pour pouvoir les convertir dans une notation hexadcimale; il nous faut utiliser les conditions que nous tudierons au prochain chapitre.","html":"<p>La sortie du script 29 nous donne bien des nombres hexadcimaux, mais dans une reprsentation dcimale (80000000 soit -2147483648 cod 0x80000000 et 715151515151515 soit 2147483647 cod 0x7FFFFFFF), pour pouvoir les convertir dans une notation hexadcimale; il nous faut utiliser les conditions que nous tudierons au prochain chapitre.</p>"},{"id":"text-376","type":"text","heading":"","plain_text":"II-F. Les nombres entiers signs en notation octale▲","html":"<p>II-F. Les nombres entiers signs en notation octale▲</p>"},{"id":"text-377","type":"text","heading":"","plain_text":"Les nombres en notation octale fonctionnent comme les autres et supportent les mmes oprations. Pour tre considrs par l&amp;#39;interprteur comme des nombres en notation octale, ils doivent tre prfixs par 0 (chiffre zro). Ils vont donc de -2147483648  2147483647 (cods sur 32bits) soit en notation octale -020000000000  +017777777777. Les nombres en notation octale sont cods tels quels en binaire, mais le principe selon lequel tout nombre est expans en entier sign en notation dcimale cod en complment  deux s&amp;#39;applique aussi pour eux. Notez aussi qu&amp;#39;ils ont le mme problme de transtypage que les nombres dcimaux, exemple avec le script 30.","html":"<p>Les nombres en notation octale fonctionnent comme les autres et supportent les mmes oprations. Pour tre considrs par l&amp;#39;interprteur comme des nombres en notation octale, ils doivent tre prfixs par 0 (chiffre zro). Ils vont donc de -2147483648  2147483647 (cods sur 32bits) soit en notation octale -020000000000  +017777777777. Les nombres en notation octale sont cods tels quels en binaire, mais le principe selon lequel tout nombre est expans en entier sign en notation dcimale cod en complment  deux s&amp;#39;applique aussi pour eux. Notez aussi qu&amp;#39;ils ont le mme problme de transtypage que les nombres dcimaux, exemple avec le script 30.</p>"},{"id":"text-378","type":"text","heading":"","plain_text":"@écho de\nensemble /a &quot;Octal1=-017777777777 - 1&quot;\nensemble /a &quot;Octal2=017777777777&quot;\nensemble /a &quot;Octal3=Octal1 + Octal2&quot;\nécho Octal1: %Octal1%\nécho Octal2: %Octal2%\nécho Octal3: %Octal3%\npause","html":"<p>@écho de\nensemble /a &quot;Octal1=-017777777777 - 1&quot;\nensemble /a &quot;Octal2=017777777777&quot;\nensemble /a &quot;Octal3=Octal1 + Octal2&quot;\nécho Octal1: %Octal1%\nécho Octal2: %Octal2%\nécho Octal3: %Octal3%\npause</p>"},{"id":"text-379","type":"text","heading":"","plain_text":"Notez aussi que l&amp;#39;utilisation des nombres 08 et 09 gnre toujours une erreur du fait qu&amp;#39;ils sont prfixs par 0; et, que 8 et 9 ne sont pas des chiffres octaux. Lorsque la commande set /a rencontre un 0 en dbut de nombre, elle considre que tous les chiffres qui se trouvent aprs sont des octaux et lorsqu&amp;#39;elle rencontre 8 ou 9, le transtypage ne peut s&amp;#39;effectuer et la commande se termine sur une erreur. Exemple avec le script 31.","html":"<p>Notez aussi que l&amp;#39;utilisation des nombres 08 et 09 gnre toujours une erreur du fait qu&amp;#39;ils sont prfixs par 0; et, que 8 et 9 ne sont pas des chiffres octaux. Lorsque la commande set /a rencontre un 0 en dbut de nombre, elle considre que tous les chiffres qui se trouvent aprs sont des octaux et lorsqu&amp;#39;elle rencontre 8 ou 9, le transtypage ne peut s&amp;#39;effectuer et la commande se termine sur une erreur. Exemple avec le script 31.</p>"},{"id":"text-380","type":"text","heading":"","plain_text":"@écho de\nécho Nombre 08:\nensemble /a &quot;Octal1=08&quot;\necho.\nécho Nombre 09:\nensemble /a &quot;Octal1=09&quot;\necho.\npause","html":"<p>@écho de\nécho Nombre 08:\nensemble /a &quot;Octal1=08&quot;\necho.\nécho Nombre 09:\nensemble /a &quot;Octal1=09&quot;\necho.\npause</p>"},{"id":"text-381","type":"text","heading":"","plain_text":"Les conditions sont supportes par la commande si. Elle permet d&amp;#39;effectuer des comparaisons de toutes sortes et d&amp;#39;excuter des commandes en fonction du rsultat de cette comparaison. autre et sinon si sont, quant  eux, des paramtres de la commande si et ne peuvent tre utiliss qu&amp;#39; l&amp;#39;intrieur de la commande si.\nIII-A. If, else, else if, not et /i▲","html":"<p>Les conditions sont supportes par la commande si. Elle permet d&amp;#39;effectuer des comparaisons de toutes sortes et d&amp;#39;excuter des commandes en fonction du rsultat de cette comparaison. autre et sinon si sont, quant  eux, des paramtres de la commande si et ne peuvent tre utiliss qu&amp;#39; l&amp;#39;intrieur de la commande si.\nIII-A. If, else, else if, not et /i▲</p>"},{"id":"text-382","type":"text","heading":"","plain_text":"The command si se traduit simplement par si: si la condition est vraie, fais ceci; elle peut tre accompagne par le paramtre autre qui se traduit par sinon: si la condition est vraie, fais ceci, sinon fais cela. La syntaxe de la commande si est la suivante.\nsi &lt;chattedition&gt; &lt;commande1&gt; [[[[autre &lt;commande2&gt;]  \nComme vous pouvez le voir sur la syntaxe de la commande si, si vient en premier suivi de sa     et d&amp;#39;une commande (), puis vient autre et une commande (), on peut le traduire par:","html":"<p>The command si se traduit simplement par si: si la condition est vraie, fais ceci; elle peut tre accompagne par le paramtre autre qui se traduit par sinon: si la condition est vraie, fais ceci, sinon fais cela. La syntaxe de la commande si est la suivante.\nsi &lt;chattedition&gt; &lt;commande1&gt; [[[[autre &lt;commande2&gt;]  \nComme vous pouvez le voir sur la syntaxe de la commande si, si vient en premier suivi de sa     et d&amp;#39;une commande (), puis vient autre et une commande (), on peut le traduire par:</p>"},{"id":"text-383","type":"text","heading":"","plain_text":"si (si) la     se vrifie alors la     s&amp;#39;excute;\nsinon (autre) c&amp;#39;est la     qui s&amp;#39;excute.","html":"<p>si (si) la     se vrifie alors la     s&amp;#39;excute;\nsinon (autre) c&amp;#39;est la     qui s&amp;#39;excute.</p>"},{"id":"text-384","type":"text","heading":"","plain_text":"Le paramtre autre ne peut tre utilis seul, il doit toujours tre utilis avec la commande si, et tre sur la mme ligne. Il y a deux rgles importantes  garder en tte lorsqu&amp;#39;on utilise des conditions:","html":"<p>Le paramtre autre ne peut tre utilis seul, il doit toujours tre utilis avec la commande si, et tre sur la mme ligne. Il y a deux rgles importantes  garder en tte lorsqu&amp;#39;on utilise des conditions:</p>"},{"id":"text-385","type":"text","heading":"","plain_text":"la premire est que l&amp;#39;on ne peut utiliser qu&amp;#39;un maximum de 2048 caractres (sous Windows XP et infrieur) ou un peu plus de 4096 caractres (sous Windows Vista et suprieur) par ligne de commande, limite trs vite atteinte avec plusieurs conditions, plus leurs commandes et leurs paramtres;\net la deuxime est que les parenthses sont prises en compte par l&amp;#39;interprteur de commande comme des oprateurs de bloc, c&amp;#39;est pour cela qu&amp;#39;il faut les chapper lorsque l&amp;#39;on ne s&amp;#39;en sert pas  cette fin.","html":"<p>la premire est que l&amp;#39;on ne peut utiliser qu&amp;#39;un maximum de 2048 caractres (sous Windows XP et infrieur) ou un peu plus de 4096 caractres (sous Windows Vista et suprieur) par ligne de commande, limite trs vite atteinte avec plusieurs conditions, plus leurs commandes et leurs paramtres;\net la deuxime est que les parenthses sont prises en compte par l&amp;#39;interprteur de commande comme des oprateurs de bloc, c&amp;#39;est pour cela qu&amp;#39;il faut les chapper lorsque l&amp;#39;on ne s&amp;#39;en sert pas  cette fin.</p>"},{"id":"text-386","type":"text","heading":"","plain_text":"Les oprateurs de bloc permettent d&amp;#39;utiliser un bloc de commande en lieu et place d&amp;#39;une commande. Ainsi, chaque fois que la syntaxe autorise l&amp;#39;utilisation d&amp;#39;une commande, celle-ci peut tre remplace par un bloc de commandes.\nAinsi la syntaxe de la commande si peut tre modifie de la manire suivante.","html":"<p>Les oprateurs de bloc permettent d&amp;#39;utiliser un bloc de commande en lieu et place d&amp;#39;une commande. Ainsi, chaque fois que la syntaxe autorise l&amp;#39;utilisation d&amp;#39;une commande, celle-ci peut tre remplace par un bloc de commandes.\nAinsi la syntaxe de la commande si peut tre modifie de la manire suivante.</p>"},{"id":"text-387","type":"text","heading":"","plain_text":"Syntaxe des conditions if et else avec parenthses\nSélectionnez","html":"<p>Syntaxe des conditions if et else avec parenthses\nSélectionnez</p>"},{"id":"text-388","type":"text","heading":"","plain_text":"si &lt;chattedition&gt; (\n    &lt;commande1&gt;\n    &lt;commande2&gt;\n) autre (\n    &lt;commande3&gt;\n    &lt;commande4&gt;\n)","html":"<p>si &lt;chattedition&gt; (\n    &lt;commande1&gt;\n    &lt;commande2&gt;\n) autre (\n    &lt;commande3&gt;\n    &lt;commande4&gt;\n)</p>"},{"id":"text-389","type":"text","heading":"","plain_text":"L&amp;#39;utilisation des parenthses comme oprateurs de bloc permet d&amp;#39;excuter plusieurs commandes, par condition vrifie, au lieu d&amp;#39;une seule. La parenthse ouvrante associe  une condition doit se trouver sur la mme ligne que cette dernire; si une autre condition est utilise conjointement, alors elle doit se trouver sur la mme ligne que la parenthse fermante associe  la condition qui la prcde.\nThe command si autorise aussi le paramtre sinon si qui se traduit par sinon si, ce dernier permet de poser une condition supplmentaire avant l&amp;#39;excution ventuelle du autre. La syntaxe serait la suivante.\nsi &lt;chattedition1&gt; &lt;cmd1&gt; [[[[autre si &lt;chattedition2&gt; &lt;cmd2&gt;][[[[autre &lt;cmd3&gt;]  \nLes oprateurs de bloc fonctionnent de la mme manire avec le paramtre sinon si en plus. Il faut aussi noter que le paramtre sinon si peut tre utilis autant de fois que l&amp;#39;on veut dans la commande si.","html":"<p>L&amp;#39;utilisation des parenthses comme oprateurs de bloc permet d&amp;#39;excuter plusieurs commandes, par condition vrifie, au lieu d&amp;#39;une seule. La parenthse ouvrante associe  une condition doit se trouver sur la mme ligne que cette dernire; si une autre condition est utilise conjointement, alors elle doit se trouver sur la mme ligne que la parenthse fermante associe  la condition qui la prcde.\nThe command si autorise aussi le paramtre sinon si qui se traduit par sinon si, ce dernier permet de poser une condition supplmentaire avant l&amp;#39;excution ventuelle du autre. La syntaxe serait la suivante.\nsi &lt;chattedition1&gt; &lt;cmd1&gt; [[[[autre si &lt;chattedition2&gt; &lt;cmd2&gt;][[[[autre &lt;cmd3&gt;]  \nLes oprateurs de bloc fonctionnent de la mme manire avec le paramtre sinon si en plus. Il faut aussi noter que le paramtre sinon si peut tre utilis autant de fois que l&amp;#39;on veut dans la commande si.</p>"},{"id":"text-390","type":"text","heading":"","plain_text":"Syntaxe des conditions if, else if et else\nSélectionnez","html":"<p>Syntaxe des conditions if, else if et else\nSélectionnez</p>"},{"id":"text-391","type":"text","heading":"","plain_text":"si &lt;chattedition1&gt; (\n    &lt;commande1&gt;\n    &lt;commande2&gt;\n) autre si &lt;chattedition2&gt; (\n    &lt;commande3&gt;\n    &lt;commande4&gt;\n) autre si &lt;chattedition3&gt; (\n    &lt;commande5&gt;\n    &lt;commande6&gt;\n) autre (\n    &lt;commande7&gt;\n    &lt;commande8&gt;\n)","html":"<p>si &lt;chattedition1&gt; (\n    &lt;commande1&gt;\n    &lt;commande2&gt;\n) autre si &lt;chattedition2&gt; (\n    &lt;commande3&gt;\n    &lt;commande4&gt;\n) autre si &lt;chattedition3&gt; (\n    &lt;commande5&gt;\n    &lt;commande6&gt;\n) autre (\n    &lt;commande7&gt;\n    &lt;commande8&gt;\n)</p>"},{"id":"text-392","type":"text","heading":"","plain_text":"La syntaxe ci-dessus pourrait tre traduite par:","html":"<p>La syntaxe ci-dessus pourrait tre traduite par:</p>"},{"id":"text-393","type":"text","heading":"","plain_text":"si (si) la     est vraie: excuter     et ;\nsinon si (sinon si)     est vraie: excuter     et ;\nsinon si (sinon si)     est vraie: excuter     et ;\nsinon (autre): excuter     et .","html":"<p>si (si) la     est vraie: excuter     et ;\nsinon si (sinon si)     est vraie: excuter     et ;\nsinon si (sinon si)     est vraie: excuter     et ;\nsinon (autre): excuter     et .</p>"},{"id":"text-394","type":"text","heading":"","plain_text":"Les conditions associes  la commande si et au paramtre sinon si prennent le modificateur ne pas qui permet d&amp;#39;excuter une commande si la condition est fausse. Le modificateur ne pas ne s&amp;#39;applique pas  toutes les conditions de la mme structure de contrle. Si le paramtre sinon si est utilis conjointement, son comportement dpendra de la prsence, ou non, du modificateur ne pas  l&amp;#39;intrieur de la condition.\nsi ne pas &lt;chattedition1&gt; &lt;cmd1&gt; autre si &lt;chattedition2&gt; &lt;cmd2&gt; autre &lt;cmd3&gt;  \nLa commande ci-dessus se traduit par:","html":"<p>Les conditions associes  la commande si et au paramtre sinon si prennent le modificateur ne pas qui permet d&amp;#39;excuter une commande si la condition est fausse. Le modificateur ne pas ne s&amp;#39;applique pas  toutes les conditions de la mme structure de contrle. Si le paramtre sinon si est utilis conjointement, son comportement dpendra de la prsence, ou non, du modificateur ne pas  l&amp;#39;intrieur de la condition.\nsi ne pas &lt;chattedition1&gt; &lt;cmd1&gt; autre si &lt;chattedition2&gt; &lt;cmd2&gt; autre &lt;cmd3&gt;  \nLa commande ci-dessus se traduit par:</p>"},{"id":"text-395","type":"text","heading":"","plain_text":"si (si) la     est fausse: excuter la ;\nsinon (sinon si), si la     est vraie: excuter la ;\nsinon (autre), si la     est vraie et que la     est fausse, excuter la .","html":"<p>si (si) la     est fausse: excuter la ;\nsinon (sinon si), si la     est vraie: excuter la ;\nsinon (autre), si la     est vraie et que la     est fausse, excuter la .</p>"},{"id":"text-396","type":"text","heading":"","plain_text":"Les conditions associes  la commande si et au paramtre sinon si prennent le modificateur /i qui permet de ne pas tenir compte de la casse lorsque la condition traite des chanes de caractres. Ce modificateur ne fonctionne que sur les conditions qui traitent des chanes de caractres. Si le paramtre sinon si est utilis conjointement, son comportement dpendra de la prsence, ou non, du modificateur /i  l&amp;#39;intrieur de la condition.\nsi /i &lt;chattedition1&gt; &lt;cmd1&gt; autre si /i &lt;chattedition2&gt; &lt;cmd2&gt; autre &lt;cmd3&gt;  \nSe traduit par:","html":"<p>Les conditions associes  la commande si et au paramtre sinon si prennent le modificateur /i qui permet de ne pas tenir compte de la casse lorsque la condition traite des chanes de caractres. Ce modificateur ne fonctionne que sur les conditions qui traitent des chanes de caractres. Si le paramtre sinon si est utilis conjointement, son comportement dpendra de la prsence, ou non, du modificateur /i  l&amp;#39;intrieur de la condition.\nsi /i &lt;chattedition1&gt; &lt;cmd1&gt; autre si /i &lt;chattedition2&gt; &lt;cmd2&gt; autre &lt;cmd3&gt;  \nSe traduit par:</p>"},{"id":"text-397","type":"text","heading":"","plain_text":"si (si) la     est vraie, sans tenir compte de la casse, excuter la ;\nsinon si (sinon si) la     est vraie, sans tenir compte de la casse, excuter la ;\nsinon (autre), si la     est fausse sans tenir compte de la casse et que la     est fausse sans tenir compte de la casse, excuter la .","html":"<p>si (si) la     est vraie, sans tenir compte de la casse, excuter la ;\nsinon si (sinon si) la     est vraie, sans tenir compte de la casse, excuter la ;\nsinon (autre), si la     est fausse sans tenir compte de la casse et que la     est fausse sans tenir compte de la casse, excuter la .</p>"},{"id":"text-398","type":"text","heading":"","plain_text":"Nous allons maintenant voir quelles sont les conditions supportes par la commande si et le paramtre sinon si.","html":"<p>Nous allons maintenant voir quelles sont les conditions supportes par la commande si et le paramtre sinon si.</p>"},{"id":"text-399","type":"text","heading":"","plain_text":"III-B. La condition exist ▲","html":"<p>III-B. La condition exist ▲</p>"},{"id":"text-400","type":"text","heading":"","plain_text":"La condition exister     permet de tester si un chemin d&amp;#39;accs ou un fichier existe. Elle peut tre utilise avec le paramtre sinon si et le modificateur ne pas. Le modificateur /i ne fonctionne pas sur cette condition. Sa syntaxe est la suivante, o     est le chemin d&amp;#39;accs ou le fichier  tester. Si le chemin d&amp;#39;accs contient des espaces, il doit tre plac entre guillemets.\nsi [[[[ne pas] exister [« ]&lt;chemin&gt;[« ] &lt;ordre&gt;  \nExemple avec le script 32.","html":"<p>La condition exister     permet de tester si un chemin d&amp;#39;accs ou un fichier existe. Elle peut tre utilise avec le paramtre sinon si et le modificateur ne pas. Le modificateur /i ne fonctionne pas sur cette condition. Sa syntaxe est la suivante, o     est le chemin d&amp;#39;accs ou le fichier  tester. Si le chemin d&amp;#39;accs contient des espaces, il doit tre plac entre guillemets.\nsi [[[[ne pas] exister [« ]&lt;chemin&gt;[« ] &lt;ordre&gt;  \nExemple avec le script 32.</p>"},{"id":"text-401","type":"text","heading":"","plain_text":"1.23\n@écho de\nsi exister &quot;%cd%&quot; écho %cd% existe bien.\npause","html":"<p>1.23\n@écho de\nsi exister &quot;%cd%&quot; écho %cd% existe bien.\npause</p>"},{"id":"text-402","type":"text","heading":"","plain_text":"III-C. La condition defined ▲","html":"<p>III-C. La condition defined ▲</p>"},{"id":"text-403","type":"text","heading":"","plain_text":"La condition défini     permet de tester si une variable a une valeur dfinie. Elle peut tre utilise avec le paramtre sinon si, et le modificateur ne pas. Le modificateur /i ne fonctionne pas sur cette condition. Voir le script 33.\nsi [[[[ne pas] défini &lt;variable&gt; &lt;ordre&gt;","html":"<p>La condition défini     permet de tester si une variable a une valeur dfinie. Elle peut tre utilise avec le paramtre sinon si, et le modificateur ne pas. Le modificateur /i ne fonctionne pas sur cette condition. Voir le script 33.\nsi [[[[ne pas] défini &lt;variable&gt; &lt;ordre&gt;</p>"},{"id":"text-404","type":"text","heading":"","plain_text":"1.234567.89dix.111213141516171819\n@écho de\nensemble &quot;Def1=&quot;\nensemble &quot;Def2=abcd&quot;\nsi défini Def1 (\n    écho Def1 est dfinie.\n) autre (\n    écho Def1 n&amp;#39;est pas dfinie.\n)\nsi défini Def2 (\n    écho Def2 est dfinie.\n) autre (\n    écho Def2 n&amp;#39;est pas dfinie.\n)\nsi ne pas défini Def3 (\n    écho Def3 n&amp;#39;est pas dfinie.\n) autre (\n    écho Def3 est dfinie.\n)\npause","html":"<p>1.234567.89dix.111213141516171819\n@écho de\nensemble &quot;Def1=&quot;\nensemble &quot;Def2=abcd&quot;\nsi défini Def1 (\n    écho Def1 est dfinie.\n) autre (\n    écho Def1 n&amp;#39;est pas dfinie.\n)\nsi défini Def2 (\n    écho Def2 est dfinie.\n) autre (\n    écho Def2 n&amp;#39;est pas dfinie.\n)\nsi ne pas défini Def3 (\n    écho Def3 n&amp;#39;est pas dfinie.\n) autre (\n    écho Def3 est dfinie.\n)\npause</p>"},{"id":"text-405","type":"text","heading":"","plain_text":"III-D. La condition errorlevel ▲","html":"<p>III-D. La condition errorlevel ▲</p>"},{"id":"text-406","type":"text","heading":"","plain_text":"La condition errorlevel     permet de tester si le code d&amp;#39;erreur de la dernire commande excute est gal ou suprieur au nombre donn en . Le code d&amp;#39;erreur est un nombre renvoy par une commande pour donner des informations sur le droulement de son excution, il est aussi accessible via la variable ErrorLevel. En gnral, le code d&amp;#39;erreur est 0 si aucune erreur ne s&amp;#39;est produite; et il est gal ou suprieur  1 si une erreur s&amp;#39;est produite, chaque code d&amp;#39;erreur correspondant  une erreur prcise. Le nom de variable ErrorLevel est un nom de variable rserv, vous pouvez la modifier en l&amp;#39;crasant avec une nouvelle valeur, cependant, elle prendra la valeur donne jusqu&amp;#39; la fin du script. Attention toutefois, il arrive que des commandes ne modifient pas la variable ErrorLevel ou bien qu&amp;#39;elle lui donne toujours le code 0, ceci est souvent d  de mauvaises pratiques de programmation, fiez-vous  des codes d&amp;#39;erreurs connues et ayant une valeur concrte, ne traitez pas les autres, pour ce faire, consultez le manuel ou l&amp;#39;aide de la commande concerne. Si le modificateur ne pas est utilis, la     seras excute seulement si ErrorLevel est infrieur  l&amp;#39;. Le modificateur /i n&amp;#39;est pas support par la condition errorlevel .\nsi [[[[ne pas] errorlevel &lt;oprande&gt; &lt;ordre&gt;","html":"<p>La condition errorlevel     permet de tester si le code d&amp;#39;erreur de la dernire commande excute est gal ou suprieur au nombre donn en . Le code d&amp;#39;erreur est un nombre renvoy par une commande pour donner des informations sur le droulement de son excution, il est aussi accessible via la variable ErrorLevel. En gnral, le code d&amp;#39;erreur est 0 si aucune erreur ne s&amp;#39;est produite; et il est gal ou suprieur  1 si une erreur s&amp;#39;est produite, chaque code d&amp;#39;erreur correspondant  une erreur prcise. Le nom de variable ErrorLevel est un nom de variable rserv, vous pouvez la modifier en l&amp;#39;crasant avec une nouvelle valeur, cependant, elle prendra la valeur donne jusqu&amp;#39; la fin du script. Attention toutefois, il arrive que des commandes ne modifient pas la variable ErrorLevel ou bien qu&amp;#39;elle lui donne toujours le code 0, ceci est souvent d  de mauvaises pratiques de programmation, fiez-vous  des codes d&amp;#39;erreurs connues et ayant une valeur concrte, ne traitez pas les autres, pour ce faire, consultez le manuel ou l&amp;#39;aide de la commande concerne. Si le modificateur ne pas est utilis, la     seras excute seulement si ErrorLevel est infrieur  l&amp;#39;. Le modificateur /i n&amp;#39;est pas support par la condition errorlevel .\nsi [[[[ne pas] errorlevel &lt;oprande&gt; &lt;ordre&gt;</p>"},{"id":"text-407","type":"text","heading":"","plain_text":"1.234567.89dix.1112\n@écho de","html":"<p>1.234567.89dix.1112\n@écho de</p>"},{"id":"text-408","type":"text","heading":"","plain_text":"setlocal\nensemble &quot;TestError1=Un petit test&quot;\nsi ne pas errorlevel 1 écho Aucune erreur dans la premire commande.\necho.\nensemble /a &quot;TestError2=09&quot;\necho.\nsi errorlevel 1 écho Le code d&amp;#39;erreur des nombres invalides est %ErrorLevel%.\npause","html":"<p>setlocal\nensemble &quot;TestError1=Un petit test&quot;\nsi ne pas errorlevel 1 écho Aucune erreur dans la premire commande.\necho.\nensemble /a &quot;TestError2=09&quot;\necho.\nsi errorlevel 1 écho Le code d&amp;#39;erreur des nombres invalides est %ErrorLevel%.\npause</p>"},{"id":"text-409","type":"text","heading":"","plain_text":"endlocal","html":"<p>endlocal</p>"},{"id":"text-410","type":"text","heading":"","plain_text":"III-E. La condition cmdextversion ▲","html":"<p>III-E. La condition cmdextversion ▲</p>"},{"id":"text-411","type":"text","heading":"","plain_text":"La condition cmdextversion     permet de tester si le numro de version des extensions de commande est gal ou suprieur au nombre donn en . Le numro de version des extensions de commande est  prendre en compte, car selon la version des extensions, le traitement des commandes peut tre modifi. Reportez-vous  l&amp;#39;aide concernant les commandes cites dans le tableau 7 pour plus de dtails. Chaque commande modifie l&amp;#39;est d&amp;#39;une manire qui lui est propre; ainsi la commande assoc ne sera pas modifie de la mme manire que la commande début, tout simplement parce qu&amp;#39;elle n&amp;#39;excute pas du tout la mme opration.","html":"<p>La condition cmdextversion     permet de tester si le numro de version des extensions de commande est gal ou suprieur au nombre donn en . Le numro de version des extensions de commande est  prendre en compte, car selon la version des extensions, le traitement des commandes peut tre modifi. Reportez-vous  l&amp;#39;aide concernant les commandes cites dans le tableau 7 pour plus de dtails. Chaque commande modifie l&amp;#39;est d&amp;#39;une manire qui lui est propre; ainsi la commande assoc ne sera pas modifie de la mme manire que la commande début, tout simplement parce qu&amp;#39;elle n&amp;#39;excute pas du tout la mme opration.</p>"},{"id":"text-412","type":"text","heading":"","plain_text":"DEL ou ERASE","html":"<p>DEL ou ERASE</p>"},{"id":"text-413","type":"text","heading":"","plain_text":"COLOR","html":"<p>COLOR</p>"},{"id":"text-414","type":"text","heading":"","plain_text":"CD ou CHDIR","html":"<p>CD ou CHDIR</p>"},{"id":"text-415","type":"text","heading":"","plain_text":"MD ou MKDIR","html":"<p>MD ou MKDIR</p>"},{"id":"text-416","type":"text","heading":"","plain_text":"PROMPT","html":"<p>PROMPT</p>"},{"id":"text-417","type":"text","heading":"","plain_text":"PUSHD","html":"<p>PUSHD</p>"},{"id":"text-418","type":"text","heading":"","plain_text":"POPD","html":"<p>POPD</p>"},{"id":"text-419","type":"text","heading":"","plain_text":"ENSEMBLE","html":"<p>ENSEMBLE</p>"},{"id":"text-420","type":"text","heading":"","plain_text":"SETLOCAL","html":"<p>SETLOCAL</p>"},{"id":"text-421","type":"text","heading":"","plain_text":"ENDLOCAL","html":"<p>ENDLOCAL</p>"},{"id":"text-422","type":"text","heading":"","plain_text":"IF","html":"<p>IF</p>"},{"id":"text-423","type":"text","heading":"","plain_text":"POUR","html":"<p>POUR</p>"},{"id":"text-424","type":"text","heading":"","plain_text":"CALL","html":"<p>CALL</p>"},{"id":"text-425","type":"text","heading":"","plain_text":"SHIFT","html":"<p>SHIFT</p>"},{"id":"text-426","type":"text","heading":"","plain_text":"GOTO","html":"<p>GOTO</p>"},{"id":"text-427","type":"text","heading":"","plain_text":"START","html":"<p>START</p>"},{"id":"text-428","type":"text","heading":"","plain_text":"ASSOC","html":"<p>ASSOC</p>"},{"id":"text-429","type":"text","heading":"","plain_text":"FTYPE","html":"<p>FTYPE</p>"},{"id":"text-430","type":"text","heading":"","plain_text":"Tableau 7: Commandes soumises aux extensions \nLa condition cmdextversion     est toujours fausse si les extensions de commande sont dsactives; la premire version des extensions est la version 1 et le numro de version est incrment de 1  chaque nouvelle version. Si le numro de version des extensions est gal ou suprieur  la valeur donne dans la condition cmdextversion     alors la condition est vraie; les extensions de commande tant rtrocompatibles d&amp;#39;une version  l&amp;#39;autre. Si le modificateur ne pas est utilis, la condition est vraie si le numro de version des extensions de commande est infrieur au nombre donn en . La condition cmdextversion     ne prend pas le modificateur /i. Le tableau 8 donne la liste des rvisions d&amp;#39;extensions de commande en fonction du systme d&amp;#39;exploitation.","html":"<p>Tableau 7: Commandes soumises aux extensions \nLa condition cmdextversion     est toujours fausse si les extensions de commande sont dsactives; la premire version des extensions est la version 1 et le numro de version est incrment de 1  chaque nouvelle version. Si le numro de version des extensions est gal ou suprieur  la valeur donne dans la condition cmdextversion     alors la condition est vraie; les extensions de commande tant rtrocompatibles d&amp;#39;une version  l&amp;#39;autre. Si le modificateur ne pas est utilis, la condition est vraie si le numro de version des extensions de commande est infrieur au nombre donn en . La condition cmdextversion     ne prend pas le modificateur /i. Le tableau 8 donne la liste des rvisions d&amp;#39;extensions de commande en fonction du systme d&amp;#39;exploitation.</p>"},{"id":"text-431","type":"text","heading":"","plain_text":"Numro de version","html":"<p>Numro de version</p>"},{"id":"text-432","type":"text","heading":"","plain_text":"Compatibilit","html":"<p>Compatibilit</p>"},{"id":"text-433","type":"text","heading":"","plain_text":"1","html":"<p>1</p>"},{"id":"text-434","type":"text","heading":"","plain_text":"Windows 2000.","html":"<p>Windows 2000.</p>"},{"id":"text-435","type":"text","heading":"","plain_text":"2","html":"<p>2</p>"},{"id":"text-436","type":"text","heading":"","plain_text":"Tous les systmes NT XP et suprieur.","html":"<p>Tous les systmes NT XP et suprieur.</p>"},{"id":"text-437","type":"text","heading":"","plain_text":"Tableau 8: Rvisions des extensions de commande \nsi [[[[ne pas] cmdextversion &lt;oprande&gt; &lt;ordre&gt;","html":"<p>Tableau 8: Rvisions des extensions de commande \nsi [[[[ne pas] cmdextversion &lt;oprande&gt; &lt;ordre&gt;</p>"},{"id":"text-438","type":"text","heading":"","plain_text":"1.234567.89dix.111213141516171819\n@écho de","html":"<p>1.234567.89dix.111213141516171819\n@écho de</p>"},{"id":"text-439","type":"text","heading":"","plain_text":"setlocal enableextensions\nsi ne pas cmdextversion 1 (\n    écho CmdExtVersion 1:  ne pas Detected.\n) autre (\n    écho CmdExtVersion 1:  Detected. \n)\nsi cmdextversion 2 (\n    écho CmdExtVersion 2:  Detected.\n) autre (\n    écho CmdExtVersion 2:  ne pas Detected. \n)\nsi cmdextversion 3 (\n    écho CmdExtVersion 3:  Detected.\n) autre (\n    écho CmdExtVersion 3:  ne pas Detected. \n)\npause","html":"<p>setlocal enableextensions\nsi ne pas cmdextversion 1 (\n    écho CmdExtVersion 1:  ne pas Detected.\n) autre (\n    écho CmdExtVersion 1:  Detected. \n)\nsi cmdextversion 2 (\n    écho CmdExtVersion 2:  Detected.\n) autre (\n    écho CmdExtVersion 2:  ne pas Detected. \n)\nsi cmdextversion 3 (\n    écho CmdExtVersion 3:  Detected.\n) autre (\n    écho CmdExtVersion 3:  ne pas Detected. \n)\npause</p>"},{"id":"text-440","type":"text","heading":"","plain_text":"III-F. La condition   ▲","html":"<p>III-F. La condition   ▲</p>"},{"id":"text-441","type":"text","heading":"","plain_text":"La condition       permet d&amp;#39;effectuer des comparaisons sur des chanes et des nombres. La comparaison de chanes est effectue au moyen d&amp;#39;un XOR au niveau du bit entre chaque octet d&amp;#39;une chane puis les rsultats obtenus sur les diffrentes chanes sont compars numriquement. Si les deux chanes ne sont constitues que de chiffres alors elles sont transtypes en nombre puis values numriquement. Les comparateurs, pris en compte par la condition   , sont lists dans le tableau 9. La condition       prend les modificateurs ne pas et /i. Sa syntaxe est la suivante, si les chanes contiennent des espaces, elles doivent tre places entre guillemets.\nsi [/i]    [[[[ne pas] [« ]&lt;chane1&gt;[« ] &lt;comparateur&gt; [« ]&lt;chane2&gt;[« ] &lt;cmd&gt;","html":"<p>La condition       permet d&amp;#39;effectuer des comparaisons sur des chanes et des nombres. La comparaison de chanes est effectue au moyen d&amp;#39;un XOR au niveau du bit entre chaque octet d&amp;#39;une chane puis les rsultats obtenus sur les diffrentes chanes sont compars numriquement. Si les deux chanes ne sont constitues que de chiffres alors elles sont transtypes en nombre puis values numriquement. Les comparateurs, pris en compte par la condition   , sont lists dans le tableau 9. La condition       prend les modificateurs ne pas et /i. Sa syntaxe est la suivante, si les chanes contiennent des espaces, elles doivent tre places entre guillemets.\nsi [/i]    [[[[ne pas] [« ]&lt;chane1&gt;[« ] &lt;comparateur&gt; [« ]&lt;chane2&gt;[« ] &lt;cmd&gt;</p>"},{"id":"text-442","type":"text","heading":"","plain_text":"Comparateur","html":"<p>Comparateur</p>"},{"id":"text-443","type":"text","heading":"","plain_text":"La description","html":"<p>La description</p>"},{"id":"text-444","type":"text","heading":"","plain_text":"EQU","html":"<p>EQU</p>"},{"id":"text-445","type":"text","heading":"","plain_text":"EQUal, la condition est vraie si les deux chanes sont gales.","html":"<p>EQUal, la condition est vraie si les deux chanes sont gales.</p>"},{"id":"text-446","type":"text","heading":"","plain_text":"NEQ","html":"<p>NEQ</p>"},{"id":"text-447","type":"text","heading":"","plain_text":"Not EQual, la condition est vraie si les deux chanes sont diffrentes.","html":"<p>Not EQual, la condition est vraie si les deux chanes sont diffrentes.</p>"},{"id":"text-448","type":"text","heading":"","plain_text":"LSS","html":"<p>LSS</p>"},{"id":"text-449","type":"text","heading":"","plain_text":"LeSS, la condition est vraie si chane1 est infrieure  chane2.","html":"<p>LeSS, la condition est vraie si chane1 est infrieure  chane2.</p>"},{"id":"text-450","type":"text","heading":"","plain_text":"LEQ","html":"<p>LEQ</p>"},{"id":"text-451","type":"text","heading":"","plain_text":"Less or EQual, la condition est vraie si chane1 est infrieure ou gale  chane2.","html":"<p>Less or EQual, la condition est vraie si chane1 est infrieure ou gale  chane2.</p>"},{"id":"text-452","type":"text","heading":"","plain_text":"GTR","html":"<p>GTR</p>"},{"id":"text-453","type":"text","heading":"","plain_text":"GreaTeR, la condition est vraie si chane1 est suprieure  chane2.","html":"<p>GreaTeR, la condition est vraie si chane1 est suprieure  chane2.</p>"},{"id":"text-454","type":"text","heading":"","plain_text":"GEQ","html":"<p>GEQ</p>"},{"id":"text-455","type":"text","heading":"","plain_text":"Greater or EQual, la condition est vraie si chane1 est suprieure ou gale  chane2.","html":"<p>Greater or EQual, la condition est vraie si chane1 est suprieure ou gale  chane2.</p>"},{"id":"text-456","type":"text","heading":"","plain_text":"Tableau 9: Oprateurs de comparaison","html":"<p>Tableau 9: Oprateurs de comparaison</p>"},{"id":"text-457","type":"text","heading":"","plain_text":"1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.\n@écho de\ncls\nensemble &quot;Chane1=Un Petit test&quot;","html":"<p>1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.\n@écho de\ncls\nensemble &quot;Chane1=Un Petit test&quot;</p>"},{"id":"text-458","type":"text","heading":"","plain_text":"ensemble /a &quot;C1X=0x55^0x6E^0x20^0x50^0x65^0x74^0x69^0x74^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane2=Un petit test&quot;","html":"<p>ensemble /a &quot;C1X=0x55^0x6E^0x20^0x50^0x65^0x74^0x69^0x74^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane2=Un petit test&quot;</p>"},{"id":"text-459","type":"text","heading":"","plain_text":"ensemble /a &quot;C2X=0x55^0x6E^0x20^0x70^0x65^0x74^0x69^0x74^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane3=Un grand test&quot;","html":"<p>ensemble /a &quot;C2X=0x55^0x6E^0x20^0x70^0x65^0x74^0x69^0x74^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane3=Un grand test&quot;</p>"},{"id":"text-460","type":"text","heading":"","plain_text":"ensemble /a &quot;C3X=0x55^0x6E^0x20^0x67^0x72^0x62^0x6E^0x64^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane4=41&quot;\nensemble &quot;Chane5=12&quot;\nécho               Chane 1         Chane 2          Chane 3\nécho =============================================================\nécho Chane        %Chane1%    %Chane2%    %Chane3%\nécho évaluation    %C1X%              %C2X%               %C3X%\necho.\nsi &quot;%Chane1%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane1%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane1%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi /i &quot;%Chane1%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane1%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane1%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi &quot;%Chane1%&quot; GTR &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane3%&quot;.\n) autre si &quot;%Chane1%&quot; EQU &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane3%&quot;.\n) autre si &quot;%Chane1%&quot; LSS &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane3%&quot;.\n)\nsi /i &quot;%Chane1%&quot; GTR &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane3%&quot;.\n) autre si /i &quot;%Chane1%&quot; EQU &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane3%&quot;.\n) autre si /i &quot;%Chane1%&quot; LSS &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane3%&quot;.\n)\nsi &quot;%Chane3%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane3%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane3%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi /i &quot;%Chane3%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane3%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane3%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\necho.\necho.\nécho               Chane 4    Chane 5         \nécho =============================================================\nécho Chane        %Chane4%          %Chane5%\necho.\nsi %Chane4% GTR %Chane5% (\n    écho %Chane4% est suprieur  %Chane5%.\n) autre si %Chane4% EQU %Chane5% (\n    écho %Chane4% est gal  %Chane5%.\n) autre si %Chane4% LSS %Chane5% (\n    écho %Chane4% est infrieur  %Chane5%.\n)\necho.\npause","html":"<p>ensemble /a &quot;C3X=0x55^0x6E^0x20^0x67^0x72^0x62^0x6E^0x64^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane4=41&quot;\nensemble &quot;Chane5=12&quot;\nécho               Chane 1         Chane 2          Chane 3\nécho =============================================================\nécho Chane        %Chane1%    %Chane2%    %Chane3%\nécho évaluation    %C1X%              %C2X%               %C3X%\necho.\nsi &quot;%Chane1%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane1%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane1%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi /i &quot;%Chane1%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane1%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane1%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi &quot;%Chane1%&quot; GTR &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane3%&quot;.\n) autre si &quot;%Chane1%&quot; EQU &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane3%&quot;.\n) autre si &quot;%Chane1%&quot; LSS &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane3%&quot;.\n)\nsi /i &quot;%Chane1%&quot; GTR &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane3%&quot;.\n) autre si /i &quot;%Chane1%&quot; EQU &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane3%&quot;.\n) autre si /i &quot;%Chane1%&quot; LSS &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane3%&quot;.\n)\nsi &quot;%Chane3%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane3%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane3%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi /i &quot;%Chane3%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane3%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane3%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\necho.\necho.\nécho               Chane 4    Chane 5         \nécho =============================================================\nécho Chane        %Chane4%          %Chane5%\necho.\nsi %Chane4% GTR %Chane5% (\n    écho %Chane4% est suprieur  %Chane5%.\n) autre si %Chane4% EQU %Chane5% (\n    écho %Chane4% est gal  %Chane5%.\n) autre si %Chane4% LSS %Chane5% (\n    écho %Chane4% est infrieur  %Chane5%.\n)\necho.\npause</p>"},{"id":"text-461","type":"text","heading":"","plain_text":"III-G. La condition &quot;&quot;==&quot;&quot;▲","html":"<p>III-G. La condition &quot;&quot;==&quot;&quot;▲</p>"},{"id":"text-462","type":"text","heading":"","plain_text":"La condition &quot;&quot;==&quot;&quot; permet de tester une galit entre des chanes de caractres. Les chanes doivent tre places entre guillemets si elles sont susceptibles de contenir des espaces. Cette condition prend les modificateurs ne pas et /i.","html":"<p>La condition &quot;&quot;==&quot;&quot; permet de tester une galit entre des chanes de caractres. Les chanes doivent tre places entre guillemets si elles sont susceptibles de contenir des espaces. Cette condition prend les modificateurs ne pas et /i.</p>"},{"id":"text-463","type":"text","heading":"","plain_text":"1.234567.89dix.11121314151617181920\n@écho de\ncls\nensemble &quot;Un=Une Chane&quot;\nensemble &quot;Deux=une chane&quot;\nsi &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If:      &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n) autre (\n    écho If:      &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n)\nsi ne pas &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If ne pas:  &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n) autre (\n    écho If ne pas:  &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n)\nsi /i &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If /i:   &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n) autre (\n    écho If /i:   &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n)\npause","html":"<p>1.234567.89dix.11121314151617181920\n@écho de\ncls\nensemble &quot;Un=Une Chane&quot;\nensemble &quot;Deux=une chane&quot;\nsi &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If:      &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n) autre (\n    écho If:      &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n)\nsi ne pas &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If ne pas:  &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n) autre (\n    écho If ne pas:  &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n)\nsi /i &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If /i:   &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n) autre (\n    écho If /i:   &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n)\npause</p>"},{"id":"text-464","type":"text","heading":"","plain_text":"III-H. Mise en application de la commande if▲","html":"<p>III-H. Mise en application de la commande if▲</p>"},{"id":"text-465","type":"text","heading":"","plain_text":"Dans cette section, nous allons reprendre le script 29 qui permettait de transformer un entier en sa reprsentation hexadcimale en notation en complment  deux. Grce  la commande si, nous allons faire en sorte de traiter les nombres ngatifs et positifs avec la mme fonction de calcul et d&amp;#39;afficher le rsultat dans une forme hexadcimale correcte.","html":"<p>Dans cette section, nous allons reprendre le script 29 qui permettait de transformer un entier en sa reprsentation hexadcimale en notation en complment  deux. Grce  la commande si, nous allons faire en sorte de traiter les nombres ngatifs et positifs avec la mme fonction de calcul et d&amp;#39;afficher le rsultat dans une forme hexadcimale correcte.</p>"},{"id":"text-466","type":"text","heading":"","plain_text":"1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99100101.102.103.104105106.107.108.109.110.111.112.113.114.\n@écho de","html":"<p>1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99100101.102.103.104105106.107.108.109.110.111.112.113.114.\n@écho de</p>"},{"id":"text-467","type":"text","heading":"","plain_text":"setlocal","html":"<p>setlocal</p>"},{"id":"text-468","type":"text","heading":"","plain_text":"ensemble /p &quot;SInt32=Entrez un nombre entre -2147483648 et 2147483647:    &quot;","html":"<p>ensemble /p &quot;SInt32=Entrez un nombre entre -2147483648 et 2147483647:    &quot;</p>"},{"id":"text-469","type":"text","heading":"","plain_text":"ensemble /a &quot;SInt32&quot;","html":"<p>ensemble /a &quot;SInt32&quot;</p>"},{"id":"text-470","type":"text","heading":"","plain_text":"ensemble &quot;NegNum=false&quot;","html":"<p>ensemble &quot;NegNum=false&quot;</p>"},{"id":"text-471","type":"text","heading":"","plain_text":"si %SInt32% LSS 0 (\n    ensemble /a &quot;SInt32=~SInt32&quot;\n    ensemble &quot;NegNum=true&quot;\n)","html":"<p>si %SInt32% LSS 0 (\n    ensemble /a &quot;SInt32=~SInt32&quot;\n    ensemble &quot;NegNum=true&quot;\n)</p>"},{"id":"text-472","type":"text","heading":"","plain_text":"ensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;","html":"<p>ensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;</p>"},{"id":"text-473","type":"text","heading":"","plain_text":"si &quot;%NegNum%&quot;==&quot;true&quot; (\n    ensemble /a &quot;Nibble0=15 - Nibble0&quot;\n    ensemble /a &quot;Nibble1=15 - Nibble1&quot;\n    ensemble /a &quot;Nibble2=15 - Nibble2&quot;\n    ensemble /a &quot;Nibble3=15 - Nibble3&quot;\n    ensemble /a &quot;Nibble4=15 - Nibble4&quot;\n    ensemble /a &quot;Nibble5=15 - Nibble5&quot;\n    ensemble /a &quot;Nibble6=15 - Nibble6&quot;\n    ensemble /a &quot;Nibble7=15 - Nibble7&quot;\n)","html":"<p>si &quot;%NegNum%&quot;==&quot;true&quot; (\n    ensemble /a &quot;Nibble0=15 - Nibble0&quot;\n    ensemble /a &quot;Nibble1=15 - Nibble1&quot;\n    ensemble /a &quot;Nibble2=15 - Nibble2&quot;\n    ensemble /a &quot;Nibble3=15 - Nibble3&quot;\n    ensemble /a &quot;Nibble4=15 - Nibble4&quot;\n    ensemble /a &quot;Nibble5=15 - Nibble5&quot;\n    ensemble /a &quot;Nibble6=15 - Nibble6&quot;\n    ensemble /a &quot;Nibble7=15 - Nibble7&quot;\n)</p>"},{"id":"text-474","type":"text","heading":"","plain_text":"si %Nibble0% GTR 9 (\n    si %Nibble0% EQU dix ensemble &quot;Nibble0=A&quot;\n    si %Nibble0% EQU 11 ensemble &quot;Nibble0=B&quot;\n    si %Nibble0% EQU 12 ensemble &quot;Nibble0=C&quot;\n    si %Nibble0% EQU 13 ensemble &quot;Nibble0=D&quot;\n    si %Nibble0% EQU 14 ensemble &quot;Nibble0=E&quot;\n    si %Nibble0% EQU 15 ensemble &quot;Nibble0=F&quot;\n)\nsi %Nibble1% GTR 9 (\n    si %Nibble1% EQU dix ensemble &quot;Nibble1=A&quot;\n    si %Nibble1% EQU 11 ensemble &quot;Nibble1=B&quot;\n    si %Nibble1% EQU 12 ensemble &quot;Nibble1=C&quot;\n    si %Nibble1% EQU 13 ensemble &quot;Nibble1=D&quot;\n    si %Nibble1% EQU 14 ensemble &quot;Nibble1=E&quot;\n    si %Nibble1% EQU 15 ensemble &quot;Nibble1=F&quot;\n)\nsi %Nibble2% GTR 9 (\n    si %Nibble2% EQU dix ensemble &quot;Nibble2=A&quot;\n    si %Nibble2% EQU 11 ensemble &quot;Nibble2=B&quot;\n    si %Nibble2% EQU 12 ensemble &quot;Nibble2=C&quot;\n    si %Nibble2% EQU 13 ensemble &quot;Nibble2=D&quot;\n    si %Nibble2% EQU 14 ensemble &quot;Nibble2=E&quot;\n    si %Nibble2% EQU 15 ensemble &quot;Nibble2=F&quot;\n)\nsi %Nibble3% GTR 9 (\n    si %Nibble3% EQU dix ensemble &quot;Nibble3=A&quot;\n    si %Nibble3% EQU 11 ensemble &quot;Nibble3=B&quot;\n    si %Nibble3% EQU 12 ensemble &quot;Nibble3=C&quot;\n    si %Nibble3% EQU 13 ensemble &quot;Nibble3=D&quot;\n    si %Nibble3% EQU 14 ensemble &quot;Nibble3=E&quot;\n    si %Nibble3% EQU 15 ensemble &quot;Nibble3=F&quot;\n)\nsi %Nibble4% GTR 9 (\n    si %Nibble4% EQU dix ensemble &quot;Nibble4=A&quot;\n    si %Nibble4% EQU 11 ensemble &quot;Nibble4=B&quot;\n    si %Nibble4% EQU 12 ensemble &quot;Nibble4=C&quot;\n    si %Nibble4% EQU 13 ensemble &quot;Nibble4=D&quot;\n    si %Nibble4% EQU 14 ensemble &quot;Nibble4=E&quot;\n    si %Nibble4% EQU 15 ensemble &quot;Nibble4=F&quot;\n)\nsi %Nibble5% GTR 9 (\n    si %Nibble5% EQU dix ensemble &quot;Nibble5=A&quot;\n    si %Nibble5% EQU 11 ensemble &quot;Nibble5=B&quot;\n    si %Nibble5% EQU 12 ensemble &quot;Nibble5=C&quot;\n    si %Nibble5% EQU 13 ensemble &quot;Nibble5=D&quot;\n    si %Nibble5% EQU 14 ensemble &quot;Nibble5=E&quot;\n    si %Nibble5% EQU 15 ensemble &quot;Nibble5=F&quot;\n)\nsi %Nibble6% GTR 9 (\n    si %Nibble6% EQU dix ensemble &quot;Nibble6=A&quot;\n    si %Nibble6% EQU 11 ensemble &quot;Nibble6=B&quot;\n    si %Nibble6% EQU 12 ensemble &quot;Nibble6=C&quot;\n    si %Nibble6% EQU 13 ensemble &quot;Nibble6=D&quot;\n    si %Nibble6% EQU 14 ensemble &quot;Nibble6=E&quot;\n    si %Nibble6% EQU 15 ensemble &quot;Nibble6=F&quot;\n)\nsi %Nibble7% GTR 9 (\n    si %Nibble7% EQU dix ensemble &quot;Nibble7=A&quot;\n    si %Nibble7% EQU 11 ensemble &quot;Nibble7=B&quot;\n    si %Nibble7% EQU 12 ensemble &quot;Nibble7=C&quot;\n    si %Nibble7% EQU 13 ensemble &quot;Nibble7=D&quot;\n    si %Nibble7% EQU 14 ensemble &quot;Nibble7=E&quot;\n    si %Nibble7% EQU 15 ensemble &quot;Nibble7=F&quot;\n)","html":"<p>si %Nibble0% GTR 9 (\n    si %Nibble0% EQU dix ensemble &quot;Nibble0=A&quot;\n    si %Nibble0% EQU 11 ensemble &quot;Nibble0=B&quot;\n    si %Nibble0% EQU 12 ensemble &quot;Nibble0=C&quot;\n    si %Nibble0% EQU 13 ensemble &quot;Nibble0=D&quot;\n    si %Nibble0% EQU 14 ensemble &quot;Nibble0=E&quot;\n    si %Nibble0% EQU 15 ensemble &quot;Nibble0=F&quot;\n)\nsi %Nibble1% GTR 9 (\n    si %Nibble1% EQU dix ensemble &quot;Nibble1=A&quot;\n    si %Nibble1% EQU 11 ensemble &quot;Nibble1=B&quot;\n    si %Nibble1% EQU 12 ensemble &quot;Nibble1=C&quot;\n    si %Nibble1% EQU 13 ensemble &quot;Nibble1=D&quot;\n    si %Nibble1% EQU 14 ensemble &quot;Nibble1=E&quot;\n    si %Nibble1% EQU 15 ensemble &quot;Nibble1=F&quot;\n)\nsi %Nibble2% GTR 9 (\n    si %Nibble2% EQU dix ensemble &quot;Nibble2=A&quot;\n    si %Nibble2% EQU 11 ensemble &quot;Nibble2=B&quot;\n    si %Nibble2% EQU 12 ensemble &quot;Nibble2=C&quot;\n    si %Nibble2% EQU 13 ensemble &quot;Nibble2=D&quot;\n    si %Nibble2% EQU 14 ensemble &quot;Nibble2=E&quot;\n    si %Nibble2% EQU 15 ensemble &quot;Nibble2=F&quot;\n)\nsi %Nibble3% GTR 9 (\n    si %Nibble3% EQU dix ensemble &quot;Nibble3=A&quot;\n    si %Nibble3% EQU 11 ensemble &quot;Nibble3=B&quot;\n    si %Nibble3% EQU 12 ensemble &quot;Nibble3=C&quot;\n    si %Nibble3% EQU 13 ensemble &quot;Nibble3=D&quot;\n    si %Nibble3% EQU 14 ensemble &quot;Nibble3=E&quot;\n    si %Nibble3% EQU 15 ensemble &quot;Nibble3=F&quot;\n)\nsi %Nibble4% GTR 9 (\n    si %Nibble4% EQU dix ensemble &quot;Nibble4=A&quot;\n    si %Nibble4% EQU 11 ensemble &quot;Nibble4=B&quot;\n    si %Nibble4% EQU 12 ensemble &quot;Nibble4=C&quot;\n    si %Nibble4% EQU 13 ensemble &quot;Nibble4=D&quot;\n    si %Nibble4% EQU 14 ensemble &quot;Nibble4=E&quot;\n    si %Nibble4% EQU 15 ensemble &quot;Nibble4=F&quot;\n)\nsi %Nibble5% GTR 9 (\n    si %Nibble5% EQU dix ensemble &quot;Nibble5=A&quot;\n    si %Nibble5% EQU 11 ensemble &quot;Nibble5=B&quot;\n    si %Nibble5% EQU 12 ensemble &quot;Nibble5=C&quot;\n    si %Nibble5% EQU 13 ensemble &quot;Nibble5=D&quot;\n    si %Nibble5% EQU 14 ensemble &quot;Nibble5=E&quot;\n    si %Nibble5% EQU 15 ensemble &quot;Nibble5=F&quot;\n)\nsi %Nibble6% GTR 9 (\n    si %Nibble6% EQU dix ensemble &quot;Nibble6=A&quot;\n    si %Nibble6% EQU 11 ensemble &quot;Nibble6=B&quot;\n    si %Nibble6% EQU 12 ensemble &quot;Nibble6=C&quot;\n    si %Nibble6% EQU 13 ensemble &quot;Nibble6=D&quot;\n    si %Nibble6% EQU 14 ensemble &quot;Nibble6=E&quot;\n    si %Nibble6% EQU 15 ensemble &quot;Nibble6=F&quot;\n)\nsi %Nibble7% GTR 9 (\n    si %Nibble7% EQU dix ensemble &quot;Nibble7=A&quot;\n    si %Nibble7% EQU 11 ensemble &quot;Nibble7=B&quot;\n    si %Nibble7% EQU 12 ensemble &quot;Nibble7=C&quot;\n    si %Nibble7% EQU 13 ensemble &quot;Nibble7=D&quot;\n    si %Nibble7% EQU 14 ensemble &quot;Nibble7=E&quot;\n    si %Nibble7% EQU 15 ensemble &quot;Nibble7=F&quot;\n)</p>"},{"id":"text-475","type":"text","heading":"","plain_text":"ensemble &quot;LSW=%Nibble3%%Nibble2%%Nibble1%%Nibble0%&quot;","html":"<p>ensemble &quot;LSW=%Nibble3%%Nibble2%%Nibble1%%Nibble0%&quot;</p>"},{"id":"text-476","type":"text","heading":"","plain_text":"ensemble &quot;MSW=%Nibble7%%Nibble6%%Nibble5%%Nibble4%&quot;","html":"<p>ensemble &quot;MSW=%Nibble7%%Nibble6%%Nibble5%%Nibble4%&quot;</p>"},{"id":"text-477","type":"text","heading":"","plain_text":"écho 0x%MSW%%LSW%","html":"<p>écho 0x%MSW%%LSW%</p>"},{"id":"text-478","type":"text","heading":"","plain_text":"endlocal\npause","html":"<p>endlocal\npause</p>"},{"id":"text-479","type":"text","heading":"","plain_text":"Ce script sera un script tmoin que nous ferons voluer tout au long de ce document, il nous permettra de comparer les diffrentes approches et ce qu&amp;#39;elles impliquent comme contrainte d&amp;#39;utilisation.\nEn son tat actuel, ce script est gourmand en ressource systme, car  chaque ligne de commande correspond un appel vers l&amp;#39;interprteur augmentant d&amp;#39;autant son temps de traitement. Les boucles pour devraient nous permettre de rduire considrablement son cot en temps d&amp;#39;excution et la taille du script par la mme occasion.","html":"<p>Ce script sera un script tmoin que nous ferons voluer tout au long de ce document, il nous permettra de comparer les diffrentes approches et ce qu&amp;#39;elles impliquent comme contrainte d&amp;#39;utilisation.\nEn son tat actuel, ce script est gourmand en ressource systme, car  chaque ligne de commande correspond un appel vers l&amp;#39;interprteur augmentant d&amp;#39;autant son temps de traitement. Les boucles pour devraient nous permettre de rduire considrablement son cot en temps d&amp;#39;excution et la taille du script par la mme occasion.</p>"},{"id":"text-480","type":"text","heading":"","plain_text":"Un script batch s&amp;#39;excute toujours de manire linaire, du dbut vers la fin, et  moins que l&amp;#39;on ne redirige son excution, ce comportement reste inchang. Il existe plusieurs possibilits pour rediriger l&amp;#39;excution d&amp;#39;un script telles que: les labels, les sauts, les appels de fonction et les sorties.\nIV-A. Les labels▲","html":"<p>Un script batch s&amp;#39;excute toujours de manire linaire, du dbut vers la fin, et  moins que l&amp;#39;on ne redirige son excution, ce comportement reste inchang. Il existe plusieurs possibilits pour rediriger l&amp;#39;excution d&amp;#39;un script telles que: les labels, les sauts, les appels de fonction et les sorties.\nIV-A. Les labels▲</p>"},{"id":"text-481","type":"text","heading":"","plain_text":"Les labels sont des adresses relatives se prsentant sous forme de chanes de caractres prfixes par : et termines par un caractre blanc (l&amp;#39;espace, la tabulation ou le retour  la ligne). Ces adresses relatives pointent vers le premier caractre situ aprs le retour  la ligne qui termine le label. Elles peuvent tre utilises pour adresser une portion de code. Chaque nom de label devrait tre unique dans le script. La syntaxe d&amp;#39;un label est la suivante, o  est le nom du label:\n:&lt;Étiquette&gt;","html":"<p>Les labels sont des adresses relatives se prsentant sous forme de chanes de caractres prfixes par : et termines par un caractre blanc (l&amp;#39;espace, la tabulation ou le retour  la ligne). Ces adresses relatives pointent vers le premier caractre situ aprs le retour  la ligne qui termine le label. Elles peuvent tre utilises pour adresser une portion de code. Chaque nom de label devrait tre unique dans le script. La syntaxe d&amp;#39;un label est la suivante, o  est le nom du label:\n:&lt;Étiquette&gt;</p>"},{"id":"text-482","type":"text","heading":"","plain_text":"IV-B. Les sauts▲","html":"<p>IV-B. Les sauts▲</p>"},{"id":"text-483","type":"text","heading":"","plain_text":"The command goto effectue un saut inconditionnel vers le label spcifi en paramtre, permettant ainsi de continuer l&amp;#39;excution du programme dans une portion de code situe n&amp;#39;importe o dans le script. Une fois le saut effectu, l&amp;#39;excution continue  la ligne qui suit le label spcifi:\ngoto [[[[:]&lt;Étiquette&gt;","html":"<p>The command goto effectue un saut inconditionnel vers le label spcifi en paramtre, permettant ainsi de continuer l&amp;#39;excution du programme dans une portion de code situe n&amp;#39;importe o dans le script. Une fois le saut effectu, l&amp;#39;excution continue  la ligne qui suit le label spcifi:\ngoto [[[[:]&lt;Étiquette&gt;</p>"},{"id":"text-484","type":"text","heading":"","plain_text":"1.234567.8\n@écho de","html":"<p>1.234567.8\n@écho de</p>"},{"id":"text-485","type":"text","heading":"","plain_text":"goto :MonLabel\nécho Une phrase qui ne sera jamais affiche.","html":"<p>goto :MonLabel\nécho Une phrase qui ne sera jamais affiche.</p>"},{"id":"text-486","type":"text","heading":"","plain_text":":MonLabel\nécho Une phrase qui sera affiche.\npause","html":"<p>:MonLabel\nécho Une phrase qui sera affiche.\npause</p>"},{"id":"text-487","type":"text","heading":"","plain_text":"Dans le script 39, la commande echo Une phrase qui ne sera jamais affiche. n&amp;#39;est pas traite, l&amp;#39;excution tant redirige par la commande goto:MonLabel vers la ligne suivant le label :MonLabel soit la commande echo Une phrase qui sera affiche.","html":"<p>Dans le script 39, la commande echo Une phrase qui ne sera jamais affiche. n&amp;#39;est pas traite, l&amp;#39;excution tant redirige par la commande goto:MonLabel vers la ligne suivant le label :MonLabel soit la commande echo Une phrase qui sera affiche.</p>"},{"id":"text-488","type":"text","heading":"","plain_text":"IV-C. Contexte de commande▲","html":"<p>IV-C. Contexte de commande▲</p>"},{"id":"text-489","type":"text","heading":"","plain_text":"L&amp;#39;excution de l&amp;#39;interprteur ou d&amp;#39;un script s&amp;#39;effectue dans un processus hte auquel le systme d&amp;#39;exploitation alloue un espace mmoire. Cet espace mmoire est appel la pile. Une pile est une zone de mmoire dans laquelle les donnes sont places les unes  la suite des autres. Les donnes qui y sont places doivent tre rcupres dans un ordre particulier: la dernire donne place doit tre la premire  tre rcupre. Sur cette pile, le systme y place ce que l&amp;#39;on appelle un contexte.\nLors de sa cration, le contexte se voit attribuer, par le systme, une srie de variables: les variables d&amp;#39;environnement du systme, des variables contenant la commande et les paramtres de la commande ayant gnr le contexte et une adresse de sortie du contexte. Ainsi cr, le contexte reprsente l&amp;#39;environnement dans lequel le script va s&amp;#39;excuter en lui permettant de disposer de donnes qui lui sont propres.  chaque nouvelle excution d&amp;#39;un script ou d&amp;#39;une commande, l&amp;#39;interprteur cre un nouveau contexte et le place sur la pile. Ce nouveau contexte est appel contexte descendant.\nLes variables d&amp;#39;environnement sont hrites du systme lors de la cration du processus hte et se propagent par ascendance successive aux diffrents contextes descendants. Les variables contenant la commande et les arguments d&amp;#39;appels, elles, sont propres au contexte et ne se propagent jamais aux contextes descendants. L&amp;#39;adresse de sortie du contexte n&amp;#39;est pas accessible en tant que variable et, tout comme les arguments d&amp;#39;appel, est propre au contexte. Son rle est plus amplement dtaill dans le reste du chapitre.\nCertaines commandes s&amp;#39;excutent dans le contexte en cours alors que d&amp;#39;autres crent leurs propres contextes. C&amp;#39;est, en partie, ce qui fait la diffrence entre commande interne et externe: les commandes internes sont en fait des fonctions internes de l&amp;#39;interprteur qu&amp;#39;il est possible d&amp;#39;appeler via un alias de type nom de commande, alors que les commandes externes sont des excutables distincts de l&amp;#39;interprteur. L&amp;#39;excution d&amp;#39;une commande externe ou d&amp;#39;un script gnrera toujours un nouveau contexte. Les commandes internes s&amp;#39;excutent toujours dans le contexte courant. Il faut cependant noter que les commandes internes, mme si elles excutent toujours leurs fonctions principales dans le contexte courant, peuvent crer des contextes descendants afin d&amp;#39;excuter certaines fonctions comme la boucle pour qui gnre un contexte initial dans lequel se trouve l&amp;#39;ensemble  traiter et un contexte secondaire, cr  chaque itration de la boucle, dans lequel s&amp;#39;opre le traitement.\nIV-C-1. La porte des variables▲","html":"<p>L&amp;#39;excution de l&amp;#39;interprteur ou d&amp;#39;un script s&amp;#39;effectue dans un processus hte auquel le systme d&amp;#39;exploitation alloue un espace mmoire. Cet espace mmoire est appel la pile. Une pile est une zone de mmoire dans laquelle les donnes sont places les unes  la suite des autres. Les donnes qui y sont places doivent tre rcupres dans un ordre particulier: la dernire donne place doit tre la premire  tre rcupre. Sur cette pile, le systme y place ce que l&amp;#39;on appelle un contexte.\nLors de sa cration, le contexte se voit attribuer, par le systme, une srie de variables: les variables d&amp;#39;environnement du systme, des variables contenant la commande et les paramtres de la commande ayant gnr le contexte et une adresse de sortie du contexte. Ainsi cr, le contexte reprsente l&amp;#39;environnement dans lequel le script va s&amp;#39;excuter en lui permettant de disposer de donnes qui lui sont propres.  chaque nouvelle excution d&amp;#39;un script ou d&amp;#39;une commande, l&amp;#39;interprteur cre un nouveau contexte et le place sur la pile. Ce nouveau contexte est appel contexte descendant.\nLes variables d&amp;#39;environnement sont hrites du systme lors de la cration du processus hte et se propagent par ascendance successive aux diffrents contextes descendants. Les variables contenant la commande et les arguments d&amp;#39;appels, elles, sont propres au contexte et ne se propagent jamais aux contextes descendants. L&amp;#39;adresse de sortie du contexte n&amp;#39;est pas accessible en tant que variable et, tout comme les arguments d&amp;#39;appel, est propre au contexte. Son rle est plus amplement dtaill dans le reste du chapitre.\nCertaines commandes s&amp;#39;excutent dans le contexte en cours alors que d&amp;#39;autres crent leurs propres contextes. C&amp;#39;est, en partie, ce qui fait la diffrence entre commande interne et externe: les commandes internes sont en fait des fonctions internes de l&amp;#39;interprteur qu&amp;#39;il est possible d&amp;#39;appeler via un alias de type nom de commande, alors que les commandes externes sont des excutables distincts de l&amp;#39;interprteur. L&amp;#39;excution d&amp;#39;une commande externe ou d&amp;#39;un script gnrera toujours un nouveau contexte. Les commandes internes s&amp;#39;excutent toujours dans le contexte courant. Il faut cependant noter que les commandes internes, mme si elles excutent toujours leurs fonctions principales dans le contexte courant, peuvent crer des contextes descendants afin d&amp;#39;excuter certaines fonctions comme la boucle pour qui gnre un contexte initial dans lequel se trouve l&amp;#39;ensemble  traiter et un contexte secondaire, cr  chaque itration de la boucle, dans lequel s&amp;#39;opre le traitement.\nIV-C-1. La porte des variables▲</p>"},{"id":"text-490","type":"text","heading":"","plain_text":"Si le concept de contexte de commande est si important, c&amp;#39;est qu&amp;#39;il influe grandement sur l&amp;#39;utilisation des variables. En effet, chaque contexte est une fraction de la pile qui n&amp;#39;est pas accessible lorsque l&amp;#39;excution s&amp;#39;opre depuis un contexte ascendant. Les variables se propagent par ascendance; c&amp;#39;est&#8211;dire que lorsqu&amp;#39;un nouveau contexte est cr, il hrite des variables (et de leurs valeurs) du contexte ascendant (celui  partir duquel il a t cr). Si une variable est modifie dans un contexte descendant, sa valeur restera inchange dans le contexte ascendant. Ainsi, faire passer une variable vers un contexte descendant est simple (il suffit de crer le contexte), mais l&amp;#39;inverse s&amp;#39;avre plus compliqu, car il n&amp;#39;est pas possible de modifier une valeur dans un contexte ascendant.\nL&amp;#39;interprteur supporte l&amp;#39;expansion retarde des variables qui permet, dans une certaine mesure, de faire passer une valeur vers un contexte ascendant. Pour cela, le processus hte, lorsque l&amp;#39;expansion retarde est active, alloue une seconde zone de mmoire qui prend la forme d&amp;#39;un tas qui est accessible depuis n&amp;#39;importe quel contexte. Contrairement  la pile, il est possible, avec le tas, d&amp;#39;y placer et rcuprer les donnes dans n&amp;#39;importe quel ordre.  chaque fois qu&amp;#39;une variable est cre ou modifie, elle est place  la fois dans le contexte (autrement dit sur la pile) et dans le tas. Pour accder aux variables dont l&amp;#39;expansion est retarde, il faut utiliser le symbole ! au lieu du symbole % lors de leur expansion. Ainsi la variable prendra la dernire valeur qui lui a t attribue pendant l&amp;#39;excution et non la valeur qu&amp;#39;elle possde dans le contexte en cours. L&amp;#39;expansion retarde des variables sera plus amplement aborde dans le chapitre VIL&amp;#39;expansion retarde des variables.","html":"<p>Si le concept de contexte de commande est si important, c&amp;#39;est qu&amp;#39;il influe grandement sur l&amp;#39;utilisation des variables. En effet, chaque contexte est une fraction de la pile qui n&amp;#39;est pas accessible lorsque l&amp;#39;excution s&amp;#39;opre depuis un contexte ascendant. Les variables se propagent par ascendance; c&amp;#39;est&#8211;dire que lorsqu&amp;#39;un nouveau contexte est cr, il hrite des variables (et de leurs valeurs) du contexte ascendant (celui  partir duquel il a t cr). Si une variable est modifie dans un contexte descendant, sa valeur restera inchange dans le contexte ascendant. Ainsi, faire passer une variable vers un contexte descendant est simple (il suffit de crer le contexte), mais l&amp;#39;inverse s&amp;#39;avre plus compliqu, car il n&amp;#39;est pas possible de modifier une valeur dans un contexte ascendant.\nL&amp;#39;interprteur supporte l&amp;#39;expansion retarde des variables qui permet, dans une certaine mesure, de faire passer une valeur vers un contexte ascendant. Pour cela, le processus hte, lorsque l&amp;#39;expansion retarde est active, alloue une seconde zone de mmoire qui prend la forme d&amp;#39;un tas qui est accessible depuis n&amp;#39;importe quel contexte. Contrairement  la pile, il est possible, avec le tas, d&amp;#39;y placer et rcuprer les donnes dans n&amp;#39;importe quel ordre.  chaque fois qu&amp;#39;une variable est cre ou modifie, elle est place  la fois dans le contexte (autrement dit sur la pile) et dans le tas. Pour accder aux variables dont l&amp;#39;expansion est retarde, il faut utiliser le symbole ! au lieu du symbole % lors de leur expansion. Ainsi la variable prendra la dernire valeur qui lui a t attribue pendant l&amp;#39;excution et non la valeur qu&amp;#39;elle possde dans le contexte en cours. L&amp;#39;expansion retarde des variables sera plus amplement aborde dans le chapitre VIL&amp;#39;expansion retarde des variables.</p>"},{"id":"text-491","type":"text","heading":"","plain_text":"IV-D. Les fonctions▲","html":"<p>IV-D. Les fonctions▲</p>"},{"id":"text-492","type":"text","heading":"","plain_text":"Les fonctions sont des portions de code isoles, commenant par un label et finissant par un saut  une adresse spcifique: l&amp;#39;adresse de retour. La vraie diffrence avec une simple portion de code rside dans le fait qu&amp;#39;un nouveau contexte est cr, permettant ainsi aux fonctions de disposer de paramtres de commande et, dans certains cas, d&amp;#39;un code de sortie.\nIV-D-1. L&amp;#39;appel de fonction▲","html":"<p>Les fonctions sont des portions de code isoles, commenant par un label et finissant par un saut  une adresse spcifique: l&amp;#39;adresse de retour. La vraie diffrence avec une simple portion de code rside dans le fait qu&amp;#39;un nouveau contexte est cr, permettant ainsi aux fonctions de disposer de paramtres de commande et, dans certains cas, d&amp;#39;un code de sortie.\nIV-D-1. L&amp;#39;appel de fonction▲</p>"},{"id":"text-493","type":"text","heading":"","plain_text":"The command appel permet d&amp;#39;effectuer des appels de fonction. Elle a la particularit de crer un contexte dans lequel va s&amp;#39;excuter la fonction appele (la portion de code); lors de la cration du contexte descendant, une adresse de retour et les arguments d&amp;#39;appel vont tre empils. La syntaxe de la commande appel est la suivante, o     est le nom de la fonction  appeler et     est le ou les paramtres  passer  la fonction.\nappel :&lt;étiquette&gt; [[[[&lt;paramtre&gt; [&#8230;]]  \nLors d&amp;#39;un appel  une fonction, si l&amp;#39;excution est redirige vers une autre adresse que l&amp;#39;adresse de retour et que, par la suite, d&amp;#39;autres appels sont effectus vers cette mme fonction, alors la premire adresse ne sera pas dpile, occasionnant une fuite de mmoire. Si un script comporte ce cas, son excution peut tre stoppe par l&amp;#39;interprteur (si l&amp;#39;utilisation de la pile atteint 90%) comme le montre le script 40.","html":"<p>The command appel permet d&amp;#39;effectuer des appels de fonction. Elle a la particularit de crer un contexte dans lequel va s&amp;#39;excuter la fonction appele (la portion de code); lors de la cration du contexte descendant, une adresse de retour et les arguments d&amp;#39;appel vont tre empils. La syntaxe de la commande appel est la suivante, o     est le nom de la fonction  appeler et     est le ou les paramtres  passer  la fonction.\nappel :&lt;étiquette&gt; [[[[&lt;paramtre&gt; [&#8230;]]  \nLors d&amp;#39;un appel  une fonction, si l&amp;#39;excution est redirige vers une autre adresse que l&amp;#39;adresse de retour et que, par la suite, d&amp;#39;autres appels sont effectus vers cette mme fonction, alors la premire adresse ne sera pas dpile, occasionnant une fuite de mmoire. Si un script comporte ce cas, son excution peut tre stoppe par l&amp;#39;interprteur (si l&amp;#39;utilisation de la pile atteint 90%) comme le montre le script 40.</p>"},{"id":"text-494","type":"text","heading":"","plain_text":"1.2345\n@écho de\n:LabelUn\nappel :LabelDeux\n:LabelDeux\ngoto :LabelUn","html":"<p>1.2345\n@écho de\n:LabelUn\nappel :LabelDeux\n:LabelDeux\ngoto :LabelUn</p>"},{"id":"text-495","type":"text","heading":"","plain_text":"IV-D-2. Sortie de fonction▲","html":"<p>IV-D-2. Sortie de fonction▲</p>"},{"id":"text-496","type":"text","heading":"","plain_text":"The command goto prend aussi le label :eof (End Of File), qui prend la valeur de l&amp;#39;adresse de retour du contexte en cours, soit la ligne se trouvant immdiatement aprs le dernier appel effectu.\nThe command goto n&amp;#39;ajoute rien dans la pile, ainsi l&amp;#39;excution d&amp;#39;un goto ne peut occasionner de fuite de mmoire. Dans le cas prcis de l&amp;#39;excution d&amp;#39;un goto:eof, la commande goto incrmente le pointeur de pile de la taille totale des adresses des arguments d&amp;#39;appel et de la taille de l&amp;#39;adresse de retour, permettant  la pile de revenir  l&amp;#39;tat d&amp;#39;avant l&amp;#39;appel, puis effectue un saut inconditionnel  l&amp;#39;adresse de retour, soit la ligne suivant le dernier appel. Ainsi, si l&amp;#39;on modifie le script 40 de la manire suivante (script 41), on obtient un script qui ne finit jamais, car il n&amp;#39;y a ni fuite de mmoire (chaque appel de la fonction :LabelDeux finished by goto:eof), ni point de sortie (il y aura toujours une commande  excuter, l&amp;#39;excution revient toujours au :LabelUn). Seul l&amp;#39;appui sur les touches Ctrl+C permet de quitter le script.","html":"<p>The command goto prend aussi le label :eof (End Of File), qui prend la valeur de l&amp;#39;adresse de retour du contexte en cours, soit la ligne se trouvant immdiatement aprs le dernier appel effectu.\nThe command goto n&amp;#39;ajoute rien dans la pile, ainsi l&amp;#39;excution d&amp;#39;un goto ne peut occasionner de fuite de mmoire. Dans le cas prcis de l&amp;#39;excution d&amp;#39;un goto:eof, la commande goto incrmente le pointeur de pile de la taille totale des adresses des arguments d&amp;#39;appel et de la taille de l&amp;#39;adresse de retour, permettant  la pile de revenir  l&amp;#39;tat d&amp;#39;avant l&amp;#39;appel, puis effectue un saut inconditionnel  l&amp;#39;adresse de retour, soit la ligne suivant le dernier appel. Ainsi, si l&amp;#39;on modifie le script 40 de la manire suivante (script 41), on obtient un script qui ne finit jamais, car il n&amp;#39;y a ni fuite de mmoire (chaque appel de la fonction :LabelDeux finished by goto:eof), ni point de sortie (il y aura toujours une commande  excuter, l&amp;#39;excution revient toujours au :LabelUn). Seul l&amp;#39;appui sur les touches Ctrl+C permet de quitter le script.</p>"},{"id":"text-497","type":"text","heading":"","plain_text":"1.234567.89dix.\n@écho de","html":"<p>1.234567.89dix.\n@écho de</p>"},{"id":"text-498","type":"text","heading":"","plain_text":"ensemble /a &quot;Counter=0&quot;\n:LabelUn\nappel :LabelDeux\nensemble /a &quot;Counter+=1&quot;\ngoto :LabelUn\n:LabelDeux\nécho %Counter%\ngoto :eof","html":"<p>ensemble /a &quot;Counter=0&quot;\n:LabelUn\nappel :LabelDeux\nensemble /a &quot;Counter+=1&quot;\ngoto :LabelUn\n:LabelDeux\nécho %Counter%\ngoto :eof</p>"},{"id":"text-499","type":"text","heading":"","plain_text":"IV-E. Les paramtres de commande▲","html":"<p>IV-E. Les paramtres de commande▲</p>"},{"id":"text-500","type":"text","heading":"","plain_text":"Ils sont passs au contexte lors de sa cration et sont accessibles sous la forme de variables spciales: %n, n tant le numro d&amp;#39;index du paramtre. En effet, chaque contexte tant gnr suite  l&amp;#39;appel d&amp;#39;un script, d&amp;#39;une fonction ou d&amp;#39;une commande, il possde une commande d&amp;#39;appel et, la plupart du temps, de paramtres d&amp;#39;appel. L&amp;#39;index %0 contient le nom du script, de la fonction ou de la commande, l&amp;#39;index %1 contient le paramtre 1, l&amp;#39;index %2 contient le paramtre 2 et ainsi de suite. Le paramtre %* expanse tous les paramtres passs au contexte (%0 n&amp;#39;est pas un paramtre, mais une commande d&amp;#39;appel et n&amp;#39;est donc pas renvoye par %*). Exemple avec le script 42:","html":"<p>Ils sont passs au contexte lors de sa cration et sont accessibles sous la forme de variables spciales: %n, n tant le numro d&amp;#39;index du paramtre. En effet, chaque contexte tant gnr suite  l&amp;#39;appel d&amp;#39;un script, d&amp;#39;une fonction ou d&amp;#39;une commande, il possde une commande d&amp;#39;appel et, la plupart du temps, de paramtres d&amp;#39;appel. L&amp;#39;index %0 contient le nom du script, de la fonction ou de la commande, l&amp;#39;index %1 contient le paramtre 1, l&amp;#39;index %2 contient le paramtre 2 et ainsi de suite. Le paramtre %* expanse tous les paramtres passs au contexte (%0 n&amp;#39;est pas un paramtre, mais une commande d&amp;#39;appel et n&amp;#39;est donc pas renvoye par %*). Exemple avec le script 42:</p>"},{"id":"text-501","type":"text","heading":"","plain_text":"1.234567.89dix.1112131415\n@écho de","html":"<p>1.234567.89dix.1112131415\n@écho de</p>"},{"id":"text-502","type":"text","heading":"","plain_text":"appel :MonLabel Param1 Param2\npause","html":"<p>appel :MonLabel Param1 Param2\npause</p>"},{"id":"text-503","type":"text","heading":"","plain_text":"goto :eof","html":"<p>goto :eof</p>"},{"id":"text-504","type":"text","heading":"","plain_text":":MonLabel\nécho %*\nécho %0\nécho %1\nécho %2\ngoto :eof","html":"<p>:MonLabel\nécho %*\nécho %0\nécho %1\nécho %2\ngoto :eof</p>"},{"id":"text-505","type":"text","heading":"","plain_text":"L&amp;#39;utilisation des paramtres suit plusieurs rgles:","html":"<p>L&amp;#39;utilisation des paramtres suit plusieurs rgles:</p>"},{"id":"text-506","type":"text","heading":"","plain_text":"les paramtres ne sont pas limits en nombre dans la commande d&amp;#39;appel, mais la rgle des 2048/4096 caractres maximum par ligne de commande s&amp;#39;applique;\npar souci de compatibilit avec les systmes Windows XP et antrieurs, il est prfrable de ne pas utiliser des paramtres avec un index suprieur  9, qui restent cependant accessibles via la commande décalage (voir section IV.E.2La commande shift).","html":"<p>les paramtres ne sont pas limits en nombre dans la commande d&amp;#39;appel, mais la rgle des 2048/4096 caractres maximum par ligne de commande s&amp;#39;applique;\npar souci de compatibilit avec les systmes Windows XP et antrieurs, il est prfrable de ne pas utiliser des paramtres avec un index suprieur  9, qui restent cependant accessibles via la commande décalage (voir section IV.E.2La commande shift).</p>"},{"id":"text-507","type":"text","heading":"","plain_text":"IV-E-1. Les modificateurs de paramtres de commande▲","html":"<p>IV-E-1. Les modificateurs de paramtres de commande▲</p>"},{"id":"text-508","type":"text","heading":"","plain_text":"Les paramtres de commande supportent plusieurs modificateurs permettant de les parser, en voici la liste exhaustive:","html":"<p>Les paramtres de commande supportent plusieurs modificateurs permettant de les parser, en voici la liste exhaustive:</p>"},{"id":"text-509","type":"text","heading":"","plain_text":"Modificateur","html":"<p>Modificateur</p>"},{"id":"text-510","type":"text","heading":"","plain_text":"La description","html":"<p>La description</p>"},{"id":"text-511","type":"text","heading":"","plain_text":"%~1","html":"<p>%~1</p>"},{"id":"text-512","type":"text","heading":"","plain_text":"résultats %1 en supprimant les guillemets (&quot;) de dbut et de fin.","html":"<p>résultats %1 en supprimant les guillemets (&quot;) de dbut et de fin.</p>"},{"id":"text-513","type":"text","heading":"","plain_text":"%~f1","html":"<p>%~f1</p>"},{"id":"text-514","type":"text","heading":"","plain_text":"renvoie le chemin d&amp;#39;accs vrifi du fichier dsign par %1, si le fichier n&amp;#39;est pas trouv, alors ce modificateur s&amp;#39;expanse en une chane vide.","html":"<p>renvoie le chemin d&amp;#39;accs vrifi du fichier dsign par %1, si le fichier n&amp;#39;est pas trouv, alors ce modificateur s&amp;#39;expanse en une chane vide.</p>"},{"id":"text-515","type":"text","heading":"","plain_text":"%~d1","html":"<p>%~d1</p>"},{"id":"text-516","type":"text","heading":"","plain_text":"renvoie la lettre de lecteur du fichier dsign par %1.","html":"<p>renvoie la lettre de lecteur du fichier dsign par %1.</p>"},{"id":"text-517","type":"text","heading":"","plain_text":"%~p1","html":"<p>%~p1</p>"},{"id":"text-518","type":"text","heading":"","plain_text":"renvoie le chemin d&amp;#39;accs du fichier dsign par %1.","html":"<p>renvoie le chemin d&amp;#39;accs du fichier dsign par %1.</p>"},{"id":"text-519","type":"text","heading":"","plain_text":"%~n1","html":"<p>%~n1</p>"},{"id":"text-520","type":"text","heading":"","plain_text":"renvoie le nom du fichier dsign par %1.","html":"<p>renvoie le nom du fichier dsign par %1.</p>"},{"id":"text-521","type":"text","heading":"","plain_text":"%~x1","html":"<p>%~x1</p>"},{"id":"text-522","type":"text","heading":"","plain_text":"renvoie l&amp;#39;extension du fichier dsign par %1.","html":"<p>renvoie l&amp;#39;extension du fichier dsign par %1.</p>"},{"id":"text-523","type":"text","heading":"","plain_text":"%~s1","html":"<p>%~s1</p>"},{"id":"text-524","type":"text","heading":"","plain_text":"renvoie le chemin d&amp;#39;accs, sous forme de noms courts, du fichier dsign par %1.","html":"<p>renvoie le chemin d&amp;#39;accs, sous forme de noms courts, du fichier dsign par %1.</p>"},{"id":"text-525","type":"text","heading":"","plain_text":"%~a1","html":"<p>%~a1</p>"},{"id":"text-526","type":"text","heading":"","plain_text":"renvoie les attributs du fichier dsign par %1.","html":"<p>renvoie les attributs du fichier dsign par %1.</p>"},{"id":"text-527","type":"text","heading":"","plain_text":"%~t1","html":"<p>%~t1</p>"},{"id":"text-528","type":"text","heading":"","plain_text":"renvoie la date et l&amp;#39;heure de cration du fichier dsign par %1.","html":"<p>renvoie la date et l&amp;#39;heure de cration du fichier dsign par %1.</p>"},{"id":"text-529","type":"text","heading":"","plain_text":"%~z1","html":"<p>%~z1</p>"},{"id":"text-530","type":"text","heading":"","plain_text":"renvoie la taille du fichier dsign par %1.","html":"<p>renvoie la taille du fichier dsign par %1.</p>"},{"id":"text-531","type":"text","heading":"","plain_text":"%~$:1","html":"<p>%~$:1</p>"},{"id":"text-532","type":"text","heading":"","plain_text":"est parcourue  la recherche d&amp;#39;occurrence de %1, si aucune occurrence de %1 n&amp;#39;est trouve ou que  n&amp;#39;est pas dfini dans le contexte en cours, alors ce modificateur s&amp;#39;expanse en une chane vide. Oui  est compos de plusieurs chanes, elles doivent tre spares par des points-virgules (;) afin que le modificateur puisse les distinguer correctement.","html":"<p>est parcourue  la recherche d&amp;#39;occurrence de %1, si aucune occurrence de %1 n&amp;#39;est trouve ou que  n&amp;#39;est pas dfini dans le contexte en cours, alors ce modificateur s&amp;#39;expanse en une chane vide. Oui  est compos de plusieurs chanes, elles doivent tre spares par des points-virgules (;) afin que le modificateur puisse les distinguer correctement.</p>"},{"id":"text-533","type":"text","heading":"","plain_text":"Tableau 10: Les modificateurs de paramtres de commande. \nLes modificateurs de paramtres de commande fonctionnent pour tous les index. Ils peuvent tre utiliss conjointement pour obtenir plusieurs informations en mme temps, comme le montre le script 43:","html":"<p>Tableau 10: Les modificateurs de paramtres de commande. \nLes modificateurs de paramtres de commande fonctionnent pour tous les index. Ils peuvent tre utiliss conjointement pour obtenir plusieurs informations en mme temps, comme le montre le script 43:</p>"},{"id":"text-534","type":"text","heading":"","plain_text":"1.234567.89\n@écho de","html":"<p>1.234567.89\n@écho de</p>"},{"id":"text-535","type":"text","heading":"","plain_text":"cls\nappel :MonLabel %cmdcmdline%\npause\ngoto :eof\n:MonLabel\nécho %~dpnx€ComSpec:1\ngoto :eof","html":"<p>cls\nappel :MonLabel %cmdcmdline%\npause\ngoto :eof\n:MonLabel\nécho %~dpnx€ComSpec:1\ngoto :eof</p>"},{"id":"text-536","type":"text","heading":"","plain_text":"IV-E-2. La commande shift▲","html":"<p>IV-E-2. La commande shift▲</p>"},{"id":"text-537","type":"text","heading":"","plain_text":"The command décalage permet de dcaler l&amp;#39;index de tous les paramtres de -1, afin d&amp;#39;accder aux index suprieurs  neuf, ou de crer un mcanisme de gestion des paramtres (voir la mise en application de ce chapitreMise en application des contextes). Si les extensions de commande sont actives, la commande décalage prend le paramtre /n, o n est le numro d&amp;#39;index  partir duquel commence le dcalage des paramtres, tous les index gaux ou suprieurs  n seront dcals de -1.\ndécalage [/n] \nDans le script 44, le commande shift /1 permet d&amp;#39;accder au deuxime paramtre via l&amp;#39;index 1:.","html":"<p>The command décalage permet de dcaler l&amp;#39;index de tous les paramtres de -1, afin d&amp;#39;accder aux index suprieurs  neuf, ou de crer un mcanisme de gestion des paramtres (voir la mise en application de ce chapitreMise en application des contextes). Si les extensions de commande sont actives, la commande décalage prend le paramtre /n, o n est le numro d&amp;#39;index  partir duquel commence le dcalage des paramtres, tous les index gaux ou suprieurs  n seront dcals de -1.\ndécalage [/n] \nDans le script 44, le commande shift /1 permet d&amp;#39;accder au deuxime paramtre via l&amp;#39;index 1:.</p>"},{"id":"text-538","type":"text","heading":"","plain_text":"1.234567.89\n@écho de\ncls\nappel :MonLabel &quot;rien&quot; %cmdcmdline%\npause\nsortie /b\n:MonLabel\ndécalage /1\nécho %~dpnx€ComSpec:1\ngoto :eof","html":"<p>1.234567.89\n@écho de\ncls\nappel :MonLabel &quot;rien&quot; %cmdcmdline%\npause\nsortie /b\n:MonLabel\ndécalage /1\nécho %~dpnx€ComSpec:1\ngoto :eof</p>"},{"id":"text-539","type":"text","heading":"","plain_text":"IV-F. Les sorties▲","html":"<p>IV-F. Les sorties▲</p>"},{"id":"text-540","type":"text","heading":"","plain_text":"La sortie d&amp;#39;un contexte ou d&amp;#39;un processus peut s&amp;#39;effectuer via les commandes sortie et goto:eof. Dans le cas de goto:eof, si tous les contextes ont correctement t dpils, alors la dernire adresse dpile est:","html":"<p>La sortie d&amp;#39;un contexte ou d&amp;#39;un processus peut s&amp;#39;effectuer via les commandes sortie et goto:eof. Dans le cas de goto:eof, si tous les contextes ont correctement t dpils, alors la dernire adresse dpile est:</p>"},{"id":"text-541","type":"text","heading":"","plain_text":"soit l&amp;#39;adresse de sortie du processus dans le cas d&amp;#39;un script appel en cliquant dessus;\nsoit l&amp;#39;adresse de retour  l&amp;#39;interprteur si le script a t lanc depuis celui-ci.","html":"<p>soit l&amp;#39;adresse de sortie du processus dans le cas d&amp;#39;un script appel en cliquant dessus;\nsoit l&amp;#39;adresse de retour  l&amp;#39;interprteur si le script a t lanc depuis celui-ci.</p>"},{"id":"text-542","type":"text","heading":"","plain_text":"The command sortie, elle, permet de sortir du processus hte, quel que soit le nombre de contextes empils. Si la commande sortie est utilise avec le paramtre /b, alors la sortie s&amp;#39;effectuera  l&amp;#39;adresse de sortie du contexte et non  l&amp;#39;adresse de sortie du processus hte. L&amp;#39;intrt de la commande sortie est qu&amp;#39;un code numrique de sortie peut tre spcifi, contrairement  goto:eof. La syntaxe de la commande exit est la suivante, o     est le code de sortie.\nsortie [/b]    [[[[&lt;CodeSortie&gt;]  \nDans le script 45, la sortie de la fonction :LabelDeux s&amp;#39;effectue  l&amp;#39;aide d&amp;#39;un goto:eof et la sortie de la fonction :LabelQuatre s&amp;#39;effectue  l&amp;#39;aide d&amp;#39;exit /b; dans les deux cas, le retour vers la procdure appelante s&amp;#39;opre correctement, car c&amp;#39;est la bonne adresse de retour qui est dpile. Dans la fonction :LabelSix du script 45, la commande exit /b provoque la fin du script, car la fonction :LabelSix a t appele avec la commande goto:LabelSix qui n&amp;#39;a rien empil. Comme tous les contextes prcdents ont t dpils correctement, seule la dernire adresse de retour subsiste. Cette adresse correspond  l&amp;#39;adresse de retour  l&amp;#39;interprteur si le script a t appel depuis celui-ci ou  l&amp;#39;adresse de sortie du processus, si le script a t appel par un double-clic.","html":"<p>The command sortie, elle, permet de sortir du processus hte, quel que soit le nombre de contextes empils. Si la commande sortie est utilise avec le paramtre /b, alors la sortie s&amp;#39;effectuera  l&amp;#39;adresse de sortie du contexte et non  l&amp;#39;adresse de sortie du processus hte. L&amp;#39;intrt de la commande sortie est qu&amp;#39;un code numrique de sortie peut tre spcifi, contrairement  goto:eof. La syntaxe de la commande exit est la suivante, o     est le code de sortie.\nsortie [/b]    [[[[&lt;CodeSortie&gt;]  \nDans le script 45, la sortie de la fonction :LabelDeux s&amp;#39;effectue  l&amp;#39;aide d&amp;#39;un goto:eof et la sortie de la fonction :LabelQuatre s&amp;#39;effectue  l&amp;#39;aide d&amp;#39;exit /b; dans les deux cas, le retour vers la procdure appelante s&amp;#39;opre correctement, car c&amp;#39;est la bonne adresse de retour qui est dpile. Dans la fonction :LabelSix du script 45, la commande exit /b provoque la fin du script, car la fonction :LabelSix a t appele avec la commande goto:LabelSix qui n&amp;#39;a rien empil. Comme tous les contextes prcdents ont t dpils correctement, seule la dernire adresse de retour subsiste. Cette adresse correspond  l&amp;#39;adresse de retour  l&amp;#39;interprteur si le script a t appel depuis celui-ci ou  l&amp;#39;adresse de sortie du processus, si le script a t appel par un double-clic.</p>"},{"id":"text-543","type":"text","heading":"","plain_text":"1.234567.89dix.111213141516171819202122232425262728293031.323334353637\n@écho de\ncls\nensemble /a &quot;CounterGoto=0&quot;\nensemble /a &quot;CounterExit=0&quot;\nensemble /a &quot;CounterCounter=0&quot;\n:LabelUn\nappel :LabelDeux\nensemble /a &quot;CounterGoto+=1&quot;\nécho CounterGoto: %CounterGoto% sur affichage Goto 1.\nsi %CounterGoto% EQU 6 goto :LabelTrois\ngoto :LabelUn\n:LabelDeux\nensemble /a &quot;CounterGoto+=1&quot;\nécho CounterGoto: %CounterGoto% sur affichage Goto 2\ngoto :eof","html":"<p>1.234567.89dix.111213141516171819202122232425262728293031.323334353637\n@écho de\ncls\nensemble /a &quot;CounterGoto=0&quot;\nensemble /a &quot;CounterExit=0&quot;\nensemble /a &quot;CounterCounter=0&quot;\n:LabelUn\nappel :LabelDeux\nensemble /a &quot;CounterGoto+=1&quot;\nécho CounterGoto: %CounterGoto% sur affichage Goto 1.\nsi %CounterGoto% EQU 6 goto :LabelTrois\ngoto :LabelUn\n:LabelDeux\nensemble /a &quot;CounterGoto+=1&quot;\nécho CounterGoto: %CounterGoto% sur affichage Goto 2\ngoto :eof</p>"},{"id":"text-544","type":"text","heading":"","plain_text":":LabelTrois\nappel :LabelQuatre\nensemble /a &quot;CounterExit+=1&quot;\nécho CounterExit: %CounterExit% sur affichage Sortie 1.\nsi %CounterExit% EQU 6 goto :LabelCinq\ngoto :LabelTrois\n:LabelQuatre\nensemble /a &quot;CounterExit+=1&quot;\nécho CounterExit: %CounterExit% sur affichage Sortie 2\nsortie /b","html":"<p>:LabelTrois\nappel :LabelQuatre\nensemble /a &quot;CounterExit+=1&quot;\nécho CounterExit: %CounterExit% sur affichage Sortie 1.\nsi %CounterExit% EQU 6 goto :LabelCinq\ngoto :LabelTrois\n:LabelQuatre\nensemble /a &quot;CounterExit+=1&quot;\nécho CounterExit: %CounterExit% sur affichage Sortie 2\nsortie /b</p>"},{"id":"text-545","type":"text","heading":"","plain_text":":LabelCinq\ngoto :LabelSix\nensemble /a &quot;CounterCounter+=1&quot;\nécho CounterCounter: %CounterCounter% sur affichage Counter 1.\nsi %CounterCounter% EQU 6 sortie /b\ngoto :LabelCinq\n:LabelSix\nensemble /a &quot;CounterCounter+=1&quot;\nécho CounterCounter: %CounterCounter% sur affichage Counter 2.\nsortie /b","html":"<p>:LabelCinq\ngoto :LabelSix\nensemble /a &quot;CounterCounter+=1&quot;\nécho CounterCounter: %CounterCounter% sur affichage Counter 1.\nsi %CounterCounter% EQU 6 sortie /b\ngoto :LabelCinq\n:LabelSix\nensemble /a &quot;CounterCounter+=1&quot;\nécho CounterCounter: %CounterCounter% sur affichage Counter 2.\nsortie /b</p>"},{"id":"text-546","type":"text","heading":"","plain_text":"IV-G. Code de sortie▲","html":"<p>IV-G. Code de sortie▲</p>"},{"id":"text-547","type":"text","heading":"","plain_text":"Comme expliqu prcdemment, un code de sortie peut tre spcifi pour une fonction ou pour un script. Cela se fait via la commande sortie [/b]     o     est un code de sortie numrique. Les codes de sortie sont rgis par les mmes rgles que les nombres entiers et sont cods sur 32 bits en arithmtique signe. Ce code de sortie est fix dans la variable ErrorLevel afin de pouvoir tre utilis par la suite. Exemple avec le script 46:","html":"<p>Comme expliqu prcdemment, un code de sortie peut tre spcifi pour une fonction ou pour un script. Cela se fait via la commande sortie [/b]     o     est un code de sortie numrique. Les codes de sortie sont rgis par les mmes rgles que les nombres entiers et sont cods sur 32 bits en arithmtique signe. Ce code de sortie est fix dans la variable ErrorLevel afin de pouvoir tre utilis par la suite. Exemple avec le script 46:</p>"},{"id":"text-548","type":"text","heading":"","plain_text":"1.234567.89\n@écho de","html":"<p>1.234567.89\n@écho de</p>"},{"id":"text-549","type":"text","heading":"","plain_text":"écho %ErrorLevel%\nappel :UnLabel\nécho %ErrorLevel%\npause\nsortie /b\n:UnLabel\nsortie /b 1","html":"<p>écho %ErrorLevel%\nappel :UnLabel\nécho %ErrorLevel%\npause\nsortie /b\n:UnLabel\nsortie /b 1</p>"},{"id":"text-550","type":"text","heading":"","plain_text":"IV-H. Script batch et adresse de retour▲","html":"<p>IV-H. Script batch et adresse de retour▲</p>"},{"id":"text-551","type":"text","heading":"","plain_text":"L&amp;#39;appel d&amp;#39;un script depuis l&amp;#39;interprteur ou en cliquant dessus gnre toujours un contexte complet. Cependant l&amp;#39;appel d&amp;#39;un script en ligne de commande depuis un autre script gnre un contexte ne possdant pas d&amp;#39;adresse de retour. Exemple avec le script 47:","html":"<p>L&amp;#39;appel d&amp;#39;un script depuis l&amp;#39;interprteur ou en cliquant dessus gnre toujours un contexte complet. Cependant l&amp;#39;appel d&amp;#39;un script en ligne de commande depuis un autre script gnre un contexte ne possdant pas d&amp;#39;adresse de retour. Exemple avec le script 47:</p>"},{"id":"text-552","type":"text","heading":"","plain_text":"1.234567.89dix.1112131415161718\n@écho de","html":"<p>1.234567.89dix.1112131415161718\n@écho de</p>"},{"id":"text-553","type":"text","heading":"","plain_text":"si exister test.bat del /q test.bat","html":"<p>si exister test.bat del /q test.bat</p>"},{"id":"text-554","type":"text","heading":"","plain_text":"appel :WriteTestBat &gt;&gt;test.bat","html":"<p>appel :WriteTestBat &gt;&gt;test.bat</p>"},{"id":"text-555","type":"text","heading":"","plain_text":"test.bat","html":"<p>test.bat</p>"},{"id":"text-556","type":"text","heading":"","plain_text":"écho Return  %~nx0.\ndel /q test.bat\npause\nsortie /b","html":"<p>écho Return  %~nx0.\ndel /q test.bat\npause\nsortie /b</p>"},{"id":"text-557","type":"text","heading":"","plain_text":":WriteTestBat\nécho @écho de\nécho écho Une phrase affiche dans test.bat\nécho pause\ngoto :eof","html":"<p>:WriteTestBat\nécho @écho de\nécho écho Une phrase affiche dans test.bat\nécho pause\ngoto :eof</p>"},{"id":"text-558","type":"text","heading":"","plain_text":"Lorsqu&amp;#39;on excute le script 47, celui-ci cre un second script, test.bat. L&amp;#39;appel en ligne de commande Test.bat affiche alors Une phrase affiche depuis test.bat et met en pause l&amp;#39;excution. Lorsqu&amp;#39;on appuie sur une touche, cela provoque la fin des deux scripts. En effet, quand l&amp;#39;interprteur arrive  la fin d&amp;#39;un script et que celui-ci ne se termine pas par goto :eof ou sortie [/b], il effectue de lui-mme le saut  l&amp;#39;adresse de retour. Sauf que l&amp;#39;appel de test.bat n&amp;#39;a pas empil d&amp;#39;adresse de retour et de ce fait, l&amp;#39;adresse qui est dpile est celle du premier script. Pour parer  ce problme, il faut s&amp;#39;assurer que l&amp;#39;adresse de retour soit effectivement empile en utilisant la commande appel. Ainsi, en modifiant le script 47 de la manire suivante (script 48), l&amp;#39;appel et la sortie s&amp;#39;effectuent sans erreur.","html":"<p>Lorsqu&amp;#39;on excute le script 47, celui-ci cre un second script, test.bat. L&amp;#39;appel en ligne de commande Test.bat affiche alors Une phrase affiche depuis test.bat et met en pause l&amp;#39;excution. Lorsqu&amp;#39;on appuie sur une touche, cela provoque la fin des deux scripts. En effet, quand l&amp;#39;interprteur arrive  la fin d&amp;#39;un script et que celui-ci ne se termine pas par goto :eof ou sortie [/b], il effectue de lui-mme le saut  l&amp;#39;adresse de retour. Sauf que l&amp;#39;appel de test.bat n&amp;#39;a pas empil d&amp;#39;adresse de retour et de ce fait, l&amp;#39;adresse qui est dpile est celle du premier script. Pour parer  ce problme, il faut s&amp;#39;assurer que l&amp;#39;adresse de retour soit effectivement empile en utilisant la commande appel. Ainsi, en modifiant le script 47 de la manire suivante (script 48), l&amp;#39;appel et la sortie s&amp;#39;effectuent sans erreur.</p>"},{"id":"text-559","type":"text","heading":"","plain_text":"1.234567.89dix.1112131415161718\n@écho de","html":"<p>1.234567.89dix.1112131415161718\n@écho de</p>"},{"id":"text-560","type":"text","heading":"","plain_text":"si exister test.bat del /q test.bat","html":"<p>si exister test.bat del /q test.bat</p>"},{"id":"text-561","type":"text","heading":"","plain_text":"appel :WriteTestBat &gt;&gt;test.bat","html":"<p>appel :WriteTestBat &gt;&gt;test.bat</p>"},{"id":"text-562","type":"text","heading":"","plain_text":"appel test.bat","html":"<p>appel test.bat</p>"},{"id":"text-563","type":"text","heading":"","plain_text":"écho Return  %~nx0.\ndel /q test.bat\npause\nsortie /b","html":"<p>écho Return  %~nx0.\ndel /q test.bat\npause\nsortie /b</p>"},{"id":"text-564","type":"text","heading":"","plain_text":":WriteTestBat\nécho @écho de\nécho écho Une phrase affiche dans test.bat\nécho pause\ngoto :eof","html":"<p>:WriteTestBat\nécho @écho de\nécho écho Une phrase affiche dans test.bat\nécho pause\ngoto :eof</p>"},{"id":"text-565","type":"text","heading":"","plain_text":"IV-I. La commande start▲","html":"<p>IV-I. La commande start▲</p>"},{"id":"text-566","type":"text","heading":"","plain_text":"The command début permet de lancer un script ou une commande dans un nouveau processus, permettant ainsi d&amp;#39;excuter des commandes dans un environnement modifi. Ainsi, toute variable cre ou modifie dans le script appelant est passe  ce nouveau processus.","html":"<p>The command début permet de lancer un script ou une commande dans un nouveau processus, permettant ainsi d&amp;#39;excuter des commandes dans un environnement modifi. Ainsi, toute variable cre ou modifie dans le script appelant est passe  ce nouveau processus.</p>"},{"id":"text-567","type":"text","heading":"","plain_text":"Syntaxe de la commande start\nSélectionnez","html":"<p>Syntaxe de la commande start\nSélectionnez</p>"},{"id":"text-568","type":"text","heading":"","plain_text":"début [&quot;[&quot;[\"[\"&lt;légende&gt;&quot;][/d[/d[/d[/d&lt;chemin&gt;] [/i] [/min] [/max]    [/separate[/separate[/separate[/separate|/shared][/low[/low\n      [/low|/normal|/high|/realtime|/abovenormal|/belownormal][/affinity[/affinity[/affinity[/affinity&lt;hexa&gt;]\n      [/wait] [/b]    [[[[&lt;ordre&gt;][[[[&lt;paramtres&gt;]","html":"<p>début [&quot;[&quot;[&quot;[&quot;&lt;légende&gt;&quot;][/d[/d[/d[/d&lt;chemin&gt;] [/i] [/min] [/max]    [/separate[/separate[/separate[/separate|/shared][/low[/low\n      [/low|/normal|/high|/realtime|/abovenormal|/belownormal][/affinity[/affinity[/affinity[/affinity&lt;hexa&gt;]\n      [/wait] [/b]    [[[[&lt;ordre&gt;][[[[&lt;paramtres&gt;]</p>"},{"id":"text-569","type":"text","heading":"","plain_text":"Paramtres","html":"<p>Paramtres</p>"},{"id":"text-570","type":"text","heading":"","plain_text":"Descriptions","html":"<p>Descriptions</p>"},{"id":"text-571","type":"text","heading":"","plain_text":"Titre de la fentre.","html":"<p>Titre de la fentre.</p>"},{"id":"text-572","type":"text","heading":"","plain_text":"/d","html":"<p>/d</p>"},{"id":"text-573","type":"text","heading":"","plain_text":"Spcifie que le chemin d&amp;#39;accs donn par     est le rpertoire de dpart.","html":"<p>Spcifie que le chemin d&amp;#39;accs donn par     est le rpertoire de dpart.</p>"},{"id":"text-574","type":"text","heading":"","plain_text":"Chemin d&amp;#39;accs du rpertoire de dpart.","html":"<p>Chemin d&amp;#39;accs du rpertoire de dpart.</p>"},{"id":"text-575","type":"text","heading":"","plain_text":"/b","html":"<p>/b</p>"},{"id":"text-576","type":"text","heading":"","plain_text":"Lance l&amp;#39;application dans la fentre courante (en tche de fond). L&amp;#39;arrt par Ctrl+C est remplac par Ctrl+Pause.","html":"<p>Lance l&amp;#39;application dans la fentre courante (en tche de fond). L&amp;#39;arrt par Ctrl+C est remplac par Ctrl+Pause.</p>"},{"id":"text-577","type":"text","heading":"","plain_text":"/i","html":"<p>/i</p>"},{"id":"text-578","type":"text","heading":"","plain_text":"Le nouveau contexte sera le contexte original du processus hte et non le contexte en cours.","html":"<p>Le nouveau contexte sera le contexte original du processus hte et non le contexte en cours.</p>"},{"id":"text-579","type":"text","heading":"","plain_text":"/min","html":"<p>/min</p>"},{"id":"text-580","type":"text","heading":"","plain_text":"Dmarrer dans une fentre rduite.","html":"<p>Dmarrer dans une fentre rduite.</p>"},{"id":"text-581","type":"text","heading":"","plain_text":"/max","html":"<p>/max</p>"},{"id":"text-582","type":"text","heading":"","plain_text":"Dmarrer dans une fentre agrandie.","html":"<p>Dmarrer dans une fentre agrandie.</p>"},{"id":"text-583","type":"text","heading":"","plain_text":"/separate","html":"<p>/separate</p>"},{"id":"text-584","type":"text","heading":"","plain_text":"Dmarrer les programmes 16 bits dans un espace mmoire distinct. Ne fonctionne pas sur les systmes 64 bits.","html":"<p>Dmarrer les programmes 16 bits dans un espace mmoire distinct. Ne fonctionne pas sur les systmes 64 bits.</p>"},{"id":"text-585","type":"text","heading":"","plain_text":"/shared","html":"<p>/shared</p>"},{"id":"text-586","type":"text","heading":"","plain_text":"Dmarrer les programmes 16 bits dans un espace mmoire partag. Ne fonctionne pas sur les systmes 64 bits.","html":"<p>Dmarrer les programmes 16 bits dans un espace mmoire partag. Ne fonctionne pas sur les systmes 64 bits.</p>"},{"id":"text-587","type":"text","heading":"","plain_text":"/low","html":"<p>/low</p>"},{"id":"text-588","type":"text","heading":"","plain_text":"Dmarrer l&amp;#39;application dans la classe de priorit IDLE.","html":"<p>Dmarrer l&amp;#39;application dans la classe de priorit IDLE.</p>"},{"id":"text-589","type":"text","heading":"","plain_text":"/normal","html":"<p>/normal</p>"},{"id":"text-590","type":"text","heading":"","plain_text":"Dmarrer l&amp;#39;application dans la classe de priorit NORMAL.","html":"<p>Dmarrer l&amp;#39;application dans la classe de priorit NORMAL.</p>"},{"id":"text-591","type":"text","heading":"","plain_text":"/high","html":"<p>/high</p>"},{"id":"text-592","type":"text","heading":"","plain_text":"Dmarrer l&amp;#39;application dans la classe de priorit HIGH.","html":"<p>Dmarrer l&amp;#39;application dans la classe de priorit HIGH.</p>"},{"id":"text-593","type":"text","heading":"","plain_text":"/realtime","html":"<p>/realtime</p>"},{"id":"text-594","type":"text","heading":"","plain_text":"Dmarrer l&amp;#39;application dans la classe de priorit REALTIME.","html":"<p>Dmarrer l&amp;#39;application dans la classe de priorit REALTIME.</p>"},{"id":"text-595","type":"text","heading":"","plain_text":"/abovenormal","html":"<p>/abovenormal</p>"},{"id":"text-596","type":"text","heading":"","plain_text":"Dmarrer l&amp;#39;application dans la classe de priorit ABOVENORMAL.","html":"<p>Dmarrer l&amp;#39;application dans la classe de priorit ABOVENORMAL.</p>"},{"id":"text-597","type":"text","heading":"","plain_text":"/belownormal","html":"<p>/belownormal</p>"},{"id":"text-598","type":"text","heading":"","plain_text":"Dmarrer l&amp;#39;application dans la classe de priorit BELOWNORMAL.","html":"<p>Dmarrer l&amp;#39;application dans la classe de priorit BELOWNORMAL.</p>"},{"id":"text-599","type":"text","heading":"","plain_text":"/affinity","html":"<p>/affinity</p>"},{"id":"text-600","type":"text","heading":"","plain_text":"La nouvelle application aura le masque d&amp;#39;affinit de processeur spcifi, exprim en tant que valeur hexadcimale.","html":"<p>La nouvelle application aura le masque d&amp;#39;affinit de processeur spcifi, exprim en tant que valeur hexadcimale.</p>"},{"id":"text-601","type":"text","heading":"","plain_text":"Affinit du processus sous forme de valeur hexadcimale.","html":"<p>Affinit du processus sous forme de valeur hexadcimale.</p>"},{"id":"text-602","type":"text","heading":"","plain_text":"/wait","html":"<p>/wait</p>"},{"id":"text-603","type":"text","heading":"","plain_text":"Lancer la commande et attendre qu&amp;#39;elle soit finie pour continuer l&amp;#39;excution. S&amp;#39;il s&amp;#39;agit d&amp;#39;une commande interne ou d&amp;#39;un fichier batch, la fentre reste ouverte aprs l&amp;#39;excution de la commande.","html":"<p>Lancer la commande et attendre qu&amp;#39;elle soit finie pour continuer l&amp;#39;excution. S&amp;#39;il s&amp;#39;agit d&amp;#39;une commande interne ou d&amp;#39;un fichier batch, la fentre reste ouverte aprs l&amp;#39;excution de la commande.</p>"},{"id":"text-604","type":"text","heading":"","plain_text":"Commande  excuter.","html":"<p>Commande  excuter.</p>"},{"id":"text-605","type":"text","heading":"","plain_text":"Paramtres  passer  la commande.","html":"<p>Paramtres  passer  la commande.</p>"},{"id":"text-606","type":"text","heading":"","plain_text":"Tableau 11: Les paramtres de la commande start. \nLe script 49 appelle une nouvelle instance de lui-mme avec le paramtre foo aprs avoir dfini la variable X, la seconde instance affiche bien la valeur de X alors qu&amp;#39;elle n&amp;#39;a pas dclar X. Notez bien qu&amp;#39;il s&amp;#39;agit d&amp;#39;un nouveau processus, il est donc possible de le quitter avec la commande sortie sans aucun paramtre.","html":"<p>Tableau 11: Les paramtres de la commande start. \nLe script 49 appelle une nouvelle instance de lui-mme avec le paramtre foo aprs avoir dfini la variable X, la seconde instance affiche bien la valeur de X alors qu&amp;#39;elle n&amp;#39;a pas dclar X. Notez bien qu&amp;#39;il s&amp;#39;agit d&amp;#39;un nouveau processus, il est donc possible de le quitter avec la commande sortie sans aucun paramtre.</p>"},{"id":"text-607","type":"text","heading":"","plain_text":"1.234567.89dix.\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\nensemble &quot;X=bar&quot;\ndébut %~nx0 foo\npause\nsortie /b\n:SecondInstance\nécho %X%\npause\nsortie","html":"<p>1.234567.89dix.\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\nensemble &quot;X=bar&quot;\ndébut %~nx0 foo\npause\nsortie /b\n:SecondInstance\nécho %X%\npause\nsortie</p>"},{"id":"text-608","type":"text","heading":"","plain_text":"Premire instance:","html":"<p>Premire instance:</p>"},{"id":"text-609","type":"text","heading":"","plain_text":"Seconde instance:","html":"<p>Seconde instance:</p>"},{"id":"text-610","type":"text","heading":"","plain_text":"Si l&amp;#39;on modifie le script 49 en ajoutant le paramtre /i dans l&#39;ordre début (script 50), alors le nouveau processus sera cr en hritant du contexte original du processus hte dans lequel la variable X n&amp;#39;a pas t dclare.","html":"<p>Si l&amp;#39;on modifie le script 49 en ajoutant le paramtre /i dans l&#039;ordre début (script 50), alors le nouveau processus sera cr en hritant du contexte original du processus hte dans lequel la variable X n&amp;#39;a pas t dclare.</p>"},{"id":"text-611","type":"text","heading":"","plain_text":"1.234567.89dix.\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\nensemble &quot;X=bar&quot;\ndébut /i %~nx0 foo\npause\nsortie /b\n:SecondInstance\nécho %X%\npause\nsortie","html":"<p>1.234567.89dix.\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\nensemble &quot;X=bar&quot;\ndébut /i %~nx0 foo\npause\nsortie /b\n:SecondInstance\nécho %X%\npause\nsortie</p>"},{"id":"text-612","type":"text","heading":"","plain_text":"Premire instance:","html":"<p>Premire instance:</p>"},{"id":"text-613","type":"text","heading":"","plain_text":"Seconde instance:","html":"<p>Seconde instance:</p>"},{"id":"text-614","type":"text","heading":"","plain_text":"Une autre application intressante de la commande début est l&amp;#39;excution parallle  l&amp;#39;aide du paramtre /b comme dans le script 51.\nN.B.: la commande temps libre n&amp;#39;est pas fournie en standard sur tous les systmes Windows. Si vous ne l&amp;#39;avez pas, veuillez supprimer la commande temps libre du script, d-commenter les commandes écho, ping et supprimer le caractre d&amp;#39;chappement dans la commande ping.","html":"<p>Une autre application intressante de la commande début est l&amp;#39;excution parallle  l&amp;#39;aide du paramtre /b comme dans le script 51.\nN.B.: la commande temps libre n&amp;#39;est pas fournie en standard sur tous les systmes Windows. Si vous ne l&amp;#39;avez pas, veuillez supprimer la commande temps libre du script, d-commenter les commandes écho, ping et supprimer le caractre d&amp;#39;chappement dans la commande ping.</p>"},{"id":"text-615","type":"text","heading":"","plain_text":"1.234567.89dix.11\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\ndébut /b %~nx0 foo","html":"<p>1.234567.89dix.11\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\ndébut /b %~nx0 foo</p>"},{"id":"text-616","type":"text","heading":"","plain_text":"temps libre /t 10 /nobreak\npause\nsortie /b\n:SecondInstance\nécho %1\nsortie","html":"<p>temps libre /t 10 /nobreak\npause\nsortie /b\n:SecondInstance\nécho %1\nsortie</p>"},{"id":"text-617","type":"text","heading":"","plain_text":"IV-J. La commande setlocal▲","html":"<p>IV-J. La commande setlocal▲</p>"},{"id":"text-618","type":"text","heading":"","plain_text":"Cette commande permet de modifier partiellement les contextes en crant un contexte local. Les variables et leurs valeurs, dans ce nouveau contexte local, sont soumises aux rgles inhrentes  la cration de contexte. L&amp;#39;avantage de cette commande est que l&amp;#39;on peut crer un contexte sans passer par un appel. Ce contexte local ne possde pas d&amp;#39;adresse de retour ni de paramtres d&amp;#39;appel. Seules les variables, et ventuellement les extensions de commande, sont affectes. Ainsi, toutes les variables cres ou modifies dans ce contexte local y sont propres. Cette modification prend fin lorsque l&amp;#39;excution rencontre la commande endlocal. The command setlocal prend aussi les paramtres:","html":"<p>Cette commande permet de modifier partiellement les contextes en crant un contexte local. Les variables et leurs valeurs, dans ce nouveau contexte local, sont soumises aux rgles inhrentes  la cration de contexte. L&amp;#39;avantage de cette commande est que l&amp;#39;on peut crer un contexte sans passer par un appel. Ce contexte local ne possde pas d&amp;#39;adresse de retour ni de paramtres d&amp;#39;appel. Seules les variables, et ventuellement les extensions de commande, sont affectes. Ainsi, toutes les variables cres ou modifies dans ce contexte local y sont propres. Cette modification prend fin lorsque l&amp;#39;excution rencontre la commande endlocal. The command setlocal prend aussi les paramtres:</p>"},{"id":"text-619","type":"text","heading":"","plain_text":"enabledelayedexpansion qui active l&amp;#39;expansion retarde;\ndisabledelayedexpansion qui dsactive l&amp;#39;expansion retarde;\nenableextensions qui active les extensions de commande;\ndisableextensions qui dsactive les extensions de commande.","html":"<p>enabledelayedexpansion qui active l&amp;#39;expansion retarde;\ndisabledelayedexpansion qui dsactive l&amp;#39;expansion retarde;\nenableextensions qui active les extensions de commande;\ndisableextensions qui dsactive les extensions de commande.</p>"},{"id":"text-620","type":"text","heading":"","plain_text":"setlocal [enableextensions[enableextensions[enableextensions[enableextensions|disableextensions][enabledelayedexpansion[enabledelayedexpansion[enabledelayedexpansion[enabledelayedexpansion|disabledelayedexpansion]","html":"<p>setlocal [enableextensions[enableextensions[enableextensions[enableextensions|disableextensions][enabledelayedexpansion[enabledelayedexpansion[enabledelayedexpansion[enabledelayedexpansion|disabledelayedexpansion]</p>"},{"id":"text-621","type":"text","heading":"","plain_text":"IV-K. La commande endlocal▲","html":"<p>IV-K. La commande endlocal▲</p>"},{"id":"text-622","type":"text","heading":"","plain_text":"Cette commande termine le contexte local gnr par la commande setlocal correspondante. Plusieurs contextes locaux pouvant tre empils les uns au-dessus des autres, toutes les modifications apportes dans le contexte local qui se termine sont perdues, y compris les modifications apportes par les paramtres de la commande setlocal. The command endlocal ne prend aucun paramtre. Exemple pour setlocal et endlocal avec le script 52:","html":"<p>Cette commande termine le contexte local gnr par la commande setlocal correspondante. Plusieurs contextes locaux pouvant tre empils les uns au-dessus des autres, toutes les modifications apportes dans le contexte local qui se termine sont perdues, y compris les modifications apportes par les paramtres de la commande setlocal. The command endlocal ne prend aucun paramtre. Exemple pour setlocal et endlocal avec le script 52:</p>"},{"id":"text-623","type":"text","heading":"","plain_text":"1.234567.8\n@écho de\nsetlocal\nensemble &quot;X=foo&quot;\nécho %X%\nendlocal\nécho %X%\npause\nsortie","html":"<p>1.234567.8\n@écho de\nsetlocal\nensemble &quot;X=foo&quot;\nécho %X%\nendlocal\nécho %X%\npause\nsortie</p>"},{"id":"text-624","type":"text","heading":"","plain_text":"IV-L. Mise en application des contextes▲","html":"<p>IV-L. Mise en application des contextes▲</p>"},{"id":"text-625","type":"text","heading":"","plain_text":"1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99100101.102.103.104105106.107.108.109.110.111.112.113.114.115.116.117.118.119120.121.122.123.124.125.126.127.128.129.130.131.132.133.134.135.136.137.138.139.140141.142.143.144.145.146.147.148.149.150.151.152.153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.171.172.173.174.175.176.\n@écho de","html":"<p>1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99100101.102.103.104105106.107.108.109.110.111.112.113.114.115.116.117.118.119120.121.122.123.124.125.126.127.128.129.130.131.132.133.134.135.136.137.138.139.140141.142.143.144.145.146.147.148.149.150.151.152.153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.171.172.173.174.175.176.\n@écho de</p>"},{"id":"text-626","type":"text","heading":"","plain_text":"ensemble &quot;ScriptName=%~nx0&quot;\nensemble &quot;NegNum=false&quot;\nensemble /a &quot;PrefixEnable=0&quot;\nensemble /a &quot;UpperPrefix=0&quot;","html":"<p>ensemble &quot;ScriptName=%~nx0&quot;\nensemble &quot;NegNum=false&quot;\nensemble /a &quot;PrefixEnable=0&quot;\nensemble /a &quot;UpperPrefix=0&quot;</p>"},{"id":"text-627","type":"text","heading":"","plain_text":"setlocal","html":"<p>setlocal</p>"},{"id":"text-628","type":"text","heading":"","plain_text":":ParseArgs\nsi &quot;%~1&quot;==&quot;&quot; goto Init\nsi /i &quot;%~1&quot;==&quot;/?&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-?&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/h&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-h&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/Aidez-moi&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-help&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/hex&quot; (\n    ensemble &quot;SInt32=%~2&quot;\n    ensemble /a &quot;SInt32&quot;\n    si errorlevel 1 (\n        décalage /1\n        goto BadSyntax\n)\n    décalage /1\n    décalage /1\n    goto ParseArgs\n)\nsi /i &quot;%~1&quot;==&quot;/p&quot; (\n    ensemble /a &quot;PrefixEnable=1&quot;\n    si %~1 EQU /P ensemble /a &quot;UpperPrefix=1&quot;\n    décalage /1\n    goto ParseArgs\n)\n:BadSyntax\necho.","html":"<p>:ParseArgs\nsi &quot;%~1&quot;==&quot;&quot; goto Init\nsi /i &quot;%~1&quot;==&quot;/?&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-?&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/h&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-h&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/Aidez-moi&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-help&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/hex&quot; (\n    ensemble &quot;SInt32=%~2&quot;\n    ensemble /a &quot;SInt32&quot;\n    si errorlevel 1 (\n        décalage /1\n        goto BadSyntax\n)\n    décalage /1\n    décalage /1\n    goto ParseArgs\n)\nsi /i &quot;%~1&quot;==&quot;/p&quot; (\n    ensemble /a &quot;PrefixEnable=1&quot;\n    si %~1 EQU /P ensemble /a &quot;UpperPrefix=1&quot;\n    décalage /1\n    goto ParseArgs\n)\n:BadSyntax\necho.</p>"},{"id":"text-629","type":"text","heading":"","plain_text":"net helpmsg 87\nécho [[[[%~1 ]\necho.\nsi ne pas &quot;%~0&quot;==&quot;:BadSyntax&quot; endlocal\nsortie /b 1","html":"<p>net helpmsg 87\nécho [[[[%~1 ]\necho.\nsi ne pas &quot;%~0&quot;==&quot;:BadSyntax&quot; endlocal\nsortie /b 1</p>"},{"id":"text-630","type":"text","heading":"","plain_text":":Init\nsi défini SInt32 goto Exec\n:UnknowError\nappel :BadSyntax /hex\nappel :Help\nendlocal\nsortie /b 2","html":"<p>:Init\nsi défini SInt32 goto Exec\n:UnknowError\nappel :BadSyntax /hex\nappel :Help\nendlocal\nsortie /b 2</p>"},{"id":"text-631","type":"text","heading":"","plain_text":":Exec","html":"<p>:Exec</p>"},{"id":"text-632","type":"text","heading":"","plain_text":"si %SInt32% LSS 0 (\n    ensemble &quot;NegNum=true&quot;\n    ensemble /a &quot;SInt32=~SInt32&quot;\n)","html":"<p>si %SInt32% LSS 0 (\n    ensemble &quot;NegNum=true&quot;\n    ensemble /a &quot;SInt32=~SInt32&quot;\n)</p>"},{"id":"text-633","type":"text","heading":"","plain_text":"ensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;","html":"<p>ensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;</p>"},{"id":"text-634","type":"text","heading":"","plain_text":"si &quot;%NegNum%&quot;==&quot;true&quot; (\n    ensemble /a &quot;Nibble0=15  Nibble0&quot;\n    ensemble /a &quot;Nibble1=15  Nibble1&quot;\n    ensemble /a &quot;Nibble2=15  Nibble2&quot;\n    ensemble /a &quot;Nibble3=15  Nibble3&quot;\n    ensemble /a &quot;Nibble4=15  Nibble4&quot;\n    ensemble /a &quot;Nibble5=15  Nibble5&quot;\n    ensemble /a &quot;Nibble6=15  Nibble6&quot;\n    ensemble /a &quot;Nibble7=15  Nibble7&quot;\n)","html":"<p>si &quot;%NegNum%&quot;==&quot;true&quot; (\n    ensemble /a &quot;Nibble0=15  Nibble0&quot;\n    ensemble /a &quot;Nibble1=15  Nibble1&quot;\n    ensemble /a &quot;Nibble2=15  Nibble2&quot;\n    ensemble /a &quot;Nibble3=15  Nibble3&quot;\n    ensemble /a &quot;Nibble4=15  Nibble4&quot;\n    ensemble /a &quot;Nibble5=15  Nibble5&quot;\n    ensemble /a &quot;Nibble6=15  Nibble6&quot;\n    ensemble /a &quot;Nibble7=15  Nibble7&quot;\n)</p>"},{"id":"text-635","type":"text","heading":"","plain_text":"si %Nibble0% GTR 9 (\n    si %Nibble0% EQU dix ensemble &quot;Nibble0=A&quot;\n    si %Nibble0% EQU 11 ensemble &quot;Nibble0=B&quot;\n    si %Nibble0% EQU 12 ensemble &quot;Nibble0=C&quot;\n    si %Nibble0% EQU 13 ensemble &quot;Nibble0=D&quot;\n    si %Nibble0% EQU 14 ensemble &quot;Nibble0=E&quot;\n    si %Nibble0% EQU 15 ensemble &quot;Nibble0=F&quot;\n)\nsi %Nibble1% GTR 9 (\n    si %Nibble1% EQU dix ensemble &quot;Nibble1=A&quot;\n    si %Nibble1% EQU 11 ensemble &quot;Nibble1=B&quot;\n    si %Nibble1% EQU 12 ensemble &quot;Nibble1=C&quot;\n    si %Nibble1% EQU 13 ensemble &quot;Nibble1=D&quot;\n    si %Nibble1% EQU 14 ensemble &quot;Nibble1=E&quot;\n    si %Nibble1% EQU 15 ensemble &quot;Nibble1=F&quot;\n)\nsi %Nibble2% GTR 9 (\n    si %Nibble2% EQU dix ensemble &quot;Nibble2=A&quot;\n    si %Nibble2% EQU 11 ensemble &quot;Nibble2=B&quot;\n    si %Nibble2% EQU 12 ensemble &quot;Nibble2=C&quot;\n    si %Nibble2% EQU 13 ensemble &quot;Nibble2=D&quot;\n    si %Nibble2% EQU 14 ensemble &quot;Nibble2=E&quot;\n    si %Nibble2% EQU 15 ensemble &quot;Nibble2=F&quot;\n)\nsi %Nibble3% GTR 9 (\n    si %Nibble3% EQU dix ensemble &quot;Nibble3=A&quot;\n    si %Nibble3% EQU 11 ensemble &quot;Nibble3=B&quot;\n    si %Nibble3% EQU 12 ensemble &quot;Nibble3=C&quot;\n    si %Nibble3% EQU 13 ensemble &quot;Nibble3=D&quot;\n    si %Nibble3% EQU 14 ensemble &quot;Nibble3=E&quot;\n    si %Nibble3% EQU 15 ensemble &quot;Nibble3=F&quot;\n)\nsi %Nibble4% GTR 9 (\n    si %Nibble4% EQU dix ensemble &quot;Nibble4=A&quot;\n    si %Nibble4% EQU 11 ensemble &quot;Nibble4=B&quot;\n    si %Nibble4% EQU 12 ensemble &quot;Nibble4=C&quot;\n    si %Nibble4% EQU 13 ensemble &quot;Nibble4=D&quot;\n    si %Nibble4% EQU 14 ensemble &quot;Nibble4=E&quot;\n    si %Nibble4% EQU 15 ensemble &quot;Nibble4=F&quot;\n)\nsi %Nibble5% GTR 9 (\n    si %Nibble5% EQU dix ensemble &quot;Nibble5=A&quot;\n    si %Nibble5% EQU 11 ensemble &quot;Nibble5=B&quot;\n    si %Nibble5% EQU 12 ensemble &quot;Nibble5=C&quot;\n    si %Nibble5% EQU 13 ensemble &quot;Nibble5=D&quot;\n    si %Nibble5% EQU 14 ensemble &quot;Nibble5=E&quot;\n    si %Nibble5% EQU 15 ensemble &quot;Nibble5=F&quot;\n)\nsi %Nibble6% GTR 9 (\n    si %Nibble6% EQU dix ensemble &quot;Nibble6=A&quot;\n    si %Nibble6% EQU 11 ensemble &quot;Nibble6=B&quot;\n    si %Nibble6% EQU 12 ensemble &quot;Nibble6=C&quot;\n    si %Nibble6% EQU 13 ensemble &quot;Nibble6=D&quot;\n    si %Nibble6% EQU 14 ensemble &quot;Nibble6=E&quot;\n    si %Nibble6% EQU 15 ensemble &quot;Nibble6=F&quot;\n)\nsi %Nibble7% GTR 9 (\n    si %Nibble7% EQU dix ensemble &quot;Nibble7=A&quot;\n    si %Nibble7% EQU 11 ensemble &quot;Nibble7=B&quot;\n    si %Nibble7% EQU 12 ensemble &quot;Nibble7=C&quot;\n    si %Nibble7% EQU 13 ensemble &quot;Nibble7=D&quot;\n    si %Nibble7% EQU 14 ensemble &quot;Nibble7=E&quot;\n    si %Nibble7% EQU 15 ensemble &quot;Nibble7=F&quot;\n)","html":"<p>si %Nibble0% GTR 9 (\n    si %Nibble0% EQU dix ensemble &quot;Nibble0=A&quot;\n    si %Nibble0% EQU 11 ensemble &quot;Nibble0=B&quot;\n    si %Nibble0% EQU 12 ensemble &quot;Nibble0=C&quot;\n    si %Nibble0% EQU 13 ensemble &quot;Nibble0=D&quot;\n    si %Nibble0% EQU 14 ensemble &quot;Nibble0=E&quot;\n    si %Nibble0% EQU 15 ensemble &quot;Nibble0=F&quot;\n)\nsi %Nibble1% GTR 9 (\n    si %Nibble1% EQU dix ensemble &quot;Nibble1=A&quot;\n    si %Nibble1% EQU 11 ensemble &quot;Nibble1=B&quot;\n    si %Nibble1% EQU 12 ensemble &quot;Nibble1=C&quot;\n    si %Nibble1% EQU 13 ensemble &quot;Nibble1=D&quot;\n    si %Nibble1% EQU 14 ensemble &quot;Nibble1=E&quot;\n    si %Nibble1% EQU 15 ensemble &quot;Nibble1=F&quot;\n)\nsi %Nibble2% GTR 9 (\n    si %Nibble2% EQU dix ensemble &quot;Nibble2=A&quot;\n    si %Nibble2% EQU 11 ensemble &quot;Nibble2=B&quot;\n    si %Nibble2% EQU 12 ensemble &quot;Nibble2=C&quot;\n    si %Nibble2% EQU 13 ensemble &quot;Nibble2=D&quot;\n    si %Nibble2% EQU 14 ensemble &quot;Nibble2=E&quot;\n    si %Nibble2% EQU 15 ensemble &quot;Nibble2=F&quot;\n)\nsi %Nibble3% GTR 9 (\n    si %Nibble3% EQU dix ensemble &quot;Nibble3=A&quot;\n    si %Nibble3% EQU 11 ensemble &quot;Nibble3=B&quot;\n    si %Nibble3% EQU 12 ensemble &quot;Nibble3=C&quot;\n    si %Nibble3% EQU 13 ensemble &quot;Nibble3=D&quot;\n    si %Nibble3% EQU 14 ensemble &quot;Nibble3=E&quot;\n    si %Nibble3% EQU 15 ensemble &quot;Nibble3=F&quot;\n)\nsi %Nibble4% GTR 9 (\n    si %Nibble4% EQU dix ensemble &quot;Nibble4=A&quot;\n    si %Nibble4% EQU 11 ensemble &quot;Nibble4=B&quot;\n    si %Nibble4% EQU 12 ensemble &quot;Nibble4=C&quot;\n    si %Nibble4% EQU 13 ensemble &quot;Nibble4=D&quot;\n    si %Nibble4% EQU 14 ensemble &quot;Nibble4=E&quot;\n    si %Nibble4% EQU 15 ensemble &quot;Nibble4=F&quot;\n)\nsi %Nibble5% GTR 9 (\n    si %Nibble5% EQU dix ensemble &quot;Nibble5=A&quot;\n    si %Nibble5% EQU 11 ensemble &quot;Nibble5=B&quot;\n    si %Nibble5% EQU 12 ensemble &quot;Nibble5=C&quot;\n    si %Nibble5% EQU 13 ensemble &quot;Nibble5=D&quot;\n    si %Nibble5% EQU 14 ensemble &quot;Nibble5=E&quot;\n    si %Nibble5% EQU 15 ensemble &quot;Nibble5=F&quot;\n)\nsi %Nibble6% GTR 9 (\n    si %Nibble6% EQU dix ensemble &quot;Nibble6=A&quot;\n    si %Nibble6% EQU 11 ensemble &quot;Nibble6=B&quot;\n    si %Nibble6% EQU 12 ensemble &quot;Nibble6=C&quot;\n    si %Nibble6% EQU 13 ensemble &quot;Nibble6=D&quot;\n    si %Nibble6% EQU 14 ensemble &quot;Nibble6=E&quot;\n    si %Nibble6% EQU 15 ensemble &quot;Nibble6=F&quot;\n)\nsi %Nibble7% GTR 9 (\n    si %Nibble7% EQU dix ensemble &quot;Nibble7=A&quot;\n    si %Nibble7% EQU 11 ensemble &quot;Nibble7=B&quot;\n    si %Nibble7% EQU 12 ensemble &quot;Nibble7=C&quot;\n    si %Nibble7% EQU 13 ensemble &quot;Nibble7=D&quot;\n    si %Nibble7% EQU 14 ensemble &quot;Nibble7=E&quot;\n    si %Nibble7% EQU 15 ensemble &quot;Nibble7=F&quot;\n)</p>"},{"id":"text-636","type":"text","heading":"","plain_text":"ensemble &quot;LSW=%Nibble3%%Nibble2%%Nibble1%%Nibble0%&quot;","html":"<p>ensemble &quot;LSW=%Nibble3%%Nibble2%%Nibble1%%Nibble0%&quot;</p>"},{"id":"text-637","type":"text","heading":"","plain_text":"ensemble &quot;MSW=%Nibble7%%Nibble6%%Nibble5%%Nibble4%&quot;","html":"<p>ensemble &quot;MSW=%Nibble7%%Nibble6%%Nibble5%%Nibble4%&quot;</p>"},{"id":"text-638","type":"text","heading":"","plain_text":"si %PrefixEnable% EQU 1 (\n    si %UpperPrefix% EQU 1 (\n        écho 0X%MSW%%LSW%\n    ) autre (\n        écho 0x%MSW%%LSW%\n    )\n) autre (\n    écho %MSW%%LSW%\n)\ngoto End","html":"<p>si %PrefixEnable% EQU 1 (\n    si %UpperPrefix% EQU 1 (\n        écho 0X%MSW%%LSW%\n    ) autre (\n        écho 0x%MSW%%LSW%\n    )\n) autre (\n    écho %MSW%%LSW%\n)\ngoto End</p>"},{"id":"text-639","type":"text","heading":"","plain_text":":Help\necho.\nécho %ScriptName% [/p^[/p^[/p^[/p^|/P]/hex ^&lt;number^&gt;\nécho %ScriptName% -?^\necho.\nécho     /hex    Dfinit le ^&lt;number^&gt; qui doit tre exprim en hexadcimal.\nécho     /p      Dfinit que le prfixe doit tre affich en minuscules.\nécho     /P      Dfinit que le prfixe doit tre affich en majuscules.\necho.    /?      Affiche cette aide.\necho.","html":"<p>:Help\necho.\nécho %ScriptName% [/p^[/p^[/p^[/p^|/P]/hex ^&lt;number^&gt;\nécho %ScriptName% -?^\necho.\nécho     /hex    Dfinit le ^&lt;number^&gt; qui doit tre exprim en hexadcimal.\nécho     /p      Dfinit que le prfixe doit tre affich en minuscules.\nécho     /P      Dfinit que le prfixe doit tre affich en majuscules.\necho.    /?      Affiche cette aide.\necho.</p>"},{"id":"text-640","type":"text","heading":"","plain_text":":End\nsi ne pas &quot;%~0&quot;==&quot;:Help&quot; endlocal\nsortie /b 0","html":"<p>:End\nsi ne pas &quot;%~0&quot;==&quot;:Help&quot; endlocal\nsortie /b 0</p>"},{"id":"text-641","type":"text","heading":"","plain_text":"Le script 53 doit tre appel avec des paramtres afin de fonctionner. Ainsi, quand on appelle ce script avec l&amp;#39;un des paramtres suivants: /?, &#8211;, /h, -h, /help ou -help, l&amp;#39;aide est affiche. Si on appelle le script avec les paramtres /hex n (ou n est le nombre voulu), il affiche la reprsentation hexadcimale de ce nombre. Notez galement l&amp;#39;utilisation du paramtre %~nx0 pour dfinir le nom du script, ici, la fonction :Help est appele via un appel au label :UnknowError (la commande exit /b 0 du label :End fournit le saut  l&amp;#39;adresse de retour), %0 aurait t, alors, la chane :Help.\nUn script devrait toujours avoir un squelette similaire  celui du script 53. Pour en connatre la raison, examinons ses diffrentes parties:","html":"<p>Le script 53 doit tre appel avec des paramtres afin de fonctionner. Ainsi, quand on appelle ce script avec l&amp;#39;un des paramtres suivants: /?, &#8211;, /h, -h, /help ou -help, l&amp;#39;aide est affiche. Si on appelle le script avec les paramtres /hex n (ou n est le nombre voulu), il affiche la reprsentation hexadcimale de ce nombre. Notez galement l&amp;#39;utilisation du paramtre %~nx0 pour dfinir le nom du script, ici, la fonction :Help est appele via un appel au label :UnknowError (la commande exit /b 0 du label :End fournit le saut  l&amp;#39;adresse de retour), %0 aurait t, alors, la chane :Help.\nUn script devrait toujours avoir un squelette similaire  celui du script 53. Pour en connatre la raison, examinons ses diffrentes parties:</p>"},{"id":"text-642","type":"text","heading":"","plain_text":"le script commence par @Écho off pour rendre plus net l&amp;#39;affichage, puis les variables de configuration sont initialises avec leurs valeurs par dfaut, ce qui permet au script de fonctionner mme si ces valeurs ne sont pas modifies par la suite. The command setlocal est utilise pour les cas d&amp;#39;erreur, par exemple si le nombre donn via l&amp;#39;argument /hex dpasse 32 bits. La variable ErrorLevel n&amp;#39;est pas remise  jour suite  une erreur dans une commande interne, ainsi, si l&amp;#39;on appelle le script depuis l&amp;#39;interprteur avec en paramtre un nombre invalide, tous les appels du script qui suivront, mme avec un nombre valide, se termineront sur une erreur. Pensez  utiliser la commande endlocal avant chaque point de sortie du script;\nvient ensuite le label :ParseArgs dans lequel les paramtres d&amp;#39;appel vont tre vrifis, chaque fois qu&amp;#39;un paramtre est trouv, sa valeur est dfinie dans la variable correspondante puis les paramtres d&amp;#39;appel sont dcals avant le retour au label :ParseArgs. Si le paramtre fourni dans la commande d&amp;#39;appel n&amp;#39;est pas trouv, l&amp;#39;excution continue jusqu&amp;#39;au label :BadSyntax qui affiche un message d&amp;#39;erreur et quitte le script avec le code d&amp;#39;erreur 1;\nune fois tous les paramtres lus, l&amp;#39;excution est redirige vers le label :Init, qui a pour fonction de vrifier que les donnes de travail ont bien t fournies dans la commande d&amp;#39;appel. En effet, ce script appel sans paramtre s&amp;#39;excute au moins jusqu&amp;#39;au label :Init. Dans ce label, il convient, en gnral, de modifier les variables de configuration en fonction des valeurs fournies dans la commande d&amp;#39;appel. Si les donnes fournies ne sont pas valides, l&amp;#39;excution continue au label :UnknowError qui, dans notre cas, va afficher o se trouve l&amp;#39;erreur ainsi que l&amp;#39;aide;\nsi les donnes de travail sont valides, l&amp;#39;excution est redirige vers le label :Exec qui va excuter le travail requis puis afficher le rsultat avant d&amp;#39;tre redirige vers le label :End;\nl&#39;étiquette :Help fournit une aide en ligne de commande (c&amp;#39;est toujours utile). Celui-ci se trouvant juste devant le label :End, il peut  la fois tre utilis comme une fonction ou comme une portion de code classique. Notez l&amp;#39;chappement de la commande écho avec le point  la ligne echo. /? Affiche cette aide. sans quoi l&amp;#39;interprteur aurait affich l&amp;#39;aide de la commande écho.","html":"<p>le script commence par @Écho off pour rendre plus net l&amp;#39;affichage, puis les variables de configuration sont initialises avec leurs valeurs par dfaut, ce qui permet au script de fonctionner mme si ces valeurs ne sont pas modifies par la suite. The command setlocal est utilise pour les cas d&amp;#39;erreur, par exemple si le nombre donn via l&amp;#39;argument /hex dpasse 32 bits. La variable ErrorLevel n&amp;#39;est pas remise  jour suite  une erreur dans une commande interne, ainsi, si l&amp;#39;on appelle le script depuis l&amp;#39;interprteur avec en paramtre un nombre invalide, tous les appels du script qui suivront, mme avec un nombre valide, se termineront sur une erreur. Pensez  utiliser la commande endlocal avant chaque point de sortie du script;\nvient ensuite le label :ParseArgs dans lequel les paramtres d&amp;#39;appel vont tre vrifis, chaque fois qu&amp;#39;un paramtre est trouv, sa valeur est dfinie dans la variable correspondante puis les paramtres d&amp;#39;appel sont dcals avant le retour au label :ParseArgs. Si le paramtre fourni dans la commande d&amp;#39;appel n&amp;#39;est pas trouv, l&amp;#39;excution continue jusqu&amp;#39;au label :BadSyntax qui affiche un message d&amp;#39;erreur et quitte le script avec le code d&amp;#39;erreur 1;\nune fois tous les paramtres lus, l&amp;#39;excution est redirige vers le label :Init, qui a pour fonction de vrifier que les donnes de travail ont bien t fournies dans la commande d&amp;#39;appel. En effet, ce script appel sans paramtre s&amp;#39;excute au moins jusqu&amp;#39;au label :Init. Dans ce label, il convient, en gnral, de modifier les variables de configuration en fonction des valeurs fournies dans la commande d&amp;#39;appel. Si les donnes fournies ne sont pas valides, l&amp;#39;excution continue au label :UnknowError qui, dans notre cas, va afficher o se trouve l&amp;#39;erreur ainsi que l&amp;#39;aide;\nsi les donnes de travail sont valides, l&amp;#39;excution est redirige vers le label :Exec qui va excuter le travail requis puis afficher le rsultat avant d&amp;#39;tre redirige vers le label :End;\nl&#039;étiquette :Help fournit une aide en ligne de commande (c&amp;#39;est toujours utile). Celui-ci se trouvant juste devant le label :End, il peut  la fois tre utilis comme une fonction ou comme une portion de code classique. Notez l&amp;#39;chappement de la commande écho avec le point  la ligne echo. /? Affiche cette aide. sans quoi l&amp;#39;interprteur aurait affich l&amp;#39;aide de la commande écho.</p>"},{"id":"text-643","type":"text","heading":"","plain_text":"Les boucles sont gres par la commande pour, elle permettent une grande quantit d&amp;#39;actions sur des fichiers, des rpertoires ou des chanes de caractres. La boucle pour se compose d&amp;#39;un ensemble sur lequel s&amp;#39;opre une commande. le    est pars puis transite au moyen d&amp;#39;une     autour du . La syntaxe de base de la boucle pour est la suivante.\npour %&lt;variable&gt; dans (&lt;ensemble&gt;) faire &lt;ordre&gt;  \nle     est en fait un paramtre de commande propre  la boucle pour. Elle utilise donc la syntaxe et les modificateurs de paramtre de commande (voir section IV.E.1Les modificateurs de paramtres de commande pour plus d&amp;#39;information),  ceci prs que le paramtre est dsign par une lettre et que le caractre % du paramtre doit tre chapp lorsque la boucle est utilise dans un script. Ainsi dans un script, le paramtre %A doit tre utilis avec le caractre d&amp;#39;chappement %, ce qui nous donne la syntaxe %%A. Il faut aussi noter que les paramtres de la boucle pour respectent la casse, ainsi %a est diffrent de %A.\nle    est compos d&amp;#39;une ou plusieurs entres. Si plusieurs entres sont prsentes, elles doivent tre spares par des virgules pour permettre  la boucle de les distinguer correctement. Ce     peut tre:","html":"<p>Les boucles sont gres par la commande pour, elle permettent une grande quantit d&amp;#39;actions sur des fichiers, des rpertoires ou des chanes de caractres. La boucle pour se compose d&amp;#39;un ensemble sur lequel s&amp;#39;opre une commande. le    est pars puis transite au moyen d&amp;#39;une     autour du . La syntaxe de base de la boucle pour est la suivante.\npour %&lt;variable&gt; dans (&lt;ensemble&gt;) faire &lt;ordre&gt;  \nle     est en fait un paramtre de commande propre  la boucle pour. Elle utilise donc la syntaxe et les modificateurs de paramtre de commande (voir section IV.E.1Les modificateurs de paramtres de commande pour plus d&amp;#39;information),  ceci prs que le paramtre est dsign par une lettre et que le caractre % du paramtre doit tre chapp lorsque la boucle est utilise dans un script. Ainsi dans un script, le paramtre %A doit tre utilis avec le caractre d&amp;#39;chappement %, ce qui nous donne la syntaxe %%A. Il faut aussi noter que les paramtres de la boucle pour respectent la casse, ainsi %a est diffrent de %A.\nle    est compos d&amp;#39;une ou plusieurs entres. Si plusieurs entres sont prsentes, elles doivent tre spares par des virgules pour permettre  la boucle de les distinguer correctement. Ce     peut tre:</p>"},{"id":"text-644","type":"text","heading":"","plain_text":"soit des noms de fichiers (avec leurs chemins d&amp;#39;accs s&amp;#39;ils ne sont pas dans le rpertoire courant);\nsoit des chemins d&amp;#39;accs;\nsoit des chanes de caractres.","html":"<p>soit des noms de fichiers (avec leurs chemins d&amp;#39;accs s&amp;#39;ils ne sont pas dans le rpertoire courant);\nsoit des chemins d&amp;#39;accs;\nsoit des chanes de caractres.</p>"},{"id":"text-645","type":"text","heading":"","plain_text":"Toutes les composantes de l&amp;#39;    sont passes  la     sous forme de chanes de caractres. Seule l&amp;#39;utilisation qui en est faite dans le traitement dtermine s&amp;#39;il s&amp;#39;agit d&amp;#39;une chane de caractres, d&amp;#39;un nom de fichier ou d&amp;#39;un chemin d&amp;#39;accs. Si une chane de l&amp;#39;    contient un ou plusieurs espaces, elle doit tre place entre guillemets. Exemple avec le script 54:","html":"<p>Toutes les composantes de l&amp;#39;    sont passes  la     sous forme de chanes de caractres. Seule l&amp;#39;utilisation qui en est faite dans le traitement dtermine s&amp;#39;il s&amp;#39;agit d&amp;#39;une chane de caractres, d&amp;#39;un nom de fichier ou d&amp;#39;un chemin d&amp;#39;accs. Si une chane de l&amp;#39;    contient un ou plusieurs espaces, elle doit tre place entre guillemets. Exemple avec le script 54:</p>"},{"id":"text-646","type":"text","heading":"","plain_text":"1.2345\n@écho de\npour %%A dans (texte) faire écho %%A\npour %%B dans (&quot;%cd%&quot;) faire si exister %%B écho %%B\npause\nsortie /b","html":"<p>1.2345\n@écho de\npour %%A dans (texte) faire écho %%A\npour %%B dans (&quot;%cd%&quot;) faire si exister %%B écho %%B\npause\nsortie /b</p>"},{"id":"text-647","type":"text","heading":"","plain_text":"Si les extensions de commande sont actives, la boucle pour peut prendre un des paramtres de la liste suivante:\nV-A. Les boucles pour chemin d&amp;#39;accs▲","html":"<p>Si les extensions de commande sont actives, la boucle pour peut prendre un des paramtres de la liste suivante:\nV-A. Les boucles pour chemin d&amp;#39;accs▲</p>"},{"id":"text-648","type":"text","heading":"","plain_text":"Les boucles pour chemin d&amp;#39;accs permettent d&amp;#39;effectuer des recherches de dossiers ou de fichiers. La recherche de dossier s&amp;#39;effectue avec le paramtre /d tandis que la recherche de fichier s&amp;#39;effectue avec le paramtre /r. Leurs syntaxes sont les suivantes:\npour /d %&lt;paramtre&gt; dans ([« ][[[[&lt;chemin_d&amp;#39;accs&gt;]*[\"]) faire &lt;cmd&gt;  \npour /r [\"][[[[&lt;chemin_d&amp;#39;accs&gt;][\"] %&lt;paramtre&gt; dans ([\"]*[\"]) faire &lt;cmd&gt;","html":"<p>Les boucles pour chemin d&amp;#39;accs permettent d&amp;#39;effectuer des recherches de dossiers ou de fichiers. La recherche de dossier s&amp;#39;effectue avec le paramtre /d tandis que la recherche de fichier s&amp;#39;effectue avec le paramtre /r. Leurs syntaxes sont les suivantes:\npour /d %&lt;paramtre&gt; dans ([« ][[[[&lt;chemin_d&amp;#39;accs&gt;]*[&quot;]) faire &lt;cmd&gt;  \npour /r [&quot;][[[[&lt;chemin_d&amp;#39;accs&gt;][&quot;] %&lt;paramtre&gt; dans ([&quot;]*[&quot;]) faire &lt;cmd&gt;</p>"},{"id":"text-649","type":"text","heading":"","plain_text":"Options","html":"<p>Options</p>"},{"id":"text-650","type":"text","heading":"","plain_text":"Descriptions","html":"<p>Descriptions</p>"}],"sections":[{"id":"text-1","heading":"Text","content":"Les fichiers de commandes sont des scripts de commande qui s&#39;exécutent dans l&#39;interpréteur de commandes Windows. Alors, quel pourrait être l’intérêt d’écrire ces lignes de commande dans un script? En fait, il y a plusieurs raisons:"},{"id":"text-2","heading":"Text","content":"évitez de devoir réécrire constamment les mêmes commandes lors de tâches répétitives;\nPossibilité de créer de vrais petits programmes facilitant les tâches à exécuter via l&#39;interpréteur de commandes."},{"id":"text-3","heading":"Text","content":"Nous étudierons des méthodes pour concevoir ces programmes. Dans la suite de ce document, nous utiliserons la convention suivante:"},{"id":"text-4","heading":"Text","content":"les termes interprète de commande ou interprète décrivent l&#39;exécutable cmd.exe;\ndans les syntaxes de commande, le cadre des pièces avec les caractères [[[[ et ] sont facultatifs, le cadre des pièces avec les caractères &lt; et &gt; sont remplacés par différentes informations à fournir (celles-ci seront précises avec la syntaxe) et les parties encadrées avec les caractères  et  sont des parties à choix multiples o chaque choix est séparé des autres avec le caractère |."},{"id":"text-5","heading":"Text","content":"La convention syntaxique est la même que pour l&#39;aide en ligne de commande, ce qui facilitera votre compréhension.\nI-A. L&#39;éditeur de texte ▲"},{"id":"text-6","heading":"Text","content":"Un simple éditeur de texte, tel que le bloc-notes fourni avec Windows, n’est pas pratique pour écrire des scripts batch. Pour exploiter pleinement les capacités de ces scripts, vous devez être en mesure de coder des caractères non anglais tels que des accents ou 砻 afin d&#39;accéder aux fichiers dont le nom contient ces types de caractères exotiques. La plupart des éditeurs de texte codent les fichiers avec le jeu de caractères ANSI correspondant à la langue d&#39;installation du système d&#39;exploitation, tandis que l&#39;interpréteur de commande utilise un temps de page de code (également appelé Page de code) en tant que CP-850, qui est le codage par défaut de l’interprète pour les systèmes Windows installés en français (France).\nSous Windows, vous disposez peut-être déjà d’un éditeur de texte, le Notepad ++ (la version 5.9.x ou une version ultérieure est nécessaire); si ce n&#39;est pas le cas, vous pouvez le télécharger ici: http://notepad-plus-plus.org/en/\nDans ce dernier cas, vous pourrez sélectionner le codage dans le menu Codage&gt; Codage de caractères, puis si vous voulez le français par exemple: sélectionnez Langues de l&#39;Europe de l&#39;Ouest&gt; OEM-850. Dans Notepad ++, le pages de code sont des appels OEM-XXX, au lieu de CP-XXX, mais ce sont les mêmes codages. Il convient également de noter que dans le même menu que OEM-850, il y a OEM-863: français; c&#39;est français, mais pour le Qubec. Cette manipulation sera effectuée pour que chaque script utilise l&#39;encodage correct. Il n&#39;est pas possible d&#39;effectuer cette opération automatiquement dans Notepad ++."},{"id":"text-7","heading":"Text","content":"I-B. Encodage des caractères ▲"},{"id":"text-8","heading":"Text","content":"La gestion des pages de code dans l&#39;interpréteur se fait via les commandes mode et chcp, ces commandes sont utilisées pour afficher le page de code utilisé ou le modifier en utilisant l’une des syntaxes suivantes.\nDéfinir les page de code  utiliser (o     est le nombre de page de code).\nmode chatte sélectionnez cp=&lt;XXX&gt;  \nchcp &lt;XXX&gt;  \nVoir la page de code utilisé.\nmode chatte cp [/status]  \nchcp \nLe tableau 1 fournit une liste non exhaustive des différents pages de code utilisé par l&#39;interpréteur de commandes."},{"id":"text-9","heading":"Text","content":"Page de code"},{"id":"text-10","heading":"Text","content":"La description"},{"id":"text-11","heading":"Text","content":"CP-437"},{"id":"text-12","heading":"Text","content":"pour le soutien des langues anglophones."},{"id":"text-13","heading":"Text","content":"CP-720"},{"id":"text-14","heading":"Text","content":"pour le soutien des langues arabes."},{"id":"text-15","heading":"Text","content":"CP-737"},{"id":"text-16","heading":"Text","content":"pour le soutien du grec."},{"id":"text-17","heading":"Text","content":"CP-775"},{"id":"text-18","heading":"Text","content":"pour le soutien des langues baltes."},{"id":"text-19","heading":"Text","content":"CP-850"},{"id":"text-20","heading":"Text","content":"pour la prise en charge des langues d&#39;Europe occidentale (mises à jour par le CP 858), y compris le français (France), mais également l&#39;allemand, le basque, le catalan, le danois, l&#39;espagnol, le finnois, l&#39;italien, le français espagnol, le norvégien, le portugais, le suédois, l&#39;afrikaans, le féroïen, Flamand et irlandais."},{"id":"text-21","heading":"Text","content":"CP-852"},{"id":"text-22","heading":"Text","content":"pour le soutien des langues d&#39;Europe centrale."},{"id":"text-23","heading":"Text","content":"CP-855"},{"id":"text-24","heading":"Text","content":"pour le soutien de l&#39;alphabet cyrillique."},{"id":"text-25","heading":"Text","content":"CP-857"},{"id":"text-26","heading":"Text","content":"pour le soutien du turc."},{"id":"text-27","heading":"Text","content":"CP-858"},{"id":"text-28","heading":"Text","content":"pour le support des langues d&#39;Europe occidentale, y compris le français (France), il s&#39;agit d&#39;une mise à jour 1998 basée sur le CP-850 ou seul le symbole € a été ajouté au point de code 0xD5."},{"id":"text-29","heading":"Text","content":"CP-861"},{"id":"text-30","heading":"Text","content":"pour le soutien de islandais."},{"id":"text-31","heading":"Text","content":"CP-863"},{"id":"text-32","heading":"Text","content":"pour le soutien du français (Qubec)."},{"id":"text-33","heading":"Text","content":"CP-864"},{"id":"text-34","heading":"Text","content":"pour le soutien des langues arabes."},{"id":"text-35","heading":"Text","content":"CP-866"},{"id":"text-36","heading":"Text","content":"pour le soutien de l&#39;alphabet cyrillique."},{"id":"text-37","heading":"Text","content":"CP-869"},{"id":"text-38","heading":"Text","content":"pour le soutien du grec."},{"id":"text-39","heading":"Text","content":"Tableau 1: page de code \nIl convient de noter que, malgré la mise à jour du CP-850 par le CP-858, le codage par défaut de l’interpréteur Windows installé en français (France) reste le CP-850. Il est donc préférable d&#39;utiliser le CP-850. La liste de pages de code supporté par un système Windows est disponible dans le registre sous la clé: HKLM  SYSTEM  CurrentControlSet  Control  Nls  CodePage. Vous remarquerez la présence de 1252 dans le mentionné précédemment, c&#39;est l&#39;encodage Windows-1252 utilisé par les API Windows et donc par la plupart des ordinateurs portables sur des systèmes installés en français (France); cependant, il n&#39;est pas recommandé de l&#39;utiliser dans l&#39;interpréteur de commandes car les commandes ne sont pas faites pour le prendre en charge, cela peut même causer des bogues dans certains cas. Le codage par défaut pour l&#39;interpréteur peut être trouvé via la valeur OEMCP De type REG_SZ toujours dans ce qui est mentionné ci-dessus.\nIl est possible d&#39;ajouter Pages de code manquant (par défaut, seulement pages de code sont disponibles) en installant le pack de langue correspondant au codage souhaité. Chaque module linguistique comprend une table de conversion qui permet à Windows de convertir un point de code en une représentation graphique et de l’afficher. Il est également possible d’utiliser Unicode (UCS-2 uniquement) avec la sortie de commande interne de l’interpréteur pour permettre une interaction avec les programmes utilisant le langage Unicode natif (pour Perl par exemple) en appelant l’interprète via la commande suivante (o     est la commande à exécuter).\ncmd / u &lt;ordre&gt;  \nDans Notepad ++, vous pouvez ajouter les caractères manquants au clavier via le menu Edition&gt; Panneau de caractères ASCII, puis double-cliquez sur le caractère souhaité."},{"id":"text-40","heading":"Text","content":"I-C. Bonjour le monde ▲"},{"id":"text-41","heading":"Text","content":"Nous allons commencer par le monde traditionnel hello, voici le code (Script 1). Copiez le code dans Notepad ++, puis enregistrez-le avec l&#39;encodage OEM-850 et l&#39;extension .bat ou .cmd (uniquement sur les systèmes Vista et supérieurs)."},{"id":"text-42","heading":"Text","content":"La différence entre le fichier .bat et le fichier .cmd réside dans l&#39;interpréteur de commandes. En fait, sur les systèmes Windows XP, il existait deux interpréteurs de commandes: cmd.exe et COMMAND.COM. Les fichiers avec l&#39;extension .bat ont été gérés par cmd.exe et les fichiers avec l&#39;extension .cmd ont été gérés par COMMAND.COM, les deux types de fichiers ayant des spécificités différentes. Cependant, sous Windows Vista et au-dessus, il ne reste que cmd.exe. Tous les scripts .bat et .cmd sont exécutés par cmd.exe et ont les mêmes spécificités."},{"id":"text-43","heading":"Text","content":"1.234567.89\n@écho de\ncls"},{"id":"text-44","heading":"Text","content":"écho Bonjour Monde !!!! Dj l ?\nécho.\npause"},{"id":"text-45","heading":"Text","content":"Lorsque nous exécutons ce script en cliquant dessus, nous obtenons l&#39;affichage suivant."},{"id":"text-46","heading":"Text","content":"Regardons la composition du script 1. La première ligne, @Écho off, est déjà intéressant, il est composé:"},{"id":"text-47","heading":"Text","content":"préfixe @ qui sert à inverser l&#39;état de l&#39;affichage standard;\nde la commande écho qui est utilisé pour gérer l&#39;affichage sur la ligne de commande;\net le paramètre de qui sert à désactiver la vue standard."},{"id":"text-48","heading":"Text","content":"L’affichage standard définit ce que l’interpréteur de commandes affiche par défaut. Par exemple, lors du lancement de l&#39;interpréteur de commande ci-dessous; la vue standard renvoie le chemin du répertoire en cours, soit C:  Utilisateurs  Portable&gt;."},{"id":"text-49","heading":"Text","content":"Lors de l&#39;exécution d&#39;un script, la vue par défaut renvoie, par défaut, le chemin d&#39;accès du répertoire actuel, suivi de l&#39;exécution de la commande, comme dans l&#39;exemple ci-dessous."},{"id":"text-50","heading":"Text","content":"Le préfixe @, lorsqu&#39;il est placé en début de ligne, sert à inverser l&#39;état de l&#39;affichage standard (activé ou désactivé) pour l&#39;exécution de la commande qui le suit (pas seulement pour la commande écho). Ce comportement se termine lorsque la commande est exécutée. Donc la commande @cd / d &quot;C:  Users  Portable &quot; ne sera affiché que si l&#39;affichage standard est désactivé. La syntaxe du préfixe @ est la suivante (o     est la commande à exécuter):\n@&lt;ordre&gt;  \nLa commande écho Verts l&#39;affichage dans l&#39;interprète, il peut:"},{"id":"text-51","heading":"Text","content":"changer le statut de l&#39;affichage standard;\nafficher l&#39;état de l&#39;affichage standard;\nafficher un message ou une ligne vide dans l&#39;interprète."},{"id":"text-52","heading":"Text","content":"La désactivation de l&#39;affichage standard peut s&#39;effectuer via la syntaxe suivante (uniquement les erreurs et les messages de la commande écho sont affichés).\nécho de  \nActiver l&#39;affichage standard peut être effectué via la syntaxe suivante (tout est affiché).\nécho nous \nUtiliser sans paramètres, la commande écho renvoie le statut de la vue standard actuelle.\nécho  \nSi nous répétons le script 1, la ligne @Écho off pour désactiver la vue standard sans que la commande soit affichée. Sur la deuxième ligne du script 1, la commande cls est utilisé pour vider la fenêtre de l’interprète de son contenu, cette commande ne prend aucun paramètre. Sa syntaxe est donc la suivante.\ncls \nLa ligne suivante du script 1 est vide, elle ne sera donc pas prise en compte lors de l&#39;exécution du script, ce qui le rendra plus lisible. La quatrième ligne est composée de la commande rem et une chaîne de caractères, cette commande vous permet d’insérer des remarques dans votre script. Si et seulement si l&#39;affichage standard est activé, la commande rem sera affiché. La syntaxe de la commande rem est la suivante (o     est la chaîne de caractères insérée dans la remarque).\nLa cinquième ligne du script 1, :: Ceci est un commentaire., est composé du préfixe :: et une chaîne de caractères. Le préfixe :: définit la chaîne de caractères qui la suit sous forme de commentaire; ce comportement se termine sur la première ligne de retour. Indépendamment de l’état de l’affichage standard, la chaîne de caractères précédée du préfixe :: ne sera pas affiché. La syntaxe est la suivante (o     est le commentaire inséré).\nSuit une autre ligne vide puis la commande echo Hello World !!!! Dj l? qui affiche Bonjour Monde !!!! Dj l? dans la fenêtre de l&#39;interprète. La syntaxe suivante vous permet d’afficher un message même si l’affichage standard est désactivé (o     est le message d’affichage).\nécho &lt;message&gt;  \nPuis vient la commande écho. ce qui permet d&#39;afficher la ligne vide que l&#39;on voit dans l&#39;affichage obtenu. Si un point suit directement la commande écho et qu&#39;après le point il y a un retour de la ligne, celle-ci affiche une ligne vide.\nécho.  \nSur la ligne suivante se trouve la commande pause qui met en pause l&#39;exécution du script jusqu&#39;à ce que l&#39;utilisateur appuie sur une touche du clavier, il affiche le message Appuyez sur une touche pour continuer &#8230; (quel que soit l&#39;état actuel de la vue standard) et ne prend aucun paramètre. En script 1, cette commande permet de visualiser le contenu de la fenêtre de l&#39;interpréteur avant la fermeture de celle-ci.\npause"},{"id":"text-53","heading":"Text","content":"I-D. Différence entre la commande rem et le préfixe :: ▲"},{"id":"text-54","heading":"Text","content":"Pour mieux comprendre la différence entre la commande rem et le préfixe ::, essayons le script 2."},{"id":"text-55","heading":"Text","content":"1.234567.\ncls"},{"id":"text-56","heading":"Text","content":"@écho de"},{"id":"text-57","heading":"Text","content":"pause"},{"id":"text-58","heading":"Text","content":"Comme vous le voyez dans la vue script 2, la commande Rem Note 1, est présente l&#39;encoche; Lorsque l’écran standard est activé, toutes les commandes affichées sont affichées. La chaine :: Commentaire 1 n&#39;est pas affiché, cela est dû au fait que le préfixe :: n&#39;est pas une commande et n&#39;est donc pas renvoyé par la vue standard. Puis vient la commande @Écho off qui désactive l’affichage standard sans afficher la commande, suivi de la commande Rem Note 2 qui ne s&#39;affiche pas (l&#39;affichage standard est jusqu&#39;à présent désactivé), ni la chaîne :: commentaire 2 ce qui est en tout cas exclu par l&#39;affichage standard."},{"id":"text-59","heading":"Text","content":"C&#39;EST À DIRE. Le personnage s&#39;échappe"},{"id":"text-60","heading":"Text","content":"Les caractères spéciaux (également appelés caractères mta) sont des caractères qui ont une signification particulière pour l&#39;interpréteur de commandes. Chaque fois que l&#39;interprète les rencontre, il leur applique le traitement correspondant, indépendamment de leur position dans la ligne de commande. Voici la liste:\nEt | ^ &lt; &gt; ()  \nPour pouvoir les utiliser dans une chaîne de caractères, vous devez les échapper avec le caractère ^c&#39;est-à-dire, mettez ce personnage devant lui. Ainsi, l&#39;interprète saura qu&#39;ils font partie d&#39;une chaîne et qu&#39;ils n&#39;ont rien à voir avec la commande. Voir le script 3 à titre d&#39;exemple."},{"id":"text-61","heading":"Text","content":"1.23\n@écho de\nécho ^Et ^| ^^ ^&lt; ^&gt; ^ (^)\npause"},{"id":"text-62","heading":"Text","content":"Il convient également de noter que d&#39;autres caractères peuvent nécessiter une évasion, mais ils suivent d&#39;autres règles. Le personnage % doit être caché par lui-même pour être considéré comme faisant partie d&#39;une chaîne lorsqu&#39;il est utilisé dans un script, comme indiqué dans le script 4."},{"id":"text-63","heading":"Text","content":"1.23\n@écho de\nécho %%\npause"},{"id":"text-64","heading":"Text","content":"Un autre cas est note, il concerne les personnages &quot; et  qui doit être échappé avec le personnage  lorsqu&#39;il est utilisé dans un paramètre cité. Dans le script 5, si les personnages &quot; et  n&#39;avait pas été manqué, le résultat ne serait pas celui attendu. L&#39;interprète aurait compris qu&#39;il y avait une chaîne bloc-notes &quot;cmd / c&quot; et une chaine &quot;% CD%  ~% nx0&quot; &quot;, ce qui aurait entraîné une erreur dans l’évaluation de la commande."},{"id":"text-65","heading":"Text","content":"1.23\n@écho de\ncourir comme / Utilisateur:% Nom d&#39;utilisateur% &quot;cmd / c  &quot;bloc-notes &quot;%CD%\\% ~ Nx0 &quot;&quot;\npause"},{"id":"text-66","heading":"Text","content":"Caractère d&#39;échappement ^ peut également être utilisé pour écrire une même commande sur plusieurs lignes. Quand l&#39;interprète rencontre le personnage ^ devant un retour à la ligne, il supprime ce caractère et renvoie la ligne, puis continue à lire les données fournies à la ligne suivante. Exemple avec le script 6."},{"id":"text-67","heading":"Text","content":"1.234\n@écho de\nécho foo ^\nbar\npause"},{"id":"text-68","heading":"Text","content":"D&#39;autres échappements existent, mais ils seront abordés plus tard dans ce document, car ils appliquent des ordres précis et ne concernent pas les autres. Par exemple, la commande écho qui considère le point comme une évasion de la chaîne qui le suit. Quand la commande écho est directement suivie d’un point; elle considère la chaîne située après le point comme un affichage de la chaîne et renvoie la ligne incluse. Cela vous permet d’utiliser un mot au début de la chaîne qui aurait autrement été considéré comme un paramètre. Exemple avec le script 7."},{"id":"text-69","heading":"Text","content":"1.234567.89dix.11121314151617181920212223242526\n@écho de"},{"id":"text-70","heading":"Text","content":"écho Afficher une ligne vide sans le point:\nécho"},{"id":"text-71","heading":"Text","content":"écho.\nécho."},{"id":"text-72","heading":"Text","content":"écho Afficher une ligne vide avec le point:\nécho."},{"id":"text-73","heading":"Text","content":"écho.\nécho."},{"id":"text-74","heading":"Text","content":"écho Affichage de la chaîne &quot;/?  Impression cette aide. &quot;sans le point:\nécho     /?  Impression cette aide."},{"id":"text-75","heading":"Text","content":"écho.\nécho."},{"id":"text-76","heading":"Text","content":"écho Affichage de la chaîne &quot;/?  Impression cette aide. &quot;avec le point:\nécho.    /?  Impression cette aide."},{"id":"text-77","heading":"Text","content":"écho.\nécho.\npause"},{"id":"text-78","heading":"Text","content":"Dans l&#39;affichage ci-dessous, nous remarquons que l&#39;affichage d&#39;une ligne vide sans point renvoie l&#39;état de l&#39;affichage standard contrairement à celui avec un point. Si l&#39;emplacement d&#39;une ligne de retour avait été utilisé par plusieurs espaces, le résultat aurait été identique, quel que soit le nombre d&#39;espaces. En effet, l&#39;interprète n&#39;évalue pas le nombre d&#39;espaces entre deux composants d&#39;une ligne de commande, il aurait donc considéré qu&#39;aucun paramètre n&#39;était fourni. C&#39;est la même chose avec la chaîne /? Imprimer cette aide., l&#39;interprète considère la sous-chaîne /? en tant que paramètre qui affiche l&#39;aide dans la ligne de commande."},{"id":"text-79","heading":"Text","content":"Le tableau 2 résume les différents types d’échappement que nous venons de voir."},{"id":"text-80","heading":"Text","content":"échappement"},{"id":"text-81","heading":"Text","content":"La description"},{"id":"text-82","heading":"Text","content":"^"},{"id":"text-83","heading":"Text","content":"Plac devant l&#39;un des caractères spéciaux, soit &amp; ^ | &lt;&gt; ()cela signifie que le caractère qui le suit fait partie de la chaîne et n&#39;a rien à voir avec la commande."},{"id":"text-84","heading":"Text","content":"Plac devant une ligne de retour, cela signifie que la ligne suivante fait partie de la même commande."},{"id":"text-85","heading":"Text","content":"%"},{"id":"text-86","heading":"Text","content":"Plac devant le personnage % dans un script, cela signifie que le caractère qui le suit fait partie de la chaîne."},{"id":"text-87","heading":"Text","content":"Plac devant l&#39;un des personnages  et &quot; dans un paramètre cité, cela signifie que le caractère qui le suit fait partie de l&#39;argument cité."},{"id":"text-88","heading":"Text","content":"."},{"id":"text-89","heading":"Text","content":"Plac immédiatement après la commande écho, cela signifie que la chaîne qui suit est une chaîne d&#39;affichage et non un paramètre de la commande écho."},{"id":"text-90","heading":"Text","content":"Tableau 2: Échappement"},{"id":"text-91","heading":"Text","content":"SI. Les bugs de la commande rem et du préfixe :: ▲"},{"id":"text-92","heading":"Text","content":"Un problème récurrent dans script de batch est-ce que des commentaires et des commentaires (fournis via rem et ::) causer des bugs dus à une mauvaise utilisation. La commande rem et le préfixe :: en prenant une chaîne de caractères comme paramètres, ils attendent une chaîne de caractères valide. Ainsi, les échappements doivent être utilisés pour les caractères suivants: &amp; | ^ < > ()%."},{"id":"text-93","heading":"Text","content":"Les variables sont gérées via la commande ensemble, il existe deux types dont voici la liste:"},{"id":"text-94","heading":"Text","content":"variables de chaîne de caractères;\nnombre entier signe de variables."},{"id":"text-95","heading":"Text","content":"Chaque type de variable est déclaré et marqué différemment; il est possible de les couler, c&#39;est-à-dire de les passer d&#39;un type à l&#39;autre, à condition de respecter les règles suivantes:"},{"id":"text-96","heading":"Text","content":"une chaîne de caractères qui ne peut être numérique que si elle ne contient que des nombres;\nun nombre peut toujours être transtyp en une chaîne de caractères (qui ne contiendra que des nombres)."},{"id":"text-97","heading":"Text","content":"Les variables sont accessibles via un identifiant qui leur est propre. Ainsi, chaque fois que cet identifiant est mentionné, l&#39;interpréteur pourra fournir la valeur associée. Cela peut être fait en utilisant le personnage % des deux côtés de l&#39;identifiant, on parle d&#39;expansion de la variable. Par exemple avec la variable CHEMIN (qui est une variable d’environnement: fournie par le système), pour obtenir sa valeur; la syntaxe doit être utilisée % CHEMIN% comme dans le script 8."},{"id":"text-98","heading":"Text","content":"1.23\n@écho de\nécho % CHEMIN%\npause"},{"id":"text-99","heading":"Text","content":"Ce qui produirait un affichage similaire à celui ci-dessous."},{"id":"text-100","heading":"Text","content":"Les identificateurs de variable ne sont pas sensibles à la casse, c&#39;est-à-dire que l&#39;interpréteur ne fait pas la différence entre les majuscules et les minuscules lorsqu&#39;il développe, crée ou modifie une variable. Donc les identifiants CHEMIN, Chemin et chemin identifier une seule et même variable.\nII-A. Variables d&#39;environnement ▲"},{"id":"text-101","heading":"Text","content":"Nous allons commencer par les variables d’environnement, elles sont toutes de type string. C&#39;est le système d&#39;exploitation qui définit leurs valeurs, soit parce que d&#39;un système à l&#39;autre, leurs valeurs peuvent être différentes, soit parce que ces variables sont définies de manière dynamique au fur et à mesure de leur développement. Cela permet d’accéder à des fichiers dont le chemin d’accès peut ne pas être identique d’une machine à l’autre ou d’obtenir, par exemple, l’heure ou la date dont les valeurs sont modifiées de façon permanente.\nDans le tableau 3, vous trouverez la liste de ces variables. Dans la première colonne, vous trouverez le nom de ces variables. ces noms sont réservés par le système et même s&#39;il est possible de changer leur valeur lors de l&#39;exécution du script, les modifications apportées prendront fin en même temps que le script. De plus, dans certains cas, la modification de leur valeur peut amener le script à mal évaluer l&#39;environnement. La deuxième colonne donne la description de la valeur renvoyée par la variable. Et enfin, la troisième colonne donne la compatibilité en fonction de la version du système. Dans cette colonne, les systèmes NT sont mentionnés, il s&#39;agit de la famille du système d&#39;exploitation. Les systèmes NT sont des systèmes basés sur un noyau de type NT à partir du système Windows du même nom. Cette famille comprend le jour où ces lignes sont écrites:"},{"id":"text-102","heading":"Text","content":"Systèmes Windows NT X.Y (X étant la révision majeure et Y la révision mineure);\nSystèmes Windows 2000\nSystèmes Windows XP\nSystèmes Windows Server 2003\nSystèmes Windows Vista\nSystèmes Windows Server 2008\nSystèmes Windows 7\nSystèmes Windows Server 2012\net les systèmes Windows 8."},{"id":"text-103","heading":"Text","content":"Variable"},{"id":"text-104","heading":"Text","content":"La description"},{"id":"text-105","heading":"Text","content":"compatibilité"},{"id":"text-106","heading":"Text","content":"AllUsersProfile"},{"id":"text-107","heading":"Text","content":"Renvoie le chemin d&#39;accès complet au répertoire des données utilisateur commun à tous les utilisateurs. Par défaut: HomeDrive %%  ProgramData."},{"id":"text-108","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-109","heading":"Text","content":"Données d&#39;application"},{"id":"text-110","heading":"Text","content":"Renvoie le répertoire de données d&#39;application commun sous la forme % UserProfile%  AppData  Roaming."},{"id":"text-111","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-112","heading":"Text","content":"CD"},{"id":"text-113","heading":"Text","content":"Renvoie le chemin complet du répertoire dans lequel le script est exécuté. Ce répertoire peut être différent du répertoire dans lequel le script a démarré (s&#39;il a été déplacé au cours de son exécution)."},{"id":"text-114","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-115","heading":"Text","content":"CMDCMDLINE"},{"id":"text-116","heading":"Text","content":"Renvoie la ligne de commande d&#39;origine qui a appelé l&#39;interpréteur de commandes."},{"id":"text-117","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-118","heading":"Text","content":"CMDEXTVERSION"},{"id":"text-119","heading":"Text","content":"Renvoie le numéro de version des extensions de commande du processeur de commandes en cours."},{"id":"text-120","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-121","heading":"Text","content":"CommonProgramFiles"},{"id":"text-122","heading":"Text","content":"Renvoie le chemin complet vers les applications 32 bits communes aux systèmes 32 bits ou les applications 64 bits vers 64 bits, telles que: % ProgramFiles%  Fichiers communs."},{"id":"text-123","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-124","heading":"Text","content":"CommonProgramFiles (x86)"},{"id":"text-125","heading":"Text","content":"Renvoie le chemin complet du répertoire de fichiers communs 32bits sur les systèmes 64bits:% ProgramFiles (x86)%  Fichiers communs."},{"id":"text-126","heading":"Text","content":"Disponible uniquement sur les systèmes NT 64bits."},{"id":"text-127","heading":"Text","content":"Programme commun W6432"},{"id":"text-128","heading":"Text","content":"Renvoie le chemin complet du fichier commun des applications 16 bits sur les systèmes 64 bits et les systèmes Vista 32 bits et supérieurs: % ProgramW6432%  Fichiers communs."},{"id":"text-129","heading":"Text","content":"Disponible uniquement sur les systèmes NT 64 bits et les systèmes Vista 32 bits et supérieurs."},{"id":"text-130","heading":"Text","content":"Nom de l&#39;ordinateur"},{"id":"text-131","heading":"Text","content":"Renvoie le nom de l&#39;ordinateur sur lequel le script est exécuté."},{"id":"text-132","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-133","heading":"Text","content":"ComSpec"},{"id":"text-134","heading":"Text","content":"Renvoie le chemin complet de l&#39;interprète: % WinDir%  system32  cmd.exe."},{"id":"text-135","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-136","heading":"Text","content":"Daté"},{"id":"text-137","heading":"Text","content":"Renvoie la date actuelle en utilisant le même format que la commande daté."},{"id":"text-138","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-139","heading":"Text","content":"ErrorLevel"},{"id":"text-140","heading":"Text","content":"Renvoie la valeur du code d&#39;erreur actuel. Cette valeur est modifiée après chaque ligne de commande, en fonction du résultat de la commande. En général, la variable ErrorLevel renvoie 1 ou plus en cas d&#39;erreur de la dernière commande et 0 si aucune erreur ne s&#39;est produite. Cependant, il arrive que ce comportement varie en fonction des commandes, il est donc recommandé de se reporter à l&#39;aide concernant cette commande."},{"id":"text-141","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-142","heading":"Text","content":"FP_NO_HOST_CHECK"},{"id":"text-143","heading":"Text","content":"CAROLINE DU NORD."},{"id":"text-144","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-145","heading":"Text","content":"Le plus haut numéro de numéro de noeud"},{"id":"text-146","heading":"Text","content":"Renvoie le numéro de nœud NUMA le plus élevé de l&#39;ordinateur sur lequel le script est exécuté."},{"id":"text-147","heading":"Text","content":"Disponible uniquement sur les systèmes NT 64bits."},{"id":"text-148","heading":"Text","content":"HomeDrive"},{"id":"text-149","heading":"Text","content":"Renvoie le point de montage de la partition qui héberge les répertoires de l&#39;utilisateur. Par défaut: C:."},{"id":"text-150","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-151","heading":"Text","content":"HomePath"},{"id":"text-152","heading":"Text","content":"Renvoie le chemin d&#39;accès au répertoire de l&#39;utilisateur actuellement connecté. Par défaut:  Utilisateurs % nom d&#39;utilisateur%."},{"id":"text-153","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-154","heading":"Text","content":"LocalAppData"},{"id":"text-155","heading":"Text","content":"Renvoie le répertoire local des données d&#39;application sous la forme: % UserProfile%  AppData  Local."},{"id":"text-156","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-157","heading":"Text","content":"LogonServer"},{"id":"text-158","heading":"Text","content":"Renvoie l&#39;URL locale du système d&#39;exploitation sous la forme \\% Nom de l&#39;ordinateur%."},{"id":"text-159","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-160","heading":"Text","content":"NUMBER_OF_PROCESSORS"},{"id":"text-161","heading":"Text","content":"Renvoie le nombre de cœurs logiques sur l&#39;ordinateur sur lequel le script est exécuté."},{"id":"text-162","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-163","heading":"Text","content":"OS"},{"id":"text-164","heading":"Text","content":"Renvoie le type de noyau sur lequel est basé le système d&#39;exploitation. Sur les systèmes NT, cette variable renvoie toujours la chaîne. Windows_NT."},{"id":"text-165","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-166","heading":"Text","content":"Chemin"},{"id":"text-167","heading":"Text","content":"Renvoie la liste des répertoires reconnus par le système comme contenant des exécutables. Chaque répertoire est répertorié par son chemin d&#39;accès complet, suffixé d&#39;un point-virgule. Si un exécutable se trouve dans l&#39;un des répertoires de cette liste, il n&#39;est pas nécessaire de fournir un chemin complet pour l&#39;appeler sur la ligne de commande."},{"id":"text-168","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-169","heading":"Text","content":"PATHEXT"},{"id":"text-170","heading":"Text","content":"Retourne une liste des extensions de fichiers reconnues par le système comme étant à la fois des extensions de fichiers exécutables. Si une extension de fichier ne figure pas dans cette liste, le fichier ne peut pas être appelé en tant que commande."},{"id":"text-171","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-172","heading":"Text","content":"PROCESSOR_ARCHITECTURE"},{"id":"text-173","heading":"Text","content":"Renvoie le type d&#39;architecture (32 / 64bits) du processeur sur lequel le script est exécuté. Les valeurs possibles sont: X86 pour les processeurs 32 bits, AMD64 pour les processeurs 64 bits basés sur l&#39;architecture x86 et IA64 pour les processeurs Itanium."},{"id":"text-174","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-175","heading":"Text","content":"PROCESSOR_IDENTIFIER"},{"id":"text-176","heading":"Text","content":"Retourne une identification précise du processeur sur lequel le script est exécuté. Cette identification est une chaîne de caractères composée du type d&#39;architecture suivi de la famille, du modèle, de la révision et enfin du fabricant du processeur."},{"id":"text-177","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-178","heading":"Text","content":"PROCESSOR_LEVEL"},{"id":"text-179","heading":"Text","content":"Retourne une identification précise de la famille de la micro-architecture du processeur."},{"id":"text-180","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-181","heading":"Text","content":"PROCESSOR_REVISION"},{"id":"text-182","heading":"Text","content":"Renvoie un modèle de processeur spécifique et l&#39;identification de la révision sous la forme d&#39;une chaîne de caractères représentant un nombre hexadécimal à deux octets, le premier pour le modèle et le second pour la révision."},{"id":"text-183","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-184","heading":"Text","content":"Données de programme"},{"id":"text-185","heading":"Text","content":"Renvoie le répertoire de données d&#39;application 64 bits commun sous la forme: % SystemDrive%  ProgramData."},{"id":"text-186","heading":"Text","content":"Disponible uniquement sur les systèmes NT 64bits."},{"id":"text-187","heading":"Text","content":"Fichiers de programme"},{"id":"text-188","heading":"Text","content":"Renvoie le chemin complet du répertoire ProgramFiles. Ce répertoire contient des applications 32 bits sur des systèmes 32 bits ou des applications 64 bits sur des systèmes 64 bits."},{"id":"text-189","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-190","heading":"Text","content":"ProgramFiles (x86)"},{"id":"text-191","heading":"Text","content":"Renvoie le chemin complet du répertoire ProgramFiles (x86). Ce répertoire contient des applications 32 bits sur des systèmes 64 bits."},{"id":"text-192","heading":"Text","content":"Disponible uniquement sur les systèmes NT 64bits."},{"id":"text-193","heading":"Text","content":"ProgramW6432"},{"id":"text-194","heading":"Text","content":"Renvoie le chemin complet du répertoire ProgramW6432. Ce répertoire contient les applications 16 bits sur les systèmes 64 bits et les systèmes Vista 32 bits et supérieurs."},{"id":"text-195","heading":"Text","content":"Disponible sur les systèmes NT 32 et 64bits Vista et supérieurs."},{"id":"text-196","heading":"Text","content":"Rapide"},{"id":"text-197","heading":"Text","content":"Renvoie la chaîne de configuration pour l&#39;affichage standard, par défaut: $ P $ G. Voir l&#39;aide de la commande rapide pour plus d&#39;informations: invite /?."},{"id":"text-198","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-199","heading":"Text","content":"PSModulePath"},{"id":"text-200","heading":"Text","content":"Renvoie le chemin d&#39;accès complet aux modules PowerShell."},{"id":"text-201","heading":"Text","content":"Disponible uniquement sur Vista et les systèmes supérieurs. (XP avec mise à jour KB926140)"},{"id":"text-202","heading":"Text","content":"Publique"},{"id":"text-203","heading":"Text","content":"Renvoie le chemin complet du répertoire de documents publics sous la forme HomeDrive %%  Users  Public."},{"id":"text-204","heading":"Text","content":"Disponible uniquement sur Vista et les systèmes supérieurs."},{"id":"text-205","heading":"Text","content":"au hasard"},{"id":"text-206","heading":"Text","content":"Retourne un nombre aléatoire compris entre 0 et 32767."},{"id":"text-207","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-208","heading":"Text","content":"Nom de session"},{"id":"text-209","heading":"Text","content":"Retourne le nom de la session en cours. Par défaut: Console."},{"id":"text-210","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-211","heading":"Text","content":"SystemDrive"},{"id":"text-212","heading":"Text","content":"Renvoie le point de montage de la partition sur laquelle le système d&#39;exploitation est installé."},{"id":"text-213","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-214","heading":"Text","content":"RacineSystème"},{"id":"text-215","heading":"Text","content":"Renvoie le chemin complet du système d&#39;exploitation sous la forme % SystemDrive%  Windows."},{"id":"text-216","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-217","heading":"Text","content":"Temp"},{"id":"text-218","heading":"Text","content":"Renvoie le chemin d&#39;accès complet au répertoire de fichiers temporaires de l&#39;utilisateur. Par défaut: % UserProfile%  AppData  Local  Temp."},{"id":"text-219","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-220","heading":"Text","content":"Temps"},{"id":"text-221","heading":"Text","content":"Renvoie l&#39;heure actuelle en utilisant le même format que la commande temps."},{"id":"text-222","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-223","heading":"Text","content":"tmp"},{"id":"text-224","heading":"Text","content":"Même temp."},{"id":"text-225","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-226","heading":"Text","content":"UserDomain"},{"id":"text-227","heading":"Text","content":"Renvoie le nom de domaine de l&#39;ordinateur sur lequel le script est exécuté. Si le système n&#39;appartient pas à un domaine, le nom de domaine sera le nom de l&#39;ordinateur sur lequel le script est exécuté."},{"id":"text-228","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-229","heading":"Text","content":"Nom d&#39;utilisateur"},{"id":"text-230","heading":"Text","content":"Renvoie le nom de l&#39;utilisateur actuellement connecté."},{"id":"text-231","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-232","heading":"Text","content":"Profil de l&#39;utilisateur"},{"id":"text-233","heading":"Text","content":"Renvoie le chemin d&#39;accès complet au répertoire d&#39;utilisateurs de l&#39;utilisateur actuellement connecté en tant que: HomeDrive %%  Users % nom_utilisateur%."},{"id":"text-234","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-235","heading":"Text","content":"WinDir"},{"id":"text-236","heading":"Text","content":"Renvoie le chemin complet du répertoire d&#39;installation du système. Par défaut: % SystemDrive%  Windows."},{"id":"text-237","heading":"Text","content":"Disponible sur tous les systèmes NT."},{"id":"text-238","heading":"Text","content":"Tableau 3: Variables d&#39;environnement"},{"id":"text-239","heading":"Text","content":"II-B. L&#39;ensemble ▲"},{"id":"text-240","heading":"Text","content":"La commande ensemble variables gre dans l&#39;interpréteur, cela permet:"},{"id":"text-241","heading":"Text","content":"créer une variable;\nassigner une valeur à une variable\nmodifier le contenu d&#39;une variable;\nsupprimer le contenu d&#39;une variable;\neffectuer des opérations mathématiques ou logiques entre les nombres;\nRécupération de l&#39;entrée d&#39;un utilisateur pour la placer dans une variable\net jette le contenu d&#39;une variable."},{"id":"text-242","heading":"Text","content":"Voici la syntaxe de la commande ensemble.\nAttribuez une valeur à la variable sous forme de chaîne de caractères (o     est son identifiant et     est une chaîne de caractères).\nensemble [« ]&lt;variable&gt;=&lt;chane&gt;[« ]  \nAttribuez à la variable une valeur sous forme de signe de nombre entier (o     est une expression numérique à évaluer: détaillée plus loin).\nensemble /à [« ]&lt;expression&gt;[« ]  \nAttribuez à la variable une valeur, entrée par l&#39;utilisateur, sous forme de chaîne de caractères après l&#39;affichage de la chaîne d&#39;invite, le cas échéant (o     est son identifiant et o     est une chaîne de caractères indique à l&#39;utilisateur de l&#39;inviter à entrer une chaîne de clés).\nensemble / p [« ]&lt;variable&gt;=[[[[&lt;chane_invite&gt;][« ]  \nSupprime la valeur de la variable de mémoire, son identifiant reste indexé par l&#39;interpréteur, mais sa valeur est indéfinie.\nensemble [« ]&lt;variable&gt;=[« ]  \nVoici les règles habituelles de la commande ensemble:"},{"id":"text-243","heading":"Text","content":"Si la commande ensemble est utilisé sans paramètre, il affiche les variables définies dans le contexte actuel (détaillé plus tard).\nS&#39;il est utilisé avec comme paramètre une chaîne (ou un nom de variable), sans valeur ni signe gal; il affiche ensuite la variable dont le nom correspond à la chaîne de paramètres donnée et / ou les variables dont le nom commence par la chaîne de paramètres donnée.\nSi elle est utilisée avec un nom de variable et un signe gal non valide, alors le contenu de la variable est vide de mémoire, il est possible de vérifier si une variable est définie, mais nous aborderons ce point dans le chapitre suivant.\nToute chaîne non numérique dans l&#39;expression de valeur est traitée comme un identificateur de variable et est convertie en un nombre avant d&#39;être utilisée (utilisée avec le paramètre /à), si la variable n’existe pas ou est indéfinie, elle prend la valeur 0.\nUne valeur d&#39;expression numérique doit toujours être placée entre guillemets pour permettre l&#39;utilisation d&#39;opérateurs logiques et d&#39;opérateurs de regroupement."},{"id":"text-244","heading":"Text","content":"Regardons de plus près le fonctionnement de la commande ensemble avec le script 9."},{"id":"text-245","heading":"Text","content":"1.234567.89dix.11121314151617181920\n@écho de\nensemble VAR_Espace_Un=&quot;Ma chaine avec des espaces&quot;\nensemble VAR_Espace_Deux &quot;=Mon canal avec des espaces &quot;\nensemble &quot;VAR_Espace_Trois=Mon canal avec des espaces &quot;"},{"id":"text-246","heading":"Text","content":"ensemble / p VAR_Saisie_Un=    ma première saisie:    \nensemble / p &quot;VAR_Saisie_Two=    ma saisie deux: &quot;\nensemble / a VAR_Calcul_Un=1 + 10\nensemble / a VAR_Calcul_Two &quot;=2 + 20 &quot;\nensemble / a &quot;VAR_Calcul_Trois=3 + 30 &quot;\nécho.\nécho %% VAR_Espace_Un\nécho %% VAR_Espace_Deux\nécho %% VAR_Espace_Trois\nécho.\nensemble VAR_Saisie\nécho.\nensemble VAR_Calcul\nécho.\npause"},{"id":"text-247","heading":"Text","content":"Comme vous pouvez le constater, les guillemets occupent une place de choix dans ce script. observez où ils sont placés. De la ligne 2 à la ligne 4, les valeurs des variables sont des chaînes de caractères avec des espaces. La déclaration de la variable VAR_Espace_Un se fait avec des guillemets placés des deux côtés de la chaîne, la déclaration de la variable VAR_Espace_Deux se fait avec des guillemets: une place devant le signe gal et l’autre au bout de la chaîne; la déclaration de la troisième variable VAR_Espace_Trois se fait avec des guillemets: un avant le nom de la variable et l’autre en fin de ligne. Si nous nous référons à l&#39;affichage obtenu, nous remarquons que les première et troisième variables affichent une sortie correcte; la seconde variable quand ça ne marche pas; il est donc facile de déduire que si les guillemets s&#39;ouvrent avant l&#39;identifiant de la variable et se ferment après la valeur de la variable, ils ne font pas partie de la variable; et si les guillemets s’ouvrent avant la valeur de la variable et se ferment après la valeur de la variable, ils font partie de la variable.\nLes deux saisies de l&#39;utilisateur ont également abouti à un résultat intéressant, la ligne de commande qui décline VAR_Saisie_Un n&#39;utilisez pas de guillemets; par contre the line of order VAR_Saisie_Deux, elle, en utilise. Lors de l&#39;affichage des invitations de saisie utilisateur, les espaces se sont mutés avant les chaînes d&#39;invités ont disparu, et ceux-ci se sont après affichés. Sur les espaces en début de ligne sont ignorés et ceux de la fin sont considérés comme faisant partie de la chaîne d&#39;invitation.\nEn ce qui concerne les variables VAR_Calcul_XXX, elles sont toutes préférables mais respectent également les règles de syntaxe; c’est &#8211; dire toujours mettre l’expression numérique entre guillemets. Cela sera utile dans la suite du chapitre."},{"id":"text-248","heading":"Text","content":"II-C. Les variables de type chane de caractères ▲"},{"id":"text-249","heading":"Text","content":"Ce sont, mon sens, les plus utilise en batch. Ce sont toutes les variables composées de caractères alphanumériques et autres caractères. Les chansons de caractères sont claires via la commande ensemble et il n&#39;est pas nécessaire d&#39;utiliser des guillemets pour que les espaces soient pris en compte, en tant que partie intégrante de la chaîne, et ce, ce sont eux qui sont placés dans la chaîne.\nElles offrent aussi d&#39;autres possibilités comme la substitution de chaîne dans l&#39;expansion de la variable. Ainsi avec la syntaxe suivante, il est possible de modifier la variable lors de son expansion sans que cela ne soit que sa valeur (o     est l&#39;identifiant de la variable,     is the chane remplacer et     est la chane inser la place de ). Exemple avec le script 10.\n%:=%"},{"id":"text-250","heading":"Text","content":"1.23456\n@écho de\nensemble &quot;X=une chane &quot;\nécho La variable avec substitution: % X: une = ma%\nécho La valeur réelle de la variable: %X%\nécho.\npause"},{"id":"text-251","heading":"Text","content":"peut aussi tre une chane prcde d&#39;un astrisque (*), dans ce cas, la substitution commence par la valeur de la variable et se termine après la première occurrence de la chaîne spéciale dans la substitution. Exemple avec le script 11."},{"id":"text-252","heading":"Text","content":"1.2345\n@écho de\nensemble &quot;X=chaîne&quot;\nécho Substitution avec astrisque: % X: * t = d%\nécho.\npause"},{"id":"text-253","heading":"Text","content":"Il ne faut jamais utiliser un astrisque seul dans la substitution, sans quoi, l&#39;interprète de commande se ferme sans autre forme de procs. L &#39;astrisque en fin de chaîne ne provoque pas d&#39; erreur, mais ne permet pas la substitution, la variable est étendue avec sa valeur d &#39;origine.\nLa substitution ne modifie pas la valeur de la variable, elle transforme juste la variable au moment de l&#39;expansion. Pour modifier la valeur de la variable, il faut faire avec la commande ensemble. Exemple avec le script 12."},{"id":"text-254","heading":"Text","content":"1.23456\n@écho de\nensemble &quot;VAR=ma chane &quot;\nécho % VAR%\nensemble &quot;VAR=% VAR: chane = voiture%&quot;\nécho % VAR%\npause"},{"id":"text-255","heading":"Text","content":"Vous pouvez aussi ne pas développer une partie d&#39;une chanson en slectionnant les caractères voulus. Cela se fait via la syntaxe suivante (o     est l&amp;#39;identifiant de la variable,     est l&amp;#39;index du premier caractre en partant de 0 et     est la longueur de la slection). Exemple avec le script 13.\n%:~,%"},{"id":"text-256","heading":"Text","content":"1.23456\n@écho de\nensemble &quot;VAR=ma chane&quot;\nécho %VAR:~0,2%\nensemble &quot;VAR=%VAR:~3,6%&quot;\nécho %VAR%\npause"},{"id":"text-257","heading":"Text","content":"Si la     n&amp;#39;est pas spcifie, tout le reste de la chane est slectionn, en partant du caractre fourni en . Si une des valeurs donnes est ngative, alors la valeur utilise est la longueur totale de la chane ajoute  la valeur ngative."},{"id":"text-258","heading":"Text","content":"1.234567.89dix.11\n@écho de"},{"id":"text-259","heading":"Text","content":"ensemble &quot;VAR=ma chane&quot;"},{"id":"text-260","heading":"Text","content":"écho %VAR:~-6%"},{"id":"text-261","heading":"Text","content":"écho %VAR:~0,-7%"},{"id":"text-262","heading":"Text","content":"pause"},{"id":"text-263","heading":"Text","content":"II-D. Les variables de type nombre entier sign▲"},{"id":"text-264","heading":"Text","content":"The command set /a permet d&amp;#39;utiliser les nombres entiers signs allant de -2147483648  +2147483647 (cods sur 32bits). Si vous n&amp;#39;utilisez pas le paramtre /a dans la commande, alors la squence de chiffres sera considre comme tant une chane de caractres, et non un nombre. La syntaxe de la commande set /a est la suivante.\nensemble /a &lt;expression&gt;  \n    utilise, quant  elle, la syntaxe suivante.\n[« ]&lt;s&#39;identifier&gt;[[[[&lt;affectation&gt;[{[{[{[&lt;sous-expression&gt;]][« ]  \nLes expressions numriques doivent tre places entre des guillemets si elles contiennent des oprateurs logiques ou de groupement (dtaill plus loin dans ce chapitre). Ces diffrentes constituantes sont:"},{"id":"text-265","heading":"Text","content":"qui est l&amp;#39;identifiant de la variable de destination;\n    qui est l&amp;#39;oprateur d&amp;#39;attribution de l&amp;#39;expression, comme le signe gal qui effectue l&amp;#39;opration d&amp;#39;attribuer une valeur  une variable, d&amp;#39;autres oprateurs d&amp;#39;attribution seront dtaills dans cette section;\npuis soit     qui est une valeur immdiate (un nombre quelconque), soit     qui est une sous-expression, ces dernires seront dtailles dans le reste de cette section."},{"id":"text-266","heading":"Text","content":"Vous pouvez spcifier plusieurs expressions en les sparant par des virgules."},{"id":"text-267","heading":"Text","content":"@écho de\nensemble /a &quot;VAR1=1&quot;, &quot;VAR2=2&quot;\nécho VAR1: %VAR1%\nécho VAR2: %VAR2%\npause"},{"id":"text-268","heading":"Text","content":"Les chanes de caractres prsentes dans l&amp;#39;expression sont considres comme des variables et sont expanses ( l&amp;#39;exception de l&amp;#39;identifiant de la variable de destination), cela permet de faire des oprations sur des variables sans avoir  utiliser de symbole % pour leur expansion."},{"id":"text-269","heading":"Text","content":"@écho de\nensemble /a &quot;VAR1=1&quot;\nensemble /a &quot;VAR2=VAR1&quot;\nécho VAR1: %VAR1%\nécho VAR2: %VAR2%\npause"},{"id":"text-270","heading":"Text","content":"Si un nom de variable inexistante ou indfinie est utilis, alors elle prend la valeur 0."},{"id":"text-271","heading":"Text","content":"1.2345\n@écho de"},{"id":"text-272","heading":"Text","content":"ensemble /a &quot;VAR2=VAR1&quot;\nécho VAR2: %VAR2%\npause"},{"id":"text-273","heading":"Text","content":"Les sous-expressions sont constitues de nombres, d&amp;#39;oprateurs et ventuellement de parenthses, ces dernires s&amp;#39;utilisent de la mme manire qu&amp;#39;en mathmatiques et elles n&amp;#39;ont pas besoin d&amp;#39;tre chappes si, et seulement si, les guillemets sont utiliss. Toutes les constituantes d&amp;#39;une sous-expression sont soumises  la prsance, c&amp;#39;est&#8211;dire l&amp;#39;ordre dans lequel les diverses constituantes vont tre values. L&amp;#39;ordre de prsance utilis est le suivant (dans l&amp;#39;ordre dcroissant d&amp;#39;valuation):"},{"id":"text-274","heading":"Text","content":"le groupement soit ( );\nles oprateurs unaires ! ~ &#8211;;\nles oprateurs arithmtiques * / %;\nles oprateurs arithmtiques + &#8211;;\nle dcalage logique &lt;< >&gt;;\nle ET au niveau du bit Et;\nle OU exclusif au niveau du bit ^;\nle OU inclusif au niveau du bit |;\nl&amp;#39;&amp;#39;attribution = *= /= %= += -= &amp;= ^= |= &lt;&gt;=;\nle sparateur d&amp;#39;expression ,."},{"id":"text-275","heading":"Text","content":"Il faut galement noter que l&amp;#39;utilisation du nombre -2147483648 tel quel dans une expression provoque une erreur, c&amp;#39;est d au transtypage effectu par l&amp;#39;interprteur. Ce dernier value d&amp;#39;abord la chane 2147483648 afin de la transtyper puis lui applique l&amp;#39;oprateur unaire &#8211;. Mais comme le nombre 2147483648 va au-del de la dfinition d&amp;#39;un nombre sur 32bits, l&amp;#39;opration gnre une erreur, exemple avec le script suivant."},{"id":"text-276","heading":"Text","content":"1.234567.89dix.\n@écho de\nécho Nombre brute:\nensemble /a &quot;ParseError=-2147483648&quot;\nécho %ParseError%\necho.\nécho Nombre avec valuation:\nensemble /a &quot;ParseError=-2147483647 - 1&quot;\nécho %ParseError%\necho.\npause"},{"id":"text-277","heading":"Text","content":"Une autre mthode qui fonctionne pour ce cas est la suivante."},{"id":"text-278","heading":"Text","content":"1.2345\n@écho de\nensemble &quot;SInt32=-2147483648&quot;\nensemble /a &quot;SInt32&quot;\nécho %SInt32%\npause"},{"id":"text-279","heading":"Text","content":"II-D-1. Les oprations arithmtiques▲"},{"id":"text-280","heading":"Text","content":"The command set /a prend en charge les cinq oprations arithmtiques suivantes:"},{"id":"text-281","heading":"Text","content":"l&amp;#39;addition;\nla soustraction;\nla multiplication;\nla division;\net le modulo (le modulo est une opration qui sert  rcuprer le reste d&amp;#39;une division)."},{"id":"text-282","heading":"Text","content":"Oprateur arithmtique"},{"id":"text-283","heading":"Text","content":"Oprateur d&amp;#39;attribution"},{"id":"text-284","heading":"Text","content":"Opration effectue"},{"id":"text-285","heading":"Text","content":"+"},{"id":"text-286","heading":"Text","content":"+="},{"id":"text-287","heading":"Text","content":"Une addition"},{"id":"text-288","heading":"Text","content":"&#8211;"},{"id":"text-289","heading":"Text","content":"-="},{"id":"text-290","heading":"Text","content":"Soustraction"},{"id":"text-291","heading":"Text","content":"*"},{"id":"text-292","heading":"Text","content":"*="},{"id":"text-293","heading":"Text","content":"Multiplication"},{"id":"text-294","heading":"Text","content":"/"},{"id":"text-295","heading":"Text","content":"/="},{"id":"text-296","heading":"Text","content":"Division"},{"id":"text-297","heading":"Text","content":"%"},{"id":"text-298","heading":"Text","content":"%="},{"id":"text-299","heading":"Text","content":"Modulo"},{"id":"text-300","heading":"Text","content":"Tableau 4: Oprations arithmtiques \nUne note particulire pour le modulo: dans un script de commande, le symbole du modulo % doit tre prfix du caractre d&amp;#39;chappement %. Dans ce cas, c&amp;#39;est un pige dans lequel le novice peut se perdre, le premier symbole % est un caractre d&amp;#39;chappement qui permet au deuxime symbole %, le modulo, d&amp;#39;tre pris en compte  l&amp;#39;excution du script. Dans l&amp;#39;interprteur de commande, le modulo (%) n&amp;#39;as pas besoin d&amp;#39;tre chapp, c&amp;#39;est une spcificit du script. Ainsi la commande suivante fonctionne dans l&amp;#39;interprteur.\nensemble /a &quot;Mod=5 % 2&quot;  \nAlors que celle-ci ne fonctionne pas.\nensemble /a &quot;Mod=5 %% 2&quot;"},{"id":"text-301","heading":"Text","content":"Dans un script, par contre, c&amp;#39;est l&amp;#39;inverse."},{"id":"text-302","heading":"Text","content":"1.23456\n@écho de\nensemble /a &quot;Mod=5 % 2&quot;\nécho Mod1: %Mod%\nensemble /a &quot;Mod=5 %% 2&quot;\nécho Mod2: %Mod%\npause"},{"id":"text-303","heading":"Text","content":"Ainsi, les oprations arithmtiques s&amp;#39;utilisent de manire classique dans les sous-expressions. Si une variable inexistante ou indfinie est utilise dans une sous-expression, elle prend la valeur 0, exemple avec le script 21."},{"id":"text-304","heading":"Text","content":"1.234567.89dix.111213\n@écho de\nensemble /a &quot;Un=1&quot;\nensemble /a &quot;Deux=1 + 1&quot;\nensemble /a &quot;Trois=4 - 1&quot;\nensemble /a &quot;Quatre=2 * 2&quot;\nensemble /a &quot;Cinq=10 / 2&quot;\nensemble /a &quot;Six=26 %% 10&quot;\nensemble /a &quot;Sept=(( 2 + 1 ) * 2 ) + 1&quot;"},{"id":"text-305","heading":"Text","content":"ensemble /a &quot;Huit=8+Dix&quot;,&quot;Neuf=10-Un&quot;\nécho %Un%, %Deux%, %Trois%, %Quatre%, %Cinq%, %Six%, %Sept%, %Huit%, %Neuf%\necho.\npause"},{"id":"text-306","heading":"Text","content":"L&amp;#39;attribution permet d&amp;#39;effectuer des oprations sur des variables existantes, si une variable inexistante ou indfinie est utilise, elle prend la valeur 0."},{"id":"text-307","heading":"Text","content":"1.234567.89dix.1112\n@écho de\nensemble /a &quot;Attrib1=1&quot;,&quot;Attrib2=2&quot;,&quot;Attrib3=3&quot;,&quot;Attrib4=4&quot;,&quot;Attrib5=5&quot;"},{"id":"text-308","heading":"Text","content":"ensemble /a &quot;Attrib0+=1&quot;\nensemble /a &quot;Attrib1+=1&quot;\nensemble /a &quot;Attrib2*=2&quot;\nensemble /a &quot;Attrib3-=2&quot;\nensemble /a &quot;Attrib4/=2&quot;\nensemble /a &quot;Attrib5%%=2&quot;\nécho %Attrib0%, %Attrib1%, %Attrib2%, %Attrib3%, %Attrib4%, %Attrib5%\necho.\npause"},{"id":"text-309","heading":"Text","content":"II-D-2. Les oprations logiques▲"},{"id":"text-310","heading":"Text","content":"Elles ne peuvent s&amp;#39;effectuer que sur des nombres et suivent les rgles de l&amp;#39;algbre de Boole. Les oprations logiques prises en charge par la commande set /a possdent, elles aussi, des oprateurs d&amp;#39;attribution. Exemple avec le script 23."},{"id":"text-311","heading":"Text","content":"Oprateur logique"},{"id":"text-312","heading":"Text","content":"Oprateur d&amp;#39;attribution"},{"id":"text-313","heading":"Text","content":"La description"},{"id":"text-314","heading":"Text","content":"Et"},{"id":"text-315","heading":"Text","content":"&amp;="},{"id":"text-316","heading":"Text","content":"ET logique au niveau du bit. (Bitwise AND)"},{"id":"text-317","heading":"Text","content":"^"},{"id":"text-318","heading":"Text","content":"^="},{"id":"text-319","heading":"Text","content":"OU exclusif au niveau du bit. (Bitwise XOR)"},{"id":"text-320","heading":"Text","content":"|"},{"id":"text-321","heading":"Text","content":"|="},{"id":"text-322","heading":"Text","content":"OU inclusif au niveau du bit. (Bitwise OR)"},{"id":"text-323","heading":"Text","content":"&lt;&lt;"},{"id":"text-324","heading":"Text","content":"&lt;&lt;="},{"id":"text-325","heading":"Text","content":"Dcalage logique vers la gauche. Le bit entrant est  zro (pour l&amp;#39;lvation par puissances de deux)."},{"id":"text-326","heading":"Text","content":"&gt;&gt;"},{"id":"text-327","heading":"Text","content":"&gt;&gt;="},{"id":"text-328","heading":"Text","content":"Dcalage logique vers la droite. Le bit entrant est gal au bit de signe (pour la propagation du bit de signe)."},{"id":"text-329","heading":"Text","content":"Tableau 5: Les oprateurs logiques"},{"id":"text-330","heading":"Text","content":"@écho de\nensemble /a &quot;Val1=-2147483647 - 1&quot;\nensemble /a &quot;Val2=1&quot;\nensemble /a &quot;Val1SwitchL01=Val1&lt;&lt;1&quot;,&quot;Val1SwitchL15=Val1&lt;&lt;15&quot;,&quot;Val1SwitchL31=Val1&lt;&lt;31&quot;\nensemble /a &quot;Val2SwitchL01=Val2&lt;&lt;1&quot;,&quot;Val2SwitchL15=Val2&lt;&lt;15&quot;,&quot;Val2SwitchL31=Val2&lt;&lt;31&quot;\nensemble /a &quot;Val1SwitchR01=Val1&gt;&gt;1&quot;,&quot;Val1SwitchR15=Val1&gt;&gt;15&quot;,&quot;Val1SwitchR31=Val1&gt;&gt;31&quot;\nensemble /a &quot;Val2SwitchR01=Val2&gt;&gt;1&quot;,&quot;Val2SwitchR15=Val2&gt;&gt;15&quot;,&quot;Val2SwitchR31=Val2&gt;&gt;31&quot;\nensemble /a &quot;Val1AttribSwitchR=Val1&quot;,&quot;Val1AttribSwitchR&gt;&gt;=15&quot;\nensemble /a &quot;Val2AttribSwitchL=Val2&quot;,&quot;Val2AttribSwitchL&lt;&lt;=15&quot;\nécho %Val1% ^&lt;^&lt; 1: %Val1SwitchL01%\nécho %Val1% ^&lt;^&lt; 15: %Val1SwitchL15%\nécho %Val1% ^&lt;^&lt; 31: %Val1SwitchL31%\necho.\nécho %Val2% ^&lt;^&lt; 1: %Val2SwitchL01%\nécho %Val2% ^&lt;^&lt; 15: %Val2SwitchL15%\nécho %Val2% ^&lt;^&lt; 31: %Val2SwitchL31%\necho.\nécho %Val1% ^&gt;^&gt; 1: %Val1SwitchR01%\nécho %Val1% ^&gt;^&gt; 15: %Val1SwitchR15%\nécho %Val1% ^&gt;^&gt; 31: %Val1SwitchR31%\necho.\nécho %Val2% ^&gt;^&gt; 1: %Val2SwitchR01%\nécho %Val2% ^&gt;^&gt; 15: %Val2SwitchR15%\nécho %Val2% ^&gt;^&gt; 31: %Val2SwitchR31%\necho.\nécho %Val1% ^&gt;^&gt;= 15: %Val1AttribSwitchR%\nécho %Val2% ^&lt;^&lt;= 15: %Val2AttribSwitchL%\necho.\nensemble /a &quot;Val3=1431655765&quot;\nensemble /a &quot;Val4=-858993460&quot;\nensemble /a &quot;Val3LogicalOrVal4=Val3 | Val4&quot;\nensemble /a &quot;Val3LogicalXorVal4=Val3 ^ Val4&quot;\nensemble /a &quot;Val3LogicalAndVal4=Val3 Et Val4&quot;\nensemble /a &quot;Val3AttribOrVal4=Val3&quot;,&quot;Val3AttribOrVal4|=Val4&quot;\nensemble /a &quot;Val3AttribXorVal4=Val3&quot;,&quot;Val3AttribXorVal4^=Val4&quot;\nensemble /a &quot;Val3AttribAndVal4=Val3&quot;,&quot;Val3AttribAndVal4Et=Val4&quot;\nécho %Val3% ^| %Val4%: %Val3LogicalOrVal4%\nécho %Val3% ^|= %Val4%: %Val3AttribOrVal4%\necho.\nécho %Val3% ^^ %Val4%: %Val3LogicalXorVal4%\nécho %Val3% ^^= %Val4%: %Val3AttribXorVal4%\necho.\nécho %Val3% ^Et %Val4%: %Val3LogicalAndVal4%\nécho %Val3% ^Et= %Val4%: %Val3AttribAndVal4%\necho.\npause"},{"id":"text-331","heading":"Text","content":"II-D-3. Les oprateurs unaires▲"},{"id":"text-332","heading":"Text","content":"N.B.: Dans les sections II.D.3, II.ELes nombres entiers signs en notation hexadcimale et II.FLes nombres entiers signs en notation octale de ce document, sont abords diffrents concepts de reprsentation numrique communment utiliss en informatique, tels que:"},{"id":"text-333","heading":"Text","content":"l&amp;#39;criture de nombre en binaire;\nl&amp;#39;criture de nombre en hexadcimal;\nl&amp;#39;criture de nombre en octal;\nla reprsentation des nombres en complment  un;\nla reprsentation des nombres entiers signs en complment  deux."},{"id":"text-334","heading":"Text","content":"Il est donc ncessaire, si vous ne les connaissez pas, de faire des recherches sur Wikipdia.\nLes oprateurs unaires ne s&amp;#39;appliquent qu&amp;#39;aux nombres qu&amp;#39;ils prcdent, ils ne possdent donc pas d&amp;#39;oprateur d&amp;#39;attribution. Leur syntaxe est la suivante (o     est l&amp;#39;oprateur unaire et     est le nombre auquel il s&amp;#39;applique).\n&lt;unaire&gt;&lt;nombre&gt;"},{"id":"text-335","heading":"Text","content":"Oprateur unaire"},{"id":"text-336","heading":"Text","content":"La description"},{"id":"text-337","heading":"Text","content":"!"},{"id":"text-338","heading":"Text","content":"NON logique, renvoie 1 si le nombre est gal  0 et 0 sinon. (Logical NOT)."},{"id":"text-339","heading":"Text","content":"~"},{"id":"text-340","heading":"Text","content":"NON au niveau du bit, complment  un. (Bitwise NOT)"},{"id":"text-341","heading":"Text","content":"&#8211;"},{"id":"text-342","heading":"Text","content":"Renvoie la valeur inverse, soit un nombre ngatif si le nombre d&amp;#39;origine est positif, complment  deux. (NEG)"},{"id":"text-343","heading":"Text","content":"Tableau 6: Les oprateurs unaires \nExemple avec le script 24."},{"id":"text-344","heading":"Text","content":"1.234567.89dix.111213141516171819202122232425262728293031.323334\n@écho de"},{"id":"text-345","heading":"Text","content":"ensemble /a &quot;Val1=2147483647&quot;\nensemble /a &quot;Val2=1&quot;\nensemble /a &quot;Val3=0&quot;"},{"id":"text-346","heading":"Text","content":"ensemble /a &quot;LogicalNOT_Val1=!Val1&quot;\nensemble /a &quot;LogicalNOT_Val2=!Val2&quot;\nensemble /a &quot;LogicalNOT_Val3=!Val3&quot;"},{"id":"text-347","heading":"Text","content":"ensemble /a &quot;BitwiseNOT_Val1=~Val1&quot;\nensemble /a &quot;BitwiseNOT_Val2=~Val2&quot;\nensemble /a &quot;BitwiseNOT_Val3=~Val3&quot;"},{"id":"text-348","heading":"Text","content":"ensemble /a &quot;NEG_Val1=-Val1&quot;\nensemble /a &quot;NEG_Val2=-Val2&quot;\nensemble /a &quot;NEG_Val3=-Val3&quot;"},{"id":"text-349","heading":"Text","content":"écho              ╔════════════════════════════════════════╗\nécho              ║                 Nombre                 ║\nécho ╔════════════╬═════════════╦═════════════╦════════════╣\nécho ║ Oprateur  ║ %Val1%  ║      %Val2%      ║     %Val3%      ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ LogicalNOT ║ %LogicalNOT_Val1%           ║ %LogicalNOT_Val2%           ║ %LogicalNOT_Val3%          ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ BitwiseNOT ║ %BitwiseNOT_Val1% ║ %BitwiseNOT_Val2%          ║ %BitwiseNOT_Val3%         ║\nécho ╠════════════╬═════════════╬═════════════╬════════════╣\nécho ║ NEG        ║ %NEG_Val1% ║ %NEG_Val2%          ║ %NEG_Val3%          ║\nécho ╚════════════╩═════════════╩═════════════╩════════════╝"},{"id":"text-350","heading":"Text","content":"echo.\npause"},{"id":"text-351","heading":"Text","content":"II-E. Les nombres entiers signs en notation hexadcimale▲"},{"id":"text-352","heading":"Text","content":"Les nombres en notation hexadcimale doivent tre dclars comme des nombres entiers en notation dcimale (ce que nous avons utilis jusqu&amp;#39; maintenant) avec la commande set /a &quot;&quot; et toujours tre prfixs par 0x (chiffre zro suivi de la lettre x). The command set /a a pour effet de transformer toutes les valeurs entres en valeurs numriques. Si c&amp;#39;est une chane de caractres alors la commande cherchera une variable portant ce nom, si c&amp;#39;est un nombre hexadcimal alors la commande set /a codera le nombre tel quel en binaire. Cependant, mme si un nombre est fourni en notation hexadcimale, l&amp;#39;interprteur l&amp;#39;expanse toujours en notation dcimale, exemple avec le script 25."},{"id":"text-353","heading":"Text","content":"1.2345\n@écho de"},{"id":"text-354","heading":"Text","content":"ensemble /a &quot;Hexa=0x1 + 0x3&quot;\nécho Rsultat:    %Hexa%\npause"},{"id":"text-355","heading":"Text","content":"Le rsultat du script 25 nous montre que le calcul s&amp;#39;effectue correctement, de mme avec le script 26."},{"id":"text-356","heading":"Text","content":"1.23456\n@écho de"},{"id":"text-357","heading":"Text","content":"ensemble /a &quot;Hexa=0x5 + 0x8&quot;"},{"id":"text-358","heading":"Text","content":"écho Rsultat:    %Hexa%\npause"},{"id":"text-359","heading":"Text","content":"Jusque-l tout va bien mme si le rsultat n&amp;#39;est pas en notation hexadcimale, il est quand mme celui attendu. Le problme c&amp;#39;est que l&amp;#39;interprteur de commande utilise toujours la reprsentation en complment  deux pour coder un nombre entier sign. Ainsi, ds lors que l&amp;#39;on utilise un nombre en notation hexadcimale suprieur  0x7FFFFFFF (soit 2147483647 en notation dcimale), ce nombre est en fait un nombre ngatif comme le montre le script 27."},{"id":"text-360","heading":"Text","content":"1.234\n@écho de\nensemble /a &quot;Hexa=0x80000000&quot;\nécho Rsultat:    %Hexa%\npause"},{"id":"text-361","heading":"Text","content":"Un rsultat plutt droutant pour quiconque ne s&amp;#39;y attend pas, en effet la reprsentation en complment  deux code les nombres ngatifs de 0xFFFFFFFF, soit -1,  0x80000000, soit -2147483648. Exemple avec le script 28."},{"id":"text-362","heading":"Text","content":"1.23456\n@écho de"},{"id":"text-363","heading":"Text","content":"ensemble /a &quot;Hexa=0x80000000 + 0x7FFFFFFF&quot;"},{"id":"text-364","heading":"Text","content":"écho Rsultat:    %Hexa%\npause"},{"id":"text-365","heading":"Text","content":"Comme vous pouvez le voir, on additionne 0x80000000 (soit -2147483648 en reprsentation hexadcimale en complment  deux)  0x7FFFFFFF (soit +2147483647, toujours dans la mme reprsentation) ce qui nous donne le rsultat de -1, le rsultat est un nombre entier sign dcimal utilisant la reprsentation en complment  deux cod sur 32bits soit 0xFFFFFFFF. Pour rcuprer un nombre hexadcimal, il faut le calculer  l&amp;#39;aide d&amp;#39;un algorithme de divisions successives; et pour les nombres ngatifs, de l&amp;#39;oprateur unaire Bitwise NOT dont dispose la commande set /a, voir le script 29."},{"id":"text-366","heading":"Text","content":"1.234567.89dix.111213141516171819202122232425262728293031.323334353637383940414243444546\n@écho de"},{"id":"text-367","heading":"Text","content":"ensemble &quot;SInt32=-2147483648&quot;"},{"id":"text-368","heading":"Text","content":"ensemble /a &quot;SInt32&quot;"},{"id":"text-369","heading":"Text","content":"ensemble /a &quot;SInt32=~SInt32&quot;"},{"id":"text-370","heading":"Text","content":"ensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;"},{"id":"text-371","heading":"Text","content":"ensemble /a &quot;Nibble0=15 - Nibble0&quot;\nensemble /a &quot;Nibble1=15 - Nibble1&quot;\nensemble /a &quot;Nibble2=15 - Nibble2&quot;\nensemble /a &quot;Nibble3=15 - Nibble3&quot;\nensemble /a &quot;Nibble4=15 - Nibble4&quot;\nensemble /a &quot;Nibble5=15 - Nibble5&quot;\nensemble /a &quot;Nibble6=15 - Nibble6&quot;\nensemble /a &quot;Nibble7=15 - Nibble7&quot;"},{"id":"text-372","heading":"Text","content":"ensemble &quot;LSW=%Nibble3% %Nibble2% %Nibble1% %Nibble0%&quot;"},{"id":"text-373","heading":"Text","content":"ensemble &quot;MSW=%Nibble7% %Nibble6% %Nibble5% %Nibble4%&quot;\nécho %MSW% %LSW%"},{"id":"text-374","heading":"Text","content":"ensemble &quot;SInt32=2147483647&quot;\nensemble /a &quot;SInt32&quot;\nensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;\nensemble &quot;LSW=%Nibble3% %Nibble2% %Nibble1% %Nibble0%&quot;\nensemble &quot;MSW=%Nibble7% %Nibble6% %Nibble5% %Nibble4%&quot;\nécho %MSW% %LSW%\npause"},{"id":"text-375","heading":"Text","content":"La sortie du script 29 nous donne bien des nombres hexadcimaux, mais dans une reprsentation dcimale (80000000 soit -2147483648 cod 0x80000000 et 715151515151515 soit 2147483647 cod 0x7FFFFFFF), pour pouvoir les convertir dans une notation hexadcimale; il nous faut utiliser les conditions que nous tudierons au prochain chapitre."},{"id":"text-376","heading":"Text","content":"II-F. Les nombres entiers signs en notation octale▲"},{"id":"text-377","heading":"Text","content":"Les nombres en notation octale fonctionnent comme les autres et supportent les mmes oprations. Pour tre considrs par l&amp;#39;interprteur comme des nombres en notation octale, ils doivent tre prfixs par 0 (chiffre zro). Ils vont donc de -2147483648  2147483647 (cods sur 32bits) soit en notation octale -020000000000  +017777777777. Les nombres en notation octale sont cods tels quels en binaire, mais le principe selon lequel tout nombre est expans en entier sign en notation dcimale cod en complment  deux s&amp;#39;applique aussi pour eux. Notez aussi qu&amp;#39;ils ont le mme problme de transtypage que les nombres dcimaux, exemple avec le script 30."},{"id":"text-378","heading":"Text","content":"@écho de\nensemble /a &quot;Octal1=-017777777777 - 1&quot;\nensemble /a &quot;Octal2=017777777777&quot;\nensemble /a &quot;Octal3=Octal1 + Octal2&quot;\nécho Octal1: %Octal1%\nécho Octal2: %Octal2%\nécho Octal3: %Octal3%\npause"},{"id":"text-379","heading":"Text","content":"Notez aussi que l&amp;#39;utilisation des nombres 08 et 09 gnre toujours une erreur du fait qu&amp;#39;ils sont prfixs par 0; et, que 8 et 9 ne sont pas des chiffres octaux. Lorsque la commande set /a rencontre un 0 en dbut de nombre, elle considre que tous les chiffres qui se trouvent aprs sont des octaux et lorsqu&amp;#39;elle rencontre 8 ou 9, le transtypage ne peut s&amp;#39;effectuer et la commande se termine sur une erreur. Exemple avec le script 31."},{"id":"text-380","heading":"Text","content":"@écho de\nécho Nombre 08:\nensemble /a &quot;Octal1=08&quot;\necho.\nécho Nombre 09:\nensemble /a &quot;Octal1=09&quot;\necho.\npause"},{"id":"text-381","heading":"Text","content":"Les conditions sont supportes par la commande si. Elle permet d&amp;#39;effectuer des comparaisons de toutes sortes et d&amp;#39;excuter des commandes en fonction du rsultat de cette comparaison. autre et sinon si sont, quant  eux, des paramtres de la commande si et ne peuvent tre utiliss qu&amp;#39; l&amp;#39;intrieur de la commande si.\nIII-A. If, else, else if, not et /i▲"},{"id":"text-382","heading":"Text","content":"The command si se traduit simplement par si: si la condition est vraie, fais ceci; elle peut tre accompagne par le paramtre autre qui se traduit par sinon: si la condition est vraie, fais ceci, sinon fais cela. La syntaxe de la commande si est la suivante.\nsi &lt;chattedition&gt; &lt;commande1&gt; [[[[autre &lt;commande2&gt;]  \nComme vous pouvez le voir sur la syntaxe de la commande si, si vient en premier suivi de sa     et d&amp;#39;une commande (), puis vient autre et une commande (), on peut le traduire par:"},{"id":"text-383","heading":"Text","content":"si (si) la     se vrifie alors la     s&amp;#39;excute;\nsinon (autre) c&amp;#39;est la     qui s&amp;#39;excute."},{"id":"text-384","heading":"Text","content":"Le paramtre autre ne peut tre utilis seul, il doit toujours tre utilis avec la commande si, et tre sur la mme ligne. Il y a deux rgles importantes  garder en tte lorsqu&amp;#39;on utilise des conditions:"},{"id":"text-385","heading":"Text","content":"la premire est que l&amp;#39;on ne peut utiliser qu&amp;#39;un maximum de 2048 caractres (sous Windows XP et infrieur) ou un peu plus de 4096 caractres (sous Windows Vista et suprieur) par ligne de commande, limite trs vite atteinte avec plusieurs conditions, plus leurs commandes et leurs paramtres;\net la deuxime est que les parenthses sont prises en compte par l&amp;#39;interprteur de commande comme des oprateurs de bloc, c&amp;#39;est pour cela qu&amp;#39;il faut les chapper lorsque l&amp;#39;on ne s&amp;#39;en sert pas  cette fin."},{"id":"text-386","heading":"Text","content":"Les oprateurs de bloc permettent d&amp;#39;utiliser un bloc de commande en lieu et place d&amp;#39;une commande. Ainsi, chaque fois que la syntaxe autorise l&amp;#39;utilisation d&amp;#39;une commande, celle-ci peut tre remplace par un bloc de commandes.\nAinsi la syntaxe de la commande si peut tre modifie de la manire suivante."},{"id":"text-387","heading":"Text","content":"Syntaxe des conditions if et else avec parenthses\nSélectionnez"},{"id":"text-388","heading":"Text","content":"si &lt;chattedition&gt; (\n    &lt;commande1&gt;\n    &lt;commande2&gt;\n) autre (\n    &lt;commande3&gt;\n    &lt;commande4&gt;\n)"},{"id":"text-389","heading":"Text","content":"L&amp;#39;utilisation des parenthses comme oprateurs de bloc permet d&amp;#39;excuter plusieurs commandes, par condition vrifie, au lieu d&amp;#39;une seule. La parenthse ouvrante associe  une condition doit se trouver sur la mme ligne que cette dernire; si une autre condition est utilise conjointement, alors elle doit se trouver sur la mme ligne que la parenthse fermante associe  la condition qui la prcde.\nThe command si autorise aussi le paramtre sinon si qui se traduit par sinon si, ce dernier permet de poser une condition supplmentaire avant l&amp;#39;excution ventuelle du autre. La syntaxe serait la suivante.\nsi &lt;chattedition1&gt; &lt;cmd1&gt; [[[[autre si &lt;chattedition2&gt; &lt;cmd2&gt;][[[[autre &lt;cmd3&gt;]  \nLes oprateurs de bloc fonctionnent de la mme manire avec le paramtre sinon si en plus. Il faut aussi noter que le paramtre sinon si peut tre utilis autant de fois que l&amp;#39;on veut dans la commande si."},{"id":"text-390","heading":"Text","content":"Syntaxe des conditions if, else if et else\nSélectionnez"},{"id":"text-391","heading":"Text","content":"si &lt;chattedition1&gt; (\n    &lt;commande1&gt;\n    &lt;commande2&gt;\n) autre si &lt;chattedition2&gt; (\n    &lt;commande3&gt;\n    &lt;commande4&gt;\n) autre si &lt;chattedition3&gt; (\n    &lt;commande5&gt;\n    &lt;commande6&gt;\n) autre (\n    &lt;commande7&gt;\n    &lt;commande8&gt;\n)"},{"id":"text-392","heading":"Text","content":"La syntaxe ci-dessus pourrait tre traduite par:"},{"id":"text-393","heading":"Text","content":"si (si) la     est vraie: excuter     et ;\nsinon si (sinon si)     est vraie: excuter     et ;\nsinon si (sinon si)     est vraie: excuter     et ;\nsinon (autre): excuter     et ."},{"id":"text-394","heading":"Text","content":"Les conditions associes  la commande si et au paramtre sinon si prennent le modificateur ne pas qui permet d&amp;#39;excuter une commande si la condition est fausse. Le modificateur ne pas ne s&amp;#39;applique pas  toutes les conditions de la mme structure de contrle. Si le paramtre sinon si est utilis conjointement, son comportement dpendra de la prsence, ou non, du modificateur ne pas  l&amp;#39;intrieur de la condition.\nsi ne pas &lt;chattedition1&gt; &lt;cmd1&gt; autre si &lt;chattedition2&gt; &lt;cmd2&gt; autre &lt;cmd3&gt;  \nLa commande ci-dessus se traduit par:"},{"id":"text-395","heading":"Text","content":"si (si) la     est fausse: excuter la ;\nsinon (sinon si), si la     est vraie: excuter la ;\nsinon (autre), si la     est vraie et que la     est fausse, excuter la ."},{"id":"text-396","heading":"Text","content":"Les conditions associes  la commande si et au paramtre sinon si prennent le modificateur /i qui permet de ne pas tenir compte de la casse lorsque la condition traite des chanes de caractres. Ce modificateur ne fonctionne que sur les conditions qui traitent des chanes de caractres. Si le paramtre sinon si est utilis conjointement, son comportement dpendra de la prsence, ou non, du modificateur /i  l&amp;#39;intrieur de la condition.\nsi /i &lt;chattedition1&gt; &lt;cmd1&gt; autre si /i &lt;chattedition2&gt; &lt;cmd2&gt; autre &lt;cmd3&gt;  \nSe traduit par:"},{"id":"text-397","heading":"Text","content":"si (si) la     est vraie, sans tenir compte de la casse, excuter la ;\nsinon si (sinon si) la     est vraie, sans tenir compte de la casse, excuter la ;\nsinon (autre), si la     est fausse sans tenir compte de la casse et que la     est fausse sans tenir compte de la casse, excuter la ."},{"id":"text-398","heading":"Text","content":"Nous allons maintenant voir quelles sont les conditions supportes par la commande si et le paramtre sinon si."},{"id":"text-399","heading":"Text","content":"III-B. La condition exist ▲"},{"id":"text-400","heading":"Text","content":"La condition exister     permet de tester si un chemin d&amp;#39;accs ou un fichier existe. Elle peut tre utilise avec le paramtre sinon si et le modificateur ne pas. Le modificateur /i ne fonctionne pas sur cette condition. Sa syntaxe est la suivante, o     est le chemin d&amp;#39;accs ou le fichier  tester. Si le chemin d&amp;#39;accs contient des espaces, il doit tre plac entre guillemets.\nsi [[[[ne pas] exister [« ]&lt;chemin&gt;[« ] &lt;ordre&gt;  \nExemple avec le script 32."},{"id":"text-401","heading":"Text","content":"1.23\n@écho de\nsi exister &quot;%cd%&quot; écho %cd% existe bien.\npause"},{"id":"text-402","heading":"Text","content":"III-C. La condition defined ▲"},{"id":"text-403","heading":"Text","content":"La condition défini     permet de tester si une variable a une valeur dfinie. Elle peut tre utilise avec le paramtre sinon si, et le modificateur ne pas. Le modificateur /i ne fonctionne pas sur cette condition. Voir le script 33.\nsi [[[[ne pas] défini &lt;variable&gt; &lt;ordre&gt;"},{"id":"text-404","heading":"Text","content":"1.234567.89dix.111213141516171819\n@écho de\nensemble &quot;Def1=&quot;\nensemble &quot;Def2=abcd&quot;\nsi défini Def1 (\n    écho Def1 est dfinie.\n) autre (\n    écho Def1 n&amp;#39;est pas dfinie.\n)\nsi défini Def2 (\n    écho Def2 est dfinie.\n) autre (\n    écho Def2 n&amp;#39;est pas dfinie.\n)\nsi ne pas défini Def3 (\n    écho Def3 n&amp;#39;est pas dfinie.\n) autre (\n    écho Def3 est dfinie.\n)\npause"},{"id":"text-405","heading":"Text","content":"III-D. La condition errorlevel ▲"},{"id":"text-406","heading":"Text","content":"La condition errorlevel     permet de tester si le code d&amp;#39;erreur de la dernire commande excute est gal ou suprieur au nombre donn en . Le code d&amp;#39;erreur est un nombre renvoy par une commande pour donner des informations sur le droulement de son excution, il est aussi accessible via la variable ErrorLevel. En gnral, le code d&amp;#39;erreur est 0 si aucune erreur ne s&amp;#39;est produite; et il est gal ou suprieur  1 si une erreur s&amp;#39;est produite, chaque code d&amp;#39;erreur correspondant  une erreur prcise. Le nom de variable ErrorLevel est un nom de variable rserv, vous pouvez la modifier en l&amp;#39;crasant avec une nouvelle valeur, cependant, elle prendra la valeur donne jusqu&amp;#39; la fin du script. Attention toutefois, il arrive que des commandes ne modifient pas la variable ErrorLevel ou bien qu&amp;#39;elle lui donne toujours le code 0, ceci est souvent d  de mauvaises pratiques de programmation, fiez-vous  des codes d&amp;#39;erreurs connues et ayant une valeur concrte, ne traitez pas les autres, pour ce faire, consultez le manuel ou l&amp;#39;aide de la commande concerne. Si le modificateur ne pas est utilis, la     seras excute seulement si ErrorLevel est infrieur  l&amp;#39;. Le modificateur /i n&amp;#39;est pas support par la condition errorlevel .\nsi [[[[ne pas] errorlevel &lt;oprande&gt; &lt;ordre&gt;"},{"id":"text-407","heading":"Text","content":"1.234567.89dix.1112\n@écho de"},{"id":"text-408","heading":"Text","content":"setlocal\nensemble &quot;TestError1=Un petit test&quot;\nsi ne pas errorlevel 1 écho Aucune erreur dans la premire commande.\necho.\nensemble /a &quot;TestError2=09&quot;\necho.\nsi errorlevel 1 écho Le code d&amp;#39;erreur des nombres invalides est %ErrorLevel%.\npause"},{"id":"text-409","heading":"Text","content":"endlocal"},{"id":"text-410","heading":"Text","content":"III-E. La condition cmdextversion ▲"},{"id":"text-411","heading":"Text","content":"La condition cmdextversion     permet de tester si le numro de version des extensions de commande est gal ou suprieur au nombre donn en . Le numro de version des extensions de commande est  prendre en compte, car selon la version des extensions, le traitement des commandes peut tre modifi. Reportez-vous  l&amp;#39;aide concernant les commandes cites dans le tableau 7 pour plus de dtails. Chaque commande modifie l&amp;#39;est d&amp;#39;une manire qui lui est propre; ainsi la commande assoc ne sera pas modifie de la mme manire que la commande début, tout simplement parce qu&amp;#39;elle n&amp;#39;excute pas du tout la mme opration."},{"id":"text-412","heading":"Text","content":"DEL ou ERASE"},{"id":"text-413","heading":"Text","content":"COLOR"},{"id":"text-414","heading":"Text","content":"CD ou CHDIR"},{"id":"text-415","heading":"Text","content":"MD ou MKDIR"},{"id":"text-416","heading":"Text","content":"PROMPT"},{"id":"text-417","heading":"Text","content":"PUSHD"},{"id":"text-418","heading":"Text","content":"POPD"},{"id":"text-419","heading":"Text","content":"ENSEMBLE"},{"id":"text-420","heading":"Text","content":"SETLOCAL"},{"id":"text-421","heading":"Text","content":"ENDLOCAL"},{"id":"text-422","heading":"Text","content":"IF"},{"id":"text-423","heading":"Text","content":"POUR"},{"id":"text-424","heading":"Text","content":"CALL"},{"id":"text-425","heading":"Text","content":"SHIFT"},{"id":"text-426","heading":"Text","content":"GOTO"},{"id":"text-427","heading":"Text","content":"START"},{"id":"text-428","heading":"Text","content":"ASSOC"},{"id":"text-429","heading":"Text","content":"FTYPE"},{"id":"text-430","heading":"Text","content":"Tableau 7: Commandes soumises aux extensions \nLa condition cmdextversion     est toujours fausse si les extensions de commande sont dsactives; la premire version des extensions est la version 1 et le numro de version est incrment de 1  chaque nouvelle version. Si le numro de version des extensions est gal ou suprieur  la valeur donne dans la condition cmdextversion     alors la condition est vraie; les extensions de commande tant rtrocompatibles d&amp;#39;une version  l&amp;#39;autre. Si le modificateur ne pas est utilis, la condition est vraie si le numro de version des extensions de commande est infrieur au nombre donn en . La condition cmdextversion     ne prend pas le modificateur /i. Le tableau 8 donne la liste des rvisions d&amp;#39;extensions de commande en fonction du systme d&amp;#39;exploitation."},{"id":"text-431","heading":"Text","content":"Numro de version"},{"id":"text-432","heading":"Text","content":"Compatibilit"},{"id":"text-433","heading":"Text","content":"1"},{"id":"text-434","heading":"Text","content":"Windows 2000."},{"id":"text-435","heading":"Text","content":"2"},{"id":"text-436","heading":"Text","content":"Tous les systmes NT XP et suprieur."},{"id":"text-437","heading":"Text","content":"Tableau 8: Rvisions des extensions de commande \nsi [[[[ne pas] cmdextversion &lt;oprande&gt; &lt;ordre&gt;"},{"id":"text-438","heading":"Text","content":"1.234567.89dix.111213141516171819\n@écho de"},{"id":"text-439","heading":"Text","content":"setlocal enableextensions\nsi ne pas cmdextversion 1 (\n    écho CmdExtVersion 1:  ne pas Detected.\n) autre (\n    écho CmdExtVersion 1:  Detected. \n)\nsi cmdextversion 2 (\n    écho CmdExtVersion 2:  Detected.\n) autre (\n    écho CmdExtVersion 2:  ne pas Detected. \n)\nsi cmdextversion 3 (\n    écho CmdExtVersion 3:  Detected.\n) autre (\n    écho CmdExtVersion 3:  ne pas Detected. \n)\npause"},{"id":"text-440","heading":"Text","content":"III-F. La condition   ▲"},{"id":"text-441","heading":"Text","content":"La condition       permet d&amp;#39;effectuer des comparaisons sur des chanes et des nombres. La comparaison de chanes est effectue au moyen d&amp;#39;un XOR au niveau du bit entre chaque octet d&amp;#39;une chane puis les rsultats obtenus sur les diffrentes chanes sont compars numriquement. Si les deux chanes ne sont constitues que de chiffres alors elles sont transtypes en nombre puis values numriquement. Les comparateurs, pris en compte par la condition   , sont lists dans le tableau 9. La condition       prend les modificateurs ne pas et /i. Sa syntaxe est la suivante, si les chanes contiennent des espaces, elles doivent tre places entre guillemets.\nsi [/i]    [[[[ne pas] [« ]&lt;chane1&gt;[« ] &lt;comparateur&gt; [« ]&lt;chane2&gt;[« ] &lt;cmd&gt;"},{"id":"text-442","heading":"Text","content":"Comparateur"},{"id":"text-443","heading":"Text","content":"La description"},{"id":"text-444","heading":"Text","content":"EQU"},{"id":"text-445","heading":"Text","content":"EQUal, la condition est vraie si les deux chanes sont gales."},{"id":"text-446","heading":"Text","content":"NEQ"},{"id":"text-447","heading":"Text","content":"Not EQual, la condition est vraie si les deux chanes sont diffrentes."},{"id":"text-448","heading":"Text","content":"LSS"},{"id":"text-449","heading":"Text","content":"LeSS, la condition est vraie si chane1 est infrieure  chane2."},{"id":"text-450","heading":"Text","content":"LEQ"},{"id":"text-451","heading":"Text","content":"Less or EQual, la condition est vraie si chane1 est infrieure ou gale  chane2."},{"id":"text-452","heading":"Text","content":"GTR"},{"id":"text-453","heading":"Text","content":"GreaTeR, la condition est vraie si chane1 est suprieure  chane2."},{"id":"text-454","heading":"Text","content":"GEQ"},{"id":"text-455","heading":"Text","content":"Greater or EQual, la condition est vraie si chane1 est suprieure ou gale  chane2."},{"id":"text-456","heading":"Text","content":"Tableau 9: Oprateurs de comparaison"},{"id":"text-457","heading":"Text","content":"1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.\n@écho de\ncls\nensemble &quot;Chane1=Un Petit test&quot;"},{"id":"text-458","heading":"Text","content":"ensemble /a &quot;C1X=0x55^0x6E^0x20^0x50^0x65^0x74^0x69^0x74^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane2=Un petit test&quot;"},{"id":"text-459","heading":"Text","content":"ensemble /a &quot;C2X=0x55^0x6E^0x20^0x70^0x65^0x74^0x69^0x74^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane3=Un grand test&quot;"},{"id":"text-460","heading":"Text","content":"ensemble /a &quot;C3X=0x55^0x6E^0x20^0x67^0x72^0x62^0x6E^0x64^0x20^0x74^0x65^0x73^0x74&quot;\nensemble &quot;Chane4=41&quot;\nensemble &quot;Chane5=12&quot;\nécho               Chane 1         Chane 2          Chane 3\nécho =============================================================\nécho Chane        %Chane1%    %Chane2%    %Chane3%\nécho évaluation    %C1X%              %C2X%               %C3X%\necho.\nsi &quot;%Chane1%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane1%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane1%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi /i &quot;%Chane1%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane1%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane1%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi &quot;%Chane1%&quot; GTR &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane3%&quot;.\n) autre si &quot;%Chane1%&quot; EQU &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane3%&quot;.\n) autre si &quot;%Chane1%&quot; LSS &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane3%&quot;.\n)\nsi /i &quot;%Chane1%&quot; GTR &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est suprieur  &quot;%Chane3%&quot;.\n) autre si /i &quot;%Chane1%&quot; EQU &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est gal  &quot;%Chane3%&quot;.\n) autre si /i &quot;%Chane1%&quot; LSS &quot;%Chane3%&quot; (\n    écho &quot;%Chane1%&quot; est infrieur  &quot;%Chane3%&quot;.\n)\nsi &quot;%Chane3%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane3%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si &quot;%Chane3%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\nsi /i &quot;%Chane3%&quot; GTR &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est suprieur  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane3%&quot; EQU &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est gal  &quot;%Chane2%&quot;.\n) autre si /i &quot;%Chane3%&quot; LSS &quot;%Chane2%&quot; (\n    écho &quot;%Chane3%&quot; est infrieur  &quot;%Chane2%&quot;.\n)\necho.\necho.\nécho               Chane 4    Chane 5         \nécho =============================================================\nécho Chane        %Chane4%          %Chane5%\necho.\nsi %Chane4% GTR %Chane5% (\n    écho %Chane4% est suprieur  %Chane5%.\n) autre si %Chane4% EQU %Chane5% (\n    écho %Chane4% est gal  %Chane5%.\n) autre si %Chane4% LSS %Chane5% (\n    écho %Chane4% est infrieur  %Chane5%.\n)\necho.\npause"},{"id":"text-461","heading":"Text","content":"III-G. La condition &quot;&quot;==&quot;&quot;▲"},{"id":"text-462","heading":"Text","content":"La condition &quot;&quot;==&quot;&quot; permet de tester une galit entre des chanes de caractres. Les chanes doivent tre places entre guillemets si elles sont susceptibles de contenir des espaces. Cette condition prend les modificateurs ne pas et /i."},{"id":"text-463","heading":"Text","content":"1.234567.89dix.11121314151617181920\n@écho de\ncls\nensemble &quot;Un=Une Chane&quot;\nensemble &quot;Deux=une chane&quot;\nsi &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If:      &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n) autre (\n    écho If:      &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n)\nsi ne pas &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If ne pas:  &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n) autre (\n    écho If ne pas:  &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n)\nsi /i &quot;%Un%&quot;==&quot;%Deux%&quot; (\n    écho If /i:   &quot;%Un%&quot;    est gale     &quot;%Deux%&quot;.\n) autre (\n    écho If /i:   &quot;%Un%&quot; n&amp;#39;est pas gale  &quot;%Deux%&quot;.\n)\npause"},{"id":"text-464","heading":"Text","content":"III-H. Mise en application de la commande if▲"},{"id":"text-465","heading":"Text","content":"Dans cette section, nous allons reprendre le script 29 qui permettait de transformer un entier en sa reprsentation hexadcimale en notation en complment  deux. Grce  la commande si, nous allons faire en sorte de traiter les nombres ngatifs et positifs avec la mme fonction de calcul et d&amp;#39;afficher le rsultat dans une forme hexadcimale correcte."},{"id":"text-466","heading":"Text","content":"1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99100101.102.103.104105106.107.108.109.110.111.112.113.114.\n@écho de"},{"id":"text-467","heading":"Text","content":"setlocal"},{"id":"text-468","heading":"Text","content":"ensemble /p &quot;SInt32=Entrez un nombre entre -2147483648 et 2147483647:    &quot;"},{"id":"text-469","heading":"Text","content":"ensemble /a &quot;SInt32&quot;"},{"id":"text-470","heading":"Text","content":"ensemble &quot;NegNum=false&quot;"},{"id":"text-471","heading":"Text","content":"si %SInt32% LSS 0 (\n    ensemble /a &quot;SInt32=~SInt32&quot;\n    ensemble &quot;NegNum=true&quot;\n)"},{"id":"text-472","heading":"Text","content":"ensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;"},{"id":"text-473","heading":"Text","content":"si &quot;%NegNum%&quot;==&quot;true&quot; (\n    ensemble /a &quot;Nibble0=15 - Nibble0&quot;\n    ensemble /a &quot;Nibble1=15 - Nibble1&quot;\n    ensemble /a &quot;Nibble2=15 - Nibble2&quot;\n    ensemble /a &quot;Nibble3=15 - Nibble3&quot;\n    ensemble /a &quot;Nibble4=15 - Nibble4&quot;\n    ensemble /a &quot;Nibble5=15 - Nibble5&quot;\n    ensemble /a &quot;Nibble6=15 - Nibble6&quot;\n    ensemble /a &quot;Nibble7=15 - Nibble7&quot;\n)"},{"id":"text-474","heading":"Text","content":"si %Nibble0% GTR 9 (\n    si %Nibble0% EQU dix ensemble &quot;Nibble0=A&quot;\n    si %Nibble0% EQU 11 ensemble &quot;Nibble0=B&quot;\n    si %Nibble0% EQU 12 ensemble &quot;Nibble0=C&quot;\n    si %Nibble0% EQU 13 ensemble &quot;Nibble0=D&quot;\n    si %Nibble0% EQU 14 ensemble &quot;Nibble0=E&quot;\n    si %Nibble0% EQU 15 ensemble &quot;Nibble0=F&quot;\n)\nsi %Nibble1% GTR 9 (\n    si %Nibble1% EQU dix ensemble &quot;Nibble1=A&quot;\n    si %Nibble1% EQU 11 ensemble &quot;Nibble1=B&quot;\n    si %Nibble1% EQU 12 ensemble &quot;Nibble1=C&quot;\n    si %Nibble1% EQU 13 ensemble &quot;Nibble1=D&quot;\n    si %Nibble1% EQU 14 ensemble &quot;Nibble1=E&quot;\n    si %Nibble1% EQU 15 ensemble &quot;Nibble1=F&quot;\n)\nsi %Nibble2% GTR 9 (\n    si %Nibble2% EQU dix ensemble &quot;Nibble2=A&quot;\n    si %Nibble2% EQU 11 ensemble &quot;Nibble2=B&quot;\n    si %Nibble2% EQU 12 ensemble &quot;Nibble2=C&quot;\n    si %Nibble2% EQU 13 ensemble &quot;Nibble2=D&quot;\n    si %Nibble2% EQU 14 ensemble &quot;Nibble2=E&quot;\n    si %Nibble2% EQU 15 ensemble &quot;Nibble2=F&quot;\n)\nsi %Nibble3% GTR 9 (\n    si %Nibble3% EQU dix ensemble &quot;Nibble3=A&quot;\n    si %Nibble3% EQU 11 ensemble &quot;Nibble3=B&quot;\n    si %Nibble3% EQU 12 ensemble &quot;Nibble3=C&quot;\n    si %Nibble3% EQU 13 ensemble &quot;Nibble3=D&quot;\n    si %Nibble3% EQU 14 ensemble &quot;Nibble3=E&quot;\n    si %Nibble3% EQU 15 ensemble &quot;Nibble3=F&quot;\n)\nsi %Nibble4% GTR 9 (\n    si %Nibble4% EQU dix ensemble &quot;Nibble4=A&quot;\n    si %Nibble4% EQU 11 ensemble &quot;Nibble4=B&quot;\n    si %Nibble4% EQU 12 ensemble &quot;Nibble4=C&quot;\n    si %Nibble4% EQU 13 ensemble &quot;Nibble4=D&quot;\n    si %Nibble4% EQU 14 ensemble &quot;Nibble4=E&quot;\n    si %Nibble4% EQU 15 ensemble &quot;Nibble4=F&quot;\n)\nsi %Nibble5% GTR 9 (\n    si %Nibble5% EQU dix ensemble &quot;Nibble5=A&quot;\n    si %Nibble5% EQU 11 ensemble &quot;Nibble5=B&quot;\n    si %Nibble5% EQU 12 ensemble &quot;Nibble5=C&quot;\n    si %Nibble5% EQU 13 ensemble &quot;Nibble5=D&quot;\n    si %Nibble5% EQU 14 ensemble &quot;Nibble5=E&quot;\n    si %Nibble5% EQU 15 ensemble &quot;Nibble5=F&quot;\n)\nsi %Nibble6% GTR 9 (\n    si %Nibble6% EQU dix ensemble &quot;Nibble6=A&quot;\n    si %Nibble6% EQU 11 ensemble &quot;Nibble6=B&quot;\n    si %Nibble6% EQU 12 ensemble &quot;Nibble6=C&quot;\n    si %Nibble6% EQU 13 ensemble &quot;Nibble6=D&quot;\n    si %Nibble6% EQU 14 ensemble &quot;Nibble6=E&quot;\n    si %Nibble6% EQU 15 ensemble &quot;Nibble6=F&quot;\n)\nsi %Nibble7% GTR 9 (\n    si %Nibble7% EQU dix ensemble &quot;Nibble7=A&quot;\n    si %Nibble7% EQU 11 ensemble &quot;Nibble7=B&quot;\n    si %Nibble7% EQU 12 ensemble &quot;Nibble7=C&quot;\n    si %Nibble7% EQU 13 ensemble &quot;Nibble7=D&quot;\n    si %Nibble7% EQU 14 ensemble &quot;Nibble7=E&quot;\n    si %Nibble7% EQU 15 ensemble &quot;Nibble7=F&quot;\n)"},{"id":"text-475","heading":"Text","content":"ensemble &quot;LSW=%Nibble3%%Nibble2%%Nibble1%%Nibble0%&quot;"},{"id":"text-476","heading":"Text","content":"ensemble &quot;MSW=%Nibble7%%Nibble6%%Nibble5%%Nibble4%&quot;"},{"id":"text-477","heading":"Text","content":"écho 0x%MSW%%LSW%"},{"id":"text-478","heading":"Text","content":"endlocal\npause"},{"id":"text-479","heading":"Text","content":"Ce script sera un script tmoin que nous ferons voluer tout au long de ce document, il nous permettra de comparer les diffrentes approches et ce qu&amp;#39;elles impliquent comme contrainte d&amp;#39;utilisation.\nEn son tat actuel, ce script est gourmand en ressource systme, car  chaque ligne de commande correspond un appel vers l&amp;#39;interprteur augmentant d&amp;#39;autant son temps de traitement. Les boucles pour devraient nous permettre de rduire considrablement son cot en temps d&amp;#39;excution et la taille du script par la mme occasion."},{"id":"text-480","heading":"Text","content":"Un script batch s&amp;#39;excute toujours de manire linaire, du dbut vers la fin, et  moins que l&amp;#39;on ne redirige son excution, ce comportement reste inchang. Il existe plusieurs possibilits pour rediriger l&amp;#39;excution d&amp;#39;un script telles que: les labels, les sauts, les appels de fonction et les sorties.\nIV-A. Les labels▲"},{"id":"text-481","heading":"Text","content":"Les labels sont des adresses relatives se prsentant sous forme de chanes de caractres prfixes par : et termines par un caractre blanc (l&amp;#39;espace, la tabulation ou le retour  la ligne). Ces adresses relatives pointent vers le premier caractre situ aprs le retour  la ligne qui termine le label. Elles peuvent tre utilises pour adresser une portion de code. Chaque nom de label devrait tre unique dans le script. La syntaxe d&amp;#39;un label est la suivante, o  est le nom du label:\n:&lt;Étiquette&gt;"},{"id":"text-482","heading":"Text","content":"IV-B. Les sauts▲"},{"id":"text-483","heading":"Text","content":"The command goto effectue un saut inconditionnel vers le label spcifi en paramtre, permettant ainsi de continuer l&amp;#39;excution du programme dans une portion de code situe n&amp;#39;importe o dans le script. Une fois le saut effectu, l&amp;#39;excution continue  la ligne qui suit le label spcifi:\ngoto [[[[:]&lt;Étiquette&gt;"},{"id":"text-484","heading":"Text","content":"1.234567.8\n@écho de"},{"id":"text-485","heading":"Text","content":"goto :MonLabel\nécho Une phrase qui ne sera jamais affiche."},{"id":"text-486","heading":"Text","content":":MonLabel\nécho Une phrase qui sera affiche.\npause"},{"id":"text-487","heading":"Text","content":"Dans le script 39, la commande echo Une phrase qui ne sera jamais affiche. n&amp;#39;est pas traite, l&amp;#39;excution tant redirige par la commande goto:MonLabel vers la ligne suivant le label :MonLabel soit la commande echo Une phrase qui sera affiche."},{"id":"text-488","heading":"Text","content":"IV-C. Contexte de commande▲"},{"id":"text-489","heading":"Text","content":"L&amp;#39;excution de l&amp;#39;interprteur ou d&amp;#39;un script s&amp;#39;effectue dans un processus hte auquel le systme d&amp;#39;exploitation alloue un espace mmoire. Cet espace mmoire est appel la pile. Une pile est une zone de mmoire dans laquelle les donnes sont places les unes  la suite des autres. Les donnes qui y sont places doivent tre rcupres dans un ordre particulier: la dernire donne place doit tre la premire  tre rcupre. Sur cette pile, le systme y place ce que l&amp;#39;on appelle un contexte.\nLors de sa cration, le contexte se voit attribuer, par le systme, une srie de variables: les variables d&amp;#39;environnement du systme, des variables contenant la commande et les paramtres de la commande ayant gnr le contexte et une adresse de sortie du contexte. Ainsi cr, le contexte reprsente l&amp;#39;environnement dans lequel le script va s&amp;#39;excuter en lui permettant de disposer de donnes qui lui sont propres.  chaque nouvelle excution d&amp;#39;un script ou d&amp;#39;une commande, l&amp;#39;interprteur cre un nouveau contexte et le place sur la pile. Ce nouveau contexte est appel contexte descendant.\nLes variables d&amp;#39;environnement sont hrites du systme lors de la cration du processus hte et se propagent par ascendance successive aux diffrents contextes descendants. Les variables contenant la commande et les arguments d&amp;#39;appels, elles, sont propres au contexte et ne se propagent jamais aux contextes descendants. L&amp;#39;adresse de sortie du contexte n&amp;#39;est pas accessible en tant que variable et, tout comme les arguments d&amp;#39;appel, est propre au contexte. Son rle est plus amplement dtaill dans le reste du chapitre.\nCertaines commandes s&amp;#39;excutent dans le contexte en cours alors que d&amp;#39;autres crent leurs propres contextes. C&amp;#39;est, en partie, ce qui fait la diffrence entre commande interne et externe: les commandes internes sont en fait des fonctions internes de l&amp;#39;interprteur qu&amp;#39;il est possible d&amp;#39;appeler via un alias de type nom de commande, alors que les commandes externes sont des excutables distincts de l&amp;#39;interprteur. L&amp;#39;excution d&amp;#39;une commande externe ou d&amp;#39;un script gnrera toujours un nouveau contexte. Les commandes internes s&amp;#39;excutent toujours dans le contexte courant. Il faut cependant noter que les commandes internes, mme si elles excutent toujours leurs fonctions principales dans le contexte courant, peuvent crer des contextes descendants afin d&amp;#39;excuter certaines fonctions comme la boucle pour qui gnre un contexte initial dans lequel se trouve l&amp;#39;ensemble  traiter et un contexte secondaire, cr  chaque itration de la boucle, dans lequel s&amp;#39;opre le traitement.\nIV-C-1. La porte des variables▲"},{"id":"text-490","heading":"Text","content":"Si le concept de contexte de commande est si important, c&amp;#39;est qu&amp;#39;il influe grandement sur l&amp;#39;utilisation des variables. En effet, chaque contexte est une fraction de la pile qui n&amp;#39;est pas accessible lorsque l&amp;#39;excution s&amp;#39;opre depuis un contexte ascendant. Les variables se propagent par ascendance; c&amp;#39;est&#8211;dire que lorsqu&amp;#39;un nouveau contexte est cr, il hrite des variables (et de leurs valeurs) du contexte ascendant (celui  partir duquel il a t cr). Si une variable est modifie dans un contexte descendant, sa valeur restera inchange dans le contexte ascendant. Ainsi, faire passer une variable vers un contexte descendant est simple (il suffit de crer le contexte), mais l&amp;#39;inverse s&amp;#39;avre plus compliqu, car il n&amp;#39;est pas possible de modifier une valeur dans un contexte ascendant.\nL&amp;#39;interprteur supporte l&amp;#39;expansion retarde des variables qui permet, dans une certaine mesure, de faire passer une valeur vers un contexte ascendant. Pour cela, le processus hte, lorsque l&amp;#39;expansion retarde est active, alloue une seconde zone de mmoire qui prend la forme d&amp;#39;un tas qui est accessible depuis n&amp;#39;importe quel contexte. Contrairement  la pile, il est possible, avec le tas, d&amp;#39;y placer et rcuprer les donnes dans n&amp;#39;importe quel ordre.  chaque fois qu&amp;#39;une variable est cre ou modifie, elle est place  la fois dans le contexte (autrement dit sur la pile) et dans le tas. Pour accder aux variables dont l&amp;#39;expansion est retarde, il faut utiliser le symbole ! au lieu du symbole % lors de leur expansion. Ainsi la variable prendra la dernire valeur qui lui a t attribue pendant l&amp;#39;excution et non la valeur qu&amp;#39;elle possde dans le contexte en cours. L&amp;#39;expansion retarde des variables sera plus amplement aborde dans le chapitre VIL&amp;#39;expansion retarde des variables."},{"id":"text-491","heading":"Text","content":"IV-D. Les fonctions▲"},{"id":"text-492","heading":"Text","content":"Les fonctions sont des portions de code isoles, commenant par un label et finissant par un saut  une adresse spcifique: l&amp;#39;adresse de retour. La vraie diffrence avec une simple portion de code rside dans le fait qu&amp;#39;un nouveau contexte est cr, permettant ainsi aux fonctions de disposer de paramtres de commande et, dans certains cas, d&amp;#39;un code de sortie.\nIV-D-1. L&amp;#39;appel de fonction▲"},{"id":"text-493","heading":"Text","content":"The command appel permet d&amp;#39;effectuer des appels de fonction. Elle a la particularit de crer un contexte dans lequel va s&amp;#39;excuter la fonction appele (la portion de code); lors de la cration du contexte descendant, une adresse de retour et les arguments d&amp;#39;appel vont tre empils. La syntaxe de la commande appel est la suivante, o     est le nom de la fonction  appeler et     est le ou les paramtres  passer  la fonction.\nappel :&lt;étiquette&gt; [[[[&lt;paramtre&gt; [&#8230;]]  \nLors d&amp;#39;un appel  une fonction, si l&amp;#39;excution est redirige vers une autre adresse que l&amp;#39;adresse de retour et que, par la suite, d&amp;#39;autres appels sont effectus vers cette mme fonction, alors la premire adresse ne sera pas dpile, occasionnant une fuite de mmoire. Si un script comporte ce cas, son excution peut tre stoppe par l&amp;#39;interprteur (si l&amp;#39;utilisation de la pile atteint 90%) comme le montre le script 40."},{"id":"text-494","heading":"Text","content":"1.2345\n@écho de\n:LabelUn\nappel :LabelDeux\n:LabelDeux\ngoto :LabelUn"},{"id":"text-495","heading":"Text","content":"IV-D-2. Sortie de fonction▲"},{"id":"text-496","heading":"Text","content":"The command goto prend aussi le label :eof (End Of File), qui prend la valeur de l&amp;#39;adresse de retour du contexte en cours, soit la ligne se trouvant immdiatement aprs le dernier appel effectu.\nThe command goto n&amp;#39;ajoute rien dans la pile, ainsi l&amp;#39;excution d&amp;#39;un goto ne peut occasionner de fuite de mmoire. Dans le cas prcis de l&amp;#39;excution d&amp;#39;un goto:eof, la commande goto incrmente le pointeur de pile de la taille totale des adresses des arguments d&amp;#39;appel et de la taille de l&amp;#39;adresse de retour, permettant  la pile de revenir  l&amp;#39;tat d&amp;#39;avant l&amp;#39;appel, puis effectue un saut inconditionnel  l&amp;#39;adresse de retour, soit la ligne suivant le dernier appel. Ainsi, si l&amp;#39;on modifie le script 40 de la manire suivante (script 41), on obtient un script qui ne finit jamais, car il n&amp;#39;y a ni fuite de mmoire (chaque appel de la fonction :LabelDeux finished by goto:eof), ni point de sortie (il y aura toujours une commande  excuter, l&amp;#39;excution revient toujours au :LabelUn). Seul l&amp;#39;appui sur les touches Ctrl+C permet de quitter le script."},{"id":"text-497","heading":"Text","content":"1.234567.89dix.\n@écho de"},{"id":"text-498","heading":"Text","content":"ensemble /a &quot;Counter=0&quot;\n:LabelUn\nappel :LabelDeux\nensemble /a &quot;Counter+=1&quot;\ngoto :LabelUn\n:LabelDeux\nécho %Counter%\ngoto :eof"},{"id":"text-499","heading":"Text","content":"IV-E. Les paramtres de commande▲"},{"id":"text-500","heading":"Text","content":"Ils sont passs au contexte lors de sa cration et sont accessibles sous la forme de variables spciales: %n, n tant le numro d&amp;#39;index du paramtre. En effet, chaque contexte tant gnr suite  l&amp;#39;appel d&amp;#39;un script, d&amp;#39;une fonction ou d&amp;#39;une commande, il possde une commande d&amp;#39;appel et, la plupart du temps, de paramtres d&amp;#39;appel. L&amp;#39;index %0 contient le nom du script, de la fonction ou de la commande, l&amp;#39;index %1 contient le paramtre 1, l&amp;#39;index %2 contient le paramtre 2 et ainsi de suite. Le paramtre %* expanse tous les paramtres passs au contexte (%0 n&amp;#39;est pas un paramtre, mais une commande d&amp;#39;appel et n&amp;#39;est donc pas renvoye par %*). Exemple avec le script 42:"},{"id":"text-501","heading":"Text","content":"1.234567.89dix.1112131415\n@écho de"},{"id":"text-502","heading":"Text","content":"appel :MonLabel Param1 Param2\npause"},{"id":"text-503","heading":"Text","content":"goto :eof"},{"id":"text-504","heading":"Text","content":":MonLabel\nécho %*\nécho %0\nécho %1\nécho %2\ngoto :eof"},{"id":"text-505","heading":"Text","content":"L&amp;#39;utilisation des paramtres suit plusieurs rgles:"},{"id":"text-506","heading":"Text","content":"les paramtres ne sont pas limits en nombre dans la commande d&amp;#39;appel, mais la rgle des 2048/4096 caractres maximum par ligne de commande s&amp;#39;applique;\npar souci de compatibilit avec les systmes Windows XP et antrieurs, il est prfrable de ne pas utiliser des paramtres avec un index suprieur  9, qui restent cependant accessibles via la commande décalage (voir section IV.E.2La commande shift)."},{"id":"text-507","heading":"Text","content":"IV-E-1. Les modificateurs de paramtres de commande▲"},{"id":"text-508","heading":"Text","content":"Les paramtres de commande supportent plusieurs modificateurs permettant de les parser, en voici la liste exhaustive:"},{"id":"text-509","heading":"Text","content":"Modificateur"},{"id":"text-510","heading":"Text","content":"La description"},{"id":"text-511","heading":"Text","content":"%~1"},{"id":"text-512","heading":"Text","content":"résultats %1 en supprimant les guillemets (&quot;) de dbut et de fin."},{"id":"text-513","heading":"Text","content":"%~f1"},{"id":"text-514","heading":"Text","content":"renvoie le chemin d&amp;#39;accs vrifi du fichier dsign par %1, si le fichier n&amp;#39;est pas trouv, alors ce modificateur s&amp;#39;expanse en une chane vide."},{"id":"text-515","heading":"Text","content":"%~d1"},{"id":"text-516","heading":"Text","content":"renvoie la lettre de lecteur du fichier dsign par %1."},{"id":"text-517","heading":"Text","content":"%~p1"},{"id":"text-518","heading":"Text","content":"renvoie le chemin d&amp;#39;accs du fichier dsign par %1."},{"id":"text-519","heading":"Text","content":"%~n1"},{"id":"text-520","heading":"Text","content":"renvoie le nom du fichier dsign par %1."},{"id":"text-521","heading":"Text","content":"%~x1"},{"id":"text-522","heading":"Text","content":"renvoie l&amp;#39;extension du fichier dsign par %1."},{"id":"text-523","heading":"Text","content":"%~s1"},{"id":"text-524","heading":"Text","content":"renvoie le chemin d&amp;#39;accs, sous forme de noms courts, du fichier dsign par %1."},{"id":"text-525","heading":"Text","content":"%~a1"},{"id":"text-526","heading":"Text","content":"renvoie les attributs du fichier dsign par %1."},{"id":"text-527","heading":"Text","content":"%~t1"},{"id":"text-528","heading":"Text","content":"renvoie la date et l&amp;#39;heure de cration du fichier dsign par %1."},{"id":"text-529","heading":"Text","content":"%~z1"},{"id":"text-530","heading":"Text","content":"renvoie la taille du fichier dsign par %1."},{"id":"text-531","heading":"Text","content":"%~$:1"},{"id":"text-532","heading":"Text","content":"est parcourue  la recherche d&amp;#39;occurrence de %1, si aucune occurrence de %1 n&amp;#39;est trouve ou que  n&amp;#39;est pas dfini dans le contexte en cours, alors ce modificateur s&amp;#39;expanse en une chane vide. Oui  est compos de plusieurs chanes, elles doivent tre spares par des points-virgules (;) afin que le modificateur puisse les distinguer correctement."},{"id":"text-533","heading":"Text","content":"Tableau 10: Les modificateurs de paramtres de commande. \nLes modificateurs de paramtres de commande fonctionnent pour tous les index. Ils peuvent tre utiliss conjointement pour obtenir plusieurs informations en mme temps, comme le montre le script 43:"},{"id":"text-534","heading":"Text","content":"1.234567.89\n@écho de"},{"id":"text-535","heading":"Text","content":"cls\nappel :MonLabel %cmdcmdline%\npause\ngoto :eof\n:MonLabel\nécho %~dpnx€ComSpec:1\ngoto :eof"},{"id":"text-536","heading":"Text","content":"IV-E-2. La commande shift▲"},{"id":"text-537","heading":"Text","content":"The command décalage permet de dcaler l&amp;#39;index de tous les paramtres de -1, afin d&amp;#39;accder aux index suprieurs  neuf, ou de crer un mcanisme de gestion des paramtres (voir la mise en application de ce chapitreMise en application des contextes). Si les extensions de commande sont actives, la commande décalage prend le paramtre /n, o n est le numro d&amp;#39;index  partir duquel commence le dcalage des paramtres, tous les index gaux ou suprieurs  n seront dcals de -1.\ndécalage [/n] \nDans le script 44, le commande shift /1 permet d&amp;#39;accder au deuxime paramtre via l&amp;#39;index 1:."},{"id":"text-538","heading":"Text","content":"1.234567.89\n@écho de\ncls\nappel :MonLabel &quot;rien&quot; %cmdcmdline%\npause\nsortie /b\n:MonLabel\ndécalage /1\nécho %~dpnx€ComSpec:1\ngoto :eof"},{"id":"text-539","heading":"Text","content":"IV-F. Les sorties▲"},{"id":"text-540","heading":"Text","content":"La sortie d&amp;#39;un contexte ou d&amp;#39;un processus peut s&amp;#39;effectuer via les commandes sortie et goto:eof. Dans le cas de goto:eof, si tous les contextes ont correctement t dpils, alors la dernire adresse dpile est:"},{"id":"text-541","heading":"Text","content":"soit l&amp;#39;adresse de sortie du processus dans le cas d&amp;#39;un script appel en cliquant dessus;\nsoit l&amp;#39;adresse de retour  l&amp;#39;interprteur si le script a t lanc depuis celui-ci."},{"id":"text-542","heading":"Text","content":"The command sortie, elle, permet de sortir du processus hte, quel que soit le nombre de contextes empils. Si la commande sortie est utilise avec le paramtre /b, alors la sortie s&amp;#39;effectuera  l&amp;#39;adresse de sortie du contexte et non  l&amp;#39;adresse de sortie du processus hte. L&amp;#39;intrt de la commande sortie est qu&amp;#39;un code numrique de sortie peut tre spcifi, contrairement  goto:eof. La syntaxe de la commande exit est la suivante, o     est le code de sortie.\nsortie [/b]    [[[[&lt;CodeSortie&gt;]  \nDans le script 45, la sortie de la fonction :LabelDeux s&amp;#39;effectue  l&amp;#39;aide d&amp;#39;un goto:eof et la sortie de la fonction :LabelQuatre s&amp;#39;effectue  l&amp;#39;aide d&amp;#39;exit /b; dans les deux cas, le retour vers la procdure appelante s&amp;#39;opre correctement, car c&amp;#39;est la bonne adresse de retour qui est dpile. Dans la fonction :LabelSix du script 45, la commande exit /b provoque la fin du script, car la fonction :LabelSix a t appele avec la commande goto:LabelSix qui n&amp;#39;a rien empil. Comme tous les contextes prcdents ont t dpils correctement, seule la dernire adresse de retour subsiste. Cette adresse correspond  l&amp;#39;adresse de retour  l&amp;#39;interprteur si le script a t appel depuis celui-ci ou  l&amp;#39;adresse de sortie du processus, si le script a t appel par un double-clic."},{"id":"text-543","heading":"Text","content":"1.234567.89dix.111213141516171819202122232425262728293031.323334353637\n@écho de\ncls\nensemble /a &quot;CounterGoto=0&quot;\nensemble /a &quot;CounterExit=0&quot;\nensemble /a &quot;CounterCounter=0&quot;\n:LabelUn\nappel :LabelDeux\nensemble /a &quot;CounterGoto+=1&quot;\nécho CounterGoto: %CounterGoto% sur affichage Goto 1.\nsi %CounterGoto% EQU 6 goto :LabelTrois\ngoto :LabelUn\n:LabelDeux\nensemble /a &quot;CounterGoto+=1&quot;\nécho CounterGoto: %CounterGoto% sur affichage Goto 2\ngoto :eof"},{"id":"text-544","heading":"Text","content":":LabelTrois\nappel :LabelQuatre\nensemble /a &quot;CounterExit+=1&quot;\nécho CounterExit: %CounterExit% sur affichage Sortie 1.\nsi %CounterExit% EQU 6 goto :LabelCinq\ngoto :LabelTrois\n:LabelQuatre\nensemble /a &quot;CounterExit+=1&quot;\nécho CounterExit: %CounterExit% sur affichage Sortie 2\nsortie /b"},{"id":"text-545","heading":"Text","content":":LabelCinq\ngoto :LabelSix\nensemble /a &quot;CounterCounter+=1&quot;\nécho CounterCounter: %CounterCounter% sur affichage Counter 1.\nsi %CounterCounter% EQU 6 sortie /b\ngoto :LabelCinq\n:LabelSix\nensemble /a &quot;CounterCounter+=1&quot;\nécho CounterCounter: %CounterCounter% sur affichage Counter 2.\nsortie /b"},{"id":"text-546","heading":"Text","content":"IV-G. Code de sortie▲"},{"id":"text-547","heading":"Text","content":"Comme expliqu prcdemment, un code de sortie peut tre spcifi pour une fonction ou pour un script. Cela se fait via la commande sortie [/b]     o     est un code de sortie numrique. Les codes de sortie sont rgis par les mmes rgles que les nombres entiers et sont cods sur 32 bits en arithmtique signe. Ce code de sortie est fix dans la variable ErrorLevel afin de pouvoir tre utilis par la suite. Exemple avec le script 46:"},{"id":"text-548","heading":"Text","content":"1.234567.89\n@écho de"},{"id":"text-549","heading":"Text","content":"écho %ErrorLevel%\nappel :UnLabel\nécho %ErrorLevel%\npause\nsortie /b\n:UnLabel\nsortie /b 1"},{"id":"text-550","heading":"Text","content":"IV-H. Script batch et adresse de retour▲"},{"id":"text-551","heading":"Text","content":"L&amp;#39;appel d&amp;#39;un script depuis l&amp;#39;interprteur ou en cliquant dessus gnre toujours un contexte complet. Cependant l&amp;#39;appel d&amp;#39;un script en ligne de commande depuis un autre script gnre un contexte ne possdant pas d&amp;#39;adresse de retour. Exemple avec le script 47:"},{"id":"text-552","heading":"Text","content":"1.234567.89dix.1112131415161718\n@écho de"},{"id":"text-553","heading":"Text","content":"si exister test.bat del /q test.bat"},{"id":"text-554","heading":"Text","content":"appel :WriteTestBat &gt;&gt;test.bat"},{"id":"text-555","heading":"Text","content":"test.bat"},{"id":"text-556","heading":"Text","content":"écho Return  %~nx0.\ndel /q test.bat\npause\nsortie /b"},{"id":"text-557","heading":"Text","content":":WriteTestBat\nécho @écho de\nécho écho Une phrase affiche dans test.bat\nécho pause\ngoto :eof"},{"id":"text-558","heading":"Text","content":"Lorsqu&amp;#39;on excute le script 47, celui-ci cre un second script, test.bat. L&amp;#39;appel en ligne de commande Test.bat affiche alors Une phrase affiche depuis test.bat et met en pause l&amp;#39;excution. Lorsqu&amp;#39;on appuie sur une touche, cela provoque la fin des deux scripts. En effet, quand l&amp;#39;interprteur arrive  la fin d&amp;#39;un script et que celui-ci ne se termine pas par goto :eof ou sortie [/b], il effectue de lui-mme le saut  l&amp;#39;adresse de retour. Sauf que l&amp;#39;appel de test.bat n&amp;#39;a pas empil d&amp;#39;adresse de retour et de ce fait, l&amp;#39;adresse qui est dpile est celle du premier script. Pour parer  ce problme, il faut s&amp;#39;assurer que l&amp;#39;adresse de retour soit effectivement empile en utilisant la commande appel. Ainsi, en modifiant le script 47 de la manire suivante (script 48), l&amp;#39;appel et la sortie s&amp;#39;effectuent sans erreur."},{"id":"text-559","heading":"Text","content":"1.234567.89dix.1112131415161718\n@écho de"},{"id":"text-560","heading":"Text","content":"si exister test.bat del /q test.bat"},{"id":"text-561","heading":"Text","content":"appel :WriteTestBat &gt;&gt;test.bat"},{"id":"text-562","heading":"Text","content":"appel test.bat"},{"id":"text-563","heading":"Text","content":"écho Return  %~nx0.\ndel /q test.bat\npause\nsortie /b"},{"id":"text-564","heading":"Text","content":":WriteTestBat\nécho @écho de\nécho écho Une phrase affiche dans test.bat\nécho pause\ngoto :eof"},{"id":"text-565","heading":"Text","content":"IV-I. La commande start▲"},{"id":"text-566","heading":"Text","content":"The command début permet de lancer un script ou une commande dans un nouveau processus, permettant ainsi d&amp;#39;excuter des commandes dans un environnement modifi. Ainsi, toute variable cre ou modifie dans le script appelant est passe  ce nouveau processus."},{"id":"text-567","heading":"Text","content":"Syntaxe de la commande start\nSélectionnez"},{"id":"text-568","heading":"Text","content":"début [&quot;[&quot;[\"[\"&lt;légende&gt;&quot;][/d[/d[/d[/d&lt;chemin&gt;] [/i] [/min] [/max]    [/separate[/separate[/separate[/separate|/shared][/low[/low\n      [/low|/normal|/high|/realtime|/abovenormal|/belownormal][/affinity[/affinity[/affinity[/affinity&lt;hexa&gt;]\n      [/wait] [/b]    [[[[&lt;ordre&gt;][[[[&lt;paramtres&gt;]"},{"id":"text-569","heading":"Text","content":"Paramtres"},{"id":"text-570","heading":"Text","content":"Descriptions"},{"id":"text-571","heading":"Text","content":"Titre de la fentre."},{"id":"text-572","heading":"Text","content":"/d"},{"id":"text-573","heading":"Text","content":"Spcifie que le chemin d&amp;#39;accs donn par     est le rpertoire de dpart."},{"id":"text-574","heading":"Text","content":"Chemin d&amp;#39;accs du rpertoire de dpart."},{"id":"text-575","heading":"Text","content":"/b"},{"id":"text-576","heading":"Text","content":"Lance l&amp;#39;application dans la fentre courante (en tche de fond). L&amp;#39;arrt par Ctrl+C est remplac par Ctrl+Pause."},{"id":"text-577","heading":"Text","content":"/i"},{"id":"text-578","heading":"Text","content":"Le nouveau contexte sera le contexte original du processus hte et non le contexte en cours."},{"id":"text-579","heading":"Text","content":"/min"},{"id":"text-580","heading":"Text","content":"Dmarrer dans une fentre rduite."},{"id":"text-581","heading":"Text","content":"/max"},{"id":"text-582","heading":"Text","content":"Dmarrer dans une fentre agrandie."},{"id":"text-583","heading":"Text","content":"/separate"},{"id":"text-584","heading":"Text","content":"Dmarrer les programmes 16 bits dans un espace mmoire distinct. Ne fonctionne pas sur les systmes 64 bits."},{"id":"text-585","heading":"Text","content":"/shared"},{"id":"text-586","heading":"Text","content":"Dmarrer les programmes 16 bits dans un espace mmoire partag. Ne fonctionne pas sur les systmes 64 bits."},{"id":"text-587","heading":"Text","content":"/low"},{"id":"text-588","heading":"Text","content":"Dmarrer l&amp;#39;application dans la classe de priorit IDLE."},{"id":"text-589","heading":"Text","content":"/normal"},{"id":"text-590","heading":"Text","content":"Dmarrer l&amp;#39;application dans la classe de priorit NORMAL."},{"id":"text-591","heading":"Text","content":"/high"},{"id":"text-592","heading":"Text","content":"Dmarrer l&amp;#39;application dans la classe de priorit HIGH."},{"id":"text-593","heading":"Text","content":"/realtime"},{"id":"text-594","heading":"Text","content":"Dmarrer l&amp;#39;application dans la classe de priorit REALTIME."},{"id":"text-595","heading":"Text","content":"/abovenormal"},{"id":"text-596","heading":"Text","content":"Dmarrer l&amp;#39;application dans la classe de priorit ABOVENORMAL."},{"id":"text-597","heading":"Text","content":"/belownormal"},{"id":"text-598","heading":"Text","content":"Dmarrer l&amp;#39;application dans la classe de priorit BELOWNORMAL."},{"id":"text-599","heading":"Text","content":"/affinity"},{"id":"text-600","heading":"Text","content":"La nouvelle application aura le masque d&amp;#39;affinit de processeur spcifi, exprim en tant que valeur hexadcimale."},{"id":"text-601","heading":"Text","content":"Affinit du processus sous forme de valeur hexadcimale."},{"id":"text-602","heading":"Text","content":"/wait"},{"id":"text-603","heading":"Text","content":"Lancer la commande et attendre qu&amp;#39;elle soit finie pour continuer l&amp;#39;excution. S&amp;#39;il s&amp;#39;agit d&amp;#39;une commande interne ou d&amp;#39;un fichier batch, la fentre reste ouverte aprs l&amp;#39;excution de la commande."},{"id":"text-604","heading":"Text","content":"Commande  excuter."},{"id":"text-605","heading":"Text","content":"Paramtres  passer  la commande."},{"id":"text-606","heading":"Text","content":"Tableau 11: Les paramtres de la commande start. \nLe script 49 appelle une nouvelle instance de lui-mme avec le paramtre foo aprs avoir dfini la variable X, la seconde instance affiche bien la valeur de X alors qu&amp;#39;elle n&amp;#39;a pas dclar X. Notez bien qu&amp;#39;il s&amp;#39;agit d&amp;#39;un nouveau processus, il est donc possible de le quitter avec la commande sortie sans aucun paramtre."},{"id":"text-607","heading":"Text","content":"1.234567.89dix.\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\nensemble &quot;X=bar&quot;\ndébut %~nx0 foo\npause\nsortie /b\n:SecondInstance\nécho %X%\npause\nsortie"},{"id":"text-608","heading":"Text","content":"Premire instance:"},{"id":"text-609","heading":"Text","content":"Seconde instance:"},{"id":"text-610","heading":"Text","content":"Si l&amp;#39;on modifie le script 49 en ajoutant le paramtre /i dans l&#39;ordre début (script 50), alors le nouveau processus sera cr en hritant du contexte original du processus hte dans lequel la variable X n&amp;#39;a pas t dclare."},{"id":"text-611","heading":"Text","content":"1.234567.89dix.\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\nensemble &quot;X=bar&quot;\ndébut /i %~nx0 foo\npause\nsortie /b\n:SecondInstance\nécho %X%\npause\nsortie"},{"id":"text-612","heading":"Text","content":"Premire instance:"},{"id":"text-613","heading":"Text","content":"Seconde instance:"},{"id":"text-614","heading":"Text","content":"Une autre application intressante de la commande début est l&amp;#39;excution parallle  l&amp;#39;aide du paramtre /b comme dans le script 51.\nN.B.: la commande temps libre n&amp;#39;est pas fournie en standard sur tous les systmes Windows. Si vous ne l&amp;#39;avez pas, veuillez supprimer la commande temps libre du script, d-commenter les commandes écho, ping et supprimer le caractre d&amp;#39;chappement dans la commande ping."},{"id":"text-615","heading":"Text","content":"1.234567.89dix.11\n@écho de\nsi &quot;%1&quot;==&quot;foo&quot; goto SecondInstance\ndébut /b %~nx0 foo"},{"id":"text-616","heading":"Text","content":"temps libre /t 10 /nobreak\npause\nsortie /b\n:SecondInstance\nécho %1\nsortie"},{"id":"text-617","heading":"Text","content":"IV-J. La commande setlocal▲"},{"id":"text-618","heading":"Text","content":"Cette commande permet de modifier partiellement les contextes en crant un contexte local. Les variables et leurs valeurs, dans ce nouveau contexte local, sont soumises aux rgles inhrentes  la cration de contexte. L&amp;#39;avantage de cette commande est que l&amp;#39;on peut crer un contexte sans passer par un appel. Ce contexte local ne possde pas d&amp;#39;adresse de retour ni de paramtres d&amp;#39;appel. Seules les variables, et ventuellement les extensions de commande, sont affectes. Ainsi, toutes les variables cres ou modifies dans ce contexte local y sont propres. Cette modification prend fin lorsque l&amp;#39;excution rencontre la commande endlocal. The command setlocal prend aussi les paramtres:"},{"id":"text-619","heading":"Text","content":"enabledelayedexpansion qui active l&amp;#39;expansion retarde;\ndisabledelayedexpansion qui dsactive l&amp;#39;expansion retarde;\nenableextensions qui active les extensions de commande;\ndisableextensions qui dsactive les extensions de commande."},{"id":"text-620","heading":"Text","content":"setlocal [enableextensions[enableextensions[enableextensions[enableextensions|disableextensions][enabledelayedexpansion[enabledelayedexpansion[enabledelayedexpansion[enabledelayedexpansion|disabledelayedexpansion]"},{"id":"text-621","heading":"Text","content":"IV-K. La commande endlocal▲"},{"id":"text-622","heading":"Text","content":"Cette commande termine le contexte local gnr par la commande setlocal correspondante. Plusieurs contextes locaux pouvant tre empils les uns au-dessus des autres, toutes les modifications apportes dans le contexte local qui se termine sont perdues, y compris les modifications apportes par les paramtres de la commande setlocal. The command endlocal ne prend aucun paramtre. Exemple pour setlocal et endlocal avec le script 52:"},{"id":"text-623","heading":"Text","content":"1.234567.8\n@écho de\nsetlocal\nensemble &quot;X=foo&quot;\nécho %X%\nendlocal\nécho %X%\npause\nsortie"},{"id":"text-624","heading":"Text","content":"IV-L. Mise en application des contextes▲"},{"id":"text-625","heading":"Text","content":"1.234567.89dix.111213141516171819202122232425262728293031.3233343536373839404142434445464748.495051.5253545556.57585960.61.6263.64.65.66.67.68.6970.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99100101.102.103.104105106.107.108.109.110.111.112.113.114.115.116.117.118.119120.121.122.123.124.125.126.127.128.129.130.131.132.133.134.135.136.137.138.139.140141.142.143.144.145.146.147.148.149.150.151.152.153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.171.172.173.174.175.176.\n@écho de"},{"id":"text-626","heading":"Text","content":"ensemble &quot;ScriptName=%~nx0&quot;\nensemble &quot;NegNum=false&quot;\nensemble /a &quot;PrefixEnable=0&quot;\nensemble /a &quot;UpperPrefix=0&quot;"},{"id":"text-627","heading":"Text","content":"setlocal"},{"id":"text-628","heading":"Text","content":":ParseArgs\nsi &quot;%~1&quot;==&quot;&quot; goto Init\nsi /i &quot;%~1&quot;==&quot;/?&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-?&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/h&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-h&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/Aidez-moi&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;-help&quot; goto Help\nsi /i &quot;%~1&quot;==&quot;/hex&quot; (\n    ensemble &quot;SInt32=%~2&quot;\n    ensemble /a &quot;SInt32&quot;\n    si errorlevel 1 (\n        décalage /1\n        goto BadSyntax\n)\n    décalage /1\n    décalage /1\n    goto ParseArgs\n)\nsi /i &quot;%~1&quot;==&quot;/p&quot; (\n    ensemble /a &quot;PrefixEnable=1&quot;\n    si %~1 EQU /P ensemble /a &quot;UpperPrefix=1&quot;\n    décalage /1\n    goto ParseArgs\n)\n:BadSyntax\necho."},{"id":"text-629","heading":"Text","content":"net helpmsg 87\nécho [[[[%~1 ]\necho.\nsi ne pas &quot;%~0&quot;==&quot;:BadSyntax&quot; endlocal\nsortie /b 1"},{"id":"text-630","heading":"Text","content":":Init\nsi défini SInt32 goto Exec\n:UnknowError\nappel :BadSyntax /hex\nappel :Help\nendlocal\nsortie /b 2"},{"id":"text-631","heading":"Text","content":":Exec"},{"id":"text-632","heading":"Text","content":"si %SInt32% LSS 0 (\n    ensemble &quot;NegNum=true&quot;\n    ensemble /a &quot;SInt32=~SInt32&quot;\n)"},{"id":"text-633","heading":"Text","content":"ensemble /a &quot;Nibble0= SInt32 %% 16&quot;,&quot;HighOrder0= SInt32 / 16&quot;\nensemble /a &quot;Nibble1=HighOrder0 %% 16&quot;,&quot;HighOrder1=HighOrder0 / 16&quot;\nensemble /a &quot;Nibble2=HighOrder1 %% 16&quot;,&quot;HighOrder2=HighOrder1 / 16&quot;\nensemble /a &quot;Nibble3=HighOrder2 %% 16&quot;,&quot;HighOrder3=HighOrder2 / 16&quot;\nensemble /a &quot;Nibble4=HighOrder3 %% 16&quot;,&quot;HighOrder4=HighOrder3 / 16&quot;\nensemble /a &quot;Nibble5=HighOrder4 %% 16&quot;,&quot;HighOrder5=HighOrder4 / 16&quot;\nensemble /a &quot;Nibble6=HighOrder5 %% 16&quot;\nensemble /a &quot;Nibble7=HighOrder5 / 16&quot;"},{"id":"text-634","heading":"Text","content":"si &quot;%NegNum%&quot;==&quot;true&quot; (\n    ensemble /a &quot;Nibble0=15  Nibble0&quot;\n    ensemble /a &quot;Nibble1=15  Nibble1&quot;\n    ensemble /a &quot;Nibble2=15  Nibble2&quot;\n    ensemble /a &quot;Nibble3=15  Nibble3&quot;\n    ensemble /a &quot;Nibble4=15  Nibble4&quot;\n    ensemble /a &quot;Nibble5=15  Nibble5&quot;\n    ensemble /a &quot;Nibble6=15  Nibble6&quot;\n    ensemble /a &quot;Nibble7=15  Nibble7&quot;\n)"},{"id":"text-635","heading":"Text","content":"si %Nibble0% GTR 9 (\n    si %Nibble0% EQU dix ensemble &quot;Nibble0=A&quot;\n    si %Nibble0% EQU 11 ensemble &quot;Nibble0=B&quot;\n    si %Nibble0% EQU 12 ensemble &quot;Nibble0=C&quot;\n    si %Nibble0% EQU 13 ensemble &quot;Nibble0=D&quot;\n    si %Nibble0% EQU 14 ensemble &quot;Nibble0=E&quot;\n    si %Nibble0% EQU 15 ensemble &quot;Nibble0=F&quot;\n)\nsi %Nibble1% GTR 9 (\n    si %Nibble1% EQU dix ensemble &quot;Nibble1=A&quot;\n    si %Nibble1% EQU 11 ensemble &quot;Nibble1=B&quot;\n    si %Nibble1% EQU 12 ensemble &quot;Nibble1=C&quot;\n    si %Nibble1% EQU 13 ensemble &quot;Nibble1=D&quot;\n    si %Nibble1% EQU 14 ensemble &quot;Nibble1=E&quot;\n    si %Nibble1% EQU 15 ensemble &quot;Nibble1=F&quot;\n)\nsi %Nibble2% GTR 9 (\n    si %Nibble2% EQU dix ensemble &quot;Nibble2=A&quot;\n    si %Nibble2% EQU 11 ensemble &quot;Nibble2=B&quot;\n    si %Nibble2% EQU 12 ensemble &quot;Nibble2=C&quot;\n    si %Nibble2% EQU 13 ensemble &quot;Nibble2=D&quot;\n    si %Nibble2% EQU 14 ensemble &quot;Nibble2=E&quot;\n    si %Nibble2% EQU 15 ensemble &quot;Nibble2=F&quot;\n)\nsi %Nibble3% GTR 9 (\n    si %Nibble3% EQU dix ensemble &quot;Nibble3=A&quot;\n    si %Nibble3% EQU 11 ensemble &quot;Nibble3=B&quot;\n    si %Nibble3% EQU 12 ensemble &quot;Nibble3=C&quot;\n    si %Nibble3% EQU 13 ensemble &quot;Nibble3=D&quot;\n    si %Nibble3% EQU 14 ensemble &quot;Nibble3=E&quot;\n    si %Nibble3% EQU 15 ensemble &quot;Nibble3=F&quot;\n)\nsi %Nibble4% GTR 9 (\n    si %Nibble4% EQU dix ensemble &quot;Nibble4=A&quot;\n    si %Nibble4% EQU 11 ensemble &quot;Nibble4=B&quot;\n    si %Nibble4% EQU 12 ensemble &quot;Nibble4=C&quot;\n    si %Nibble4% EQU 13 ensemble &quot;Nibble4=D&quot;\n    si %Nibble4% EQU 14 ensemble &quot;Nibble4=E&quot;\n    si %Nibble4% EQU 15 ensemble &quot;Nibble4=F&quot;\n)\nsi %Nibble5% GTR 9 (\n    si %Nibble5% EQU dix ensemble &quot;Nibble5=A&quot;\n    si %Nibble5% EQU 11 ensemble &quot;Nibble5=B&quot;\n    si %Nibble5% EQU 12 ensemble &quot;Nibble5=C&quot;\n    si %Nibble5% EQU 13 ensemble &quot;Nibble5=D&quot;\n    si %Nibble5% EQU 14 ensemble &quot;Nibble5=E&quot;\n    si %Nibble5% EQU 15 ensemble &quot;Nibble5=F&quot;\n)\nsi %Nibble6% GTR 9 (\n    si %Nibble6% EQU dix ensemble &quot;Nibble6=A&quot;\n    si %Nibble6% EQU 11 ensemble &quot;Nibble6=B&quot;\n    si %Nibble6% EQU 12 ensemble &quot;Nibble6=C&quot;\n    si %Nibble6% EQU 13 ensemble &quot;Nibble6=D&quot;\n    si %Nibble6% EQU 14 ensemble &quot;Nibble6=E&quot;\n    si %Nibble6% EQU 15 ensemble &quot;Nibble6=F&quot;\n)\nsi %Nibble7% GTR 9 (\n    si %Nibble7% EQU dix ensemble &quot;Nibble7=A&quot;\n    si %Nibble7% EQU 11 ensemble &quot;Nibble7=B&quot;\n    si %Nibble7% EQU 12 ensemble &quot;Nibble7=C&quot;\n    si %Nibble7% EQU 13 ensemble &quot;Nibble7=D&quot;\n    si %Nibble7% EQU 14 ensemble &quot;Nibble7=E&quot;\n    si %Nibble7% EQU 15 ensemble &quot;Nibble7=F&quot;\n)"},{"id":"text-636","heading":"Text","content":"ensemble &quot;LSW=%Nibble3%%Nibble2%%Nibble1%%Nibble0%&quot;"},{"id":"text-637","heading":"Text","content":"ensemble &quot;MSW=%Nibble7%%Nibble6%%Nibble5%%Nibble4%&quot;"},{"id":"text-638","heading":"Text","content":"si %PrefixEnable% EQU 1 (\n    si %UpperPrefix% EQU 1 (\n        écho 0X%MSW%%LSW%\n    ) autre (\n        écho 0x%MSW%%LSW%\n    )\n) autre (\n    écho %MSW%%LSW%\n)\ngoto End"},{"id":"text-639","heading":"Text","content":":Help\necho.\nécho %ScriptName% [/p^[/p^[/p^[/p^|/P]/hex ^&lt;number^&gt;\nécho %ScriptName% -?^\necho.\nécho     /hex    Dfinit le ^&lt;number^&gt; qui doit tre exprim en hexadcimal.\nécho     /p      Dfinit que le prfixe doit tre affich en minuscules.\nécho     /P      Dfinit que le prfixe doit tre affich en majuscules.\necho.    /?      Affiche cette aide.\necho."},{"id":"text-640","heading":"Text","content":":End\nsi ne pas &quot;%~0&quot;==&quot;:Help&quot; endlocal\nsortie /b 0"},{"id":"text-641","heading":"Text","content":"Le script 53 doit tre appel avec des paramtres afin de fonctionner. Ainsi, quand on appelle ce script avec l&amp;#39;un des paramtres suivants: /?, &#8211;, /h, -h, /help ou -help, l&amp;#39;aide est affiche. Si on appelle le script avec les paramtres /hex n (ou n est le nombre voulu), il affiche la reprsentation hexadcimale de ce nombre. Notez galement l&amp;#39;utilisation du paramtre %~nx0 pour dfinir le nom du script, ici, la fonction :Help est appele via un appel au label :UnknowError (la commande exit /b 0 du label :End fournit le saut  l&amp;#39;adresse de retour), %0 aurait t, alors, la chane :Help.\nUn script devrait toujours avoir un squelette similaire  celui du script 53. Pour en connatre la raison, examinons ses diffrentes parties:"},{"id":"text-642","heading":"Text","content":"le script commence par @Écho off pour rendre plus net l&amp;#39;affichage, puis les variables de configuration sont initialises avec leurs valeurs par dfaut, ce qui permet au script de fonctionner mme si ces valeurs ne sont pas modifies par la suite. The command setlocal est utilise pour les cas d&amp;#39;erreur, par exemple si le nombre donn via l&amp;#39;argument /hex dpasse 32 bits. La variable ErrorLevel n&amp;#39;est pas remise  jour suite  une erreur dans une commande interne, ainsi, si l&amp;#39;on appelle le script depuis l&amp;#39;interprteur avec en paramtre un nombre invalide, tous les appels du script qui suivront, mme avec un nombre valide, se termineront sur une erreur. Pensez  utiliser la commande endlocal avant chaque point de sortie du script;\nvient ensuite le label :ParseArgs dans lequel les paramtres d&amp;#39;appel vont tre vrifis, chaque fois qu&amp;#39;un paramtre est trouv, sa valeur est dfinie dans la variable correspondante puis les paramtres d&amp;#39;appel sont dcals avant le retour au label :ParseArgs. Si le paramtre fourni dans la commande d&amp;#39;appel n&amp;#39;est pas trouv, l&amp;#39;excution continue jusqu&amp;#39;au label :BadSyntax qui affiche un message d&amp;#39;erreur et quitte le script avec le code d&amp;#39;erreur 1;\nune fois tous les paramtres lus, l&amp;#39;excution est redirige vers le label :Init, qui a pour fonction de vrifier que les donnes de travail ont bien t fournies dans la commande d&amp;#39;appel. En effet, ce script appel sans paramtre s&amp;#39;excute au moins jusqu&amp;#39;au label :Init. Dans ce label, il convient, en gnral, de modifier les variables de configuration en fonction des valeurs fournies dans la commande d&amp;#39;appel. Si les donnes fournies ne sont pas valides, l&amp;#39;excution continue au label :UnknowError qui, dans notre cas, va afficher o se trouve l&amp;#39;erreur ainsi que l&amp;#39;aide;\nsi les donnes de travail sont valides, l&amp;#39;excution est redirige vers le label :Exec qui va excuter le travail requis puis afficher le rsultat avant d&amp;#39;tre redirige vers le label :End;\nl&#39;étiquette :Help fournit une aide en ligne de commande (c&amp;#39;est toujours utile). Celui-ci se trouvant juste devant le label :End, il peut  la fois tre utilis comme une fonction ou comme une portion de code classique. Notez l&amp;#39;chappement de la commande écho avec le point  la ligne echo. /? Affiche cette aide. sans quoi l&amp;#39;interprteur aurait affich l&amp;#39;aide de la commande écho."},{"id":"text-643","heading":"Text","content":"Les boucles sont gres par la commande pour, elle permettent une grande quantit d&amp;#39;actions sur des fichiers, des rpertoires ou des chanes de caractres. La boucle pour se compose d&amp;#39;un ensemble sur lequel s&amp;#39;opre une commande. le    est pars puis transite au moyen d&amp;#39;une     autour du . La syntaxe de base de la boucle pour est la suivante.\npour %&lt;variable&gt; dans (&lt;ensemble&gt;) faire &lt;ordre&gt;  \nle     est en fait un paramtre de commande propre  la boucle pour. Elle utilise donc la syntaxe et les modificateurs de paramtre de commande (voir section IV.E.1Les modificateurs de paramtres de commande pour plus d&amp;#39;information),  ceci prs que le paramtre est dsign par une lettre et que le caractre % du paramtre doit tre chapp lorsque la boucle est utilise dans un script. Ainsi dans un script, le paramtre %A doit tre utilis avec le caractre d&amp;#39;chappement %, ce qui nous donne la syntaxe %%A. Il faut aussi noter que les paramtres de la boucle pour respectent la casse, ainsi %a est diffrent de %A.\nle    est compos d&amp;#39;une ou plusieurs entres. Si plusieurs entres sont prsentes, elles doivent tre spares par des virgules pour permettre  la boucle de les distinguer correctement. Ce     peut tre:"},{"id":"text-644","heading":"Text","content":"soit des noms de fichiers (avec leurs chemins d&amp;#39;accs s&amp;#39;ils ne sont pas dans le rpertoire courant);\nsoit des chemins d&amp;#39;accs;\nsoit des chanes de caractres."},{"id":"text-645","heading":"Text","content":"Toutes les composantes de l&amp;#39;    sont passes  la     sous forme de chanes de caractres. Seule l&amp;#39;utilisation qui en est faite dans le traitement dtermine s&amp;#39;il s&amp;#39;agit d&amp;#39;une chane de caractres, d&amp;#39;un nom de fichier ou d&amp;#39;un chemin d&amp;#39;accs. Si une chane de l&amp;#39;    contient un ou plusieurs espaces, elle doit tre place entre guillemets. Exemple avec le script 54:"},{"id":"text-646","heading":"Text","content":"1.2345\n@écho de\npour %%A dans (texte) faire écho %%A\npour %%B dans (&quot;%cd%&quot;) faire si exister %%B écho %%B\npause\nsortie /b"},{"id":"text-647","heading":"Text","content":"Si les extensions de commande sont actives, la boucle pour peut prendre un des paramtres de la liste suivante:\nV-A. Les boucles pour chemin d&amp;#39;accs▲"},{"id":"text-648","heading":"Text","content":"Les boucles pour chemin d&amp;#39;accs permettent d&amp;#39;effectuer des recherches de dossiers ou de fichiers. La recherche de dossier s&amp;#39;effectue avec le paramtre /d tandis que la recherche de fichier s&amp;#39;effectue avec le paramtre /r. Leurs syntaxes sont les suivantes:\npour /d %&lt;paramtre&gt; dans ([« ][[[[&lt;chemin_d&amp;#39;accs&gt;]*[\"]) faire &lt;cmd&gt;  \npour /r [\"][[[[&lt;chemin_d&amp;#39;accs&gt;][\"] %&lt;paramtre&gt; dans ([\"]*[\"]) faire &lt;cmd&gt;"},{"id":"text-649","heading":"Text","content":"Options"},{"id":"text-650","heading":"Text","content":"Descriptions"}],"media":{"primary_image":"https://tutos-gameserver.fr/wp-content/uploads/2019/07/logo.png"},"relations":[{"rel":"canonical","href":"https://tutos-gameserver.fr/2019/07/11/apprendre-la-programmation-par-script-batch-un-bon-serveur-minecraft/"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/07/11/apprendre-la-programmation-par-script-batch-un-bon-serveur-minecraft/llm","type":"text/html"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/07/11/apprendre-la-programmation-par-script-batch-un-bon-serveur-minecraft/llm.json","type":"application/json"},{"rel":"llm-manifest","href":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","type":"application/json"}],"http_headers":{"X-LLM-Friendly":"1","X-LLM-Schema":"1.1.0","Content-Security-Policy":"default-src 'none'; img-src * data:; style-src 'unsafe-inline'"},"license":"CC BY-ND 4.0","attribution_required":true,"allow_cors":false}