Expressions conditionnelles

Les commandes DO (lorsqu'il est utilisé avec le mot clé UNTIL ou WHILE), IF, IFF/ELSEIFF, et la fonction variable @SI évaluer un expression conditionnelle, et effectuez une action différente selon que le expression est vrai. Le INTERRUPTEUR La commande teste l’égalité des paires de valeurs. La plupart exemples ci-dessous, utilisez le IF commande, mais les expressions conditionnelles peuvent également être utilisées dans les autres cas ci-dessus.

 

Une expression conditionnelle peut être l’une des suivantes, comme décrit ci-dessous :

 

Un pasexpression relationnelle
Un pastest d'état
Un pasexpression logique

 

Expression relationnelle

 

Une expression relationnelle compare deux chaînes de caractères, en utilisant l'une des opérateurs relationnels dans le tableau ci-dessous. Chacune de ces deux chaînes de caractères peut contenir du texte littéral, des variables d'environnement et internes, ainsi que des fonctions variables, y compris celles définies par l'utilisateur, dans n'importe quelle combinaison. Notez que les guillemets doubles sont significatifs.

 

Comparaison numérique et chaîne

 

Lors de la comparaison des deux chaînes de caractères, une comparaison numérique ou de chaîne sera utilisée. Une comparaison numérique traite les chaînes comme des valeurs numériques et les teste arithmétiquement. Une comparaison de chaînes traite les chaînes comme du texte. L'analyseur utilise les règles décrites pour le @NUMÉRIQUE fonction pour déterminer si les chaînes sont numériques ou non, et seulement si les deux sont numériques, une comparaison numérique est effectuée. Si l'une des valeurs n'est pas numérique, une comparaison de chaînes est utilisée. Pour forcer une comparaison de chaînes lorsque les deux valeurs peuvent être numériques, utilisez des guillemets doubles autour des valeurs que vous testez, comme indiqué ci-dessous. Étant donné que les guillemets ne sont pas un caractère numérique, une comparaison de chaînes est effectuée. La comparaison numérique ne peut pas être forcée. Pour comparer numériquement des nombres hexadécimaux, vous devez les convertir en nombres décimaux en utilisant @CONVERTIR. Cela n'est pas nécessaire si les deux ont la même longueur : la comparaison de chaînes et la comparaison numérique donnent le même résultat.

 

L'exemple ci-dessous montre la différence entre les comparaisons numériques et de chaînes, comme indiqué dans le tableau ci-dessous. Numériquement, 2 est plus petit, mais en tant que chaîne, il est « plus grand » car son premier chiffre est plus grand que le premier chiffre de 19. Ainsi, le premier de ces chiffres conditions sera vrai, et le second sera faux :

 

expression

Plus-value

type de comparaison

2 litres 19

oui

numérique

"2" à "19"

non

un magnifique

 

Formats d'expression relationnelle

 

Le format d'une expression relationnelle est l'un des

 

nombre1 opérateur relationnel nombre2

string1 opérateur relationnel string2

 

Remarque: La syntaxe correcte nécessite un espace à la fois avant et après opérateur pour le séparer de ses opérandes. Des constructions couramment vues telles que %a==b peuvent fonctionner ou non en fonction des paramètres spécifiques, mais ils sont n'allons jamais recommandé.

 

Opérateurs relationnels

 

opérateur

comparaison numérique : expression is oui if

comparaison de chaînes : expression is vrai si, en ignorant la casse des caractères :

EQ or ==

nombre1 équivaut à nombre2

string1 équivaut à string2

NE or !=

nombre1 n'est pas égal nombre2

string1 n'est pas égal string2

LT

nombre1 est inférieur à nombre2

string1 précède alphabétiquement string2

LE

nombre1 est inférieur ou égal à nombre2

string1 précède ou est égal par ordre alphabétique à string2

GE

nombre1 est supérieur ou égal à nombre2

string1 réussit par ordre alphabétique ou est égal à string2

GT

nombre1 est supérieure nombre2

string1 réussit par ordre alphabétique string2

EQC

testé sous forme de chaînes è

string1 est identique à string2, y compris la casse des caractères

=~

test d'expression régulière

string1 correspond à l'expression régulière dans string2

!~

test d'expression régulière

string1 ne correspond pas à l'expression régulière dans string2

 

Les différences de casse sont ignorées dans les comparaisons de chaînes (sauf par EQC). Si deux chaînes commencent par le même texte mais que l’une est plus courte, la chaîne la plus courte est considérée comme précédant (être inférieure) à la plus longue. Par exemple, "a" est inférieur à "abc" et "hello_there" est supérieur à "hello".

 

Lorsque vous comparez des chaînes de texte, vous devrez peut-être placer les paramètres entre guillemets doubles afin d'éviter les erreurs de syntaxe qui peuvent survenir si l'une des valeurs de paramètre est vide (par exemple, en raison d'une variable d'environnement à laquelle aucune valeur n'a été affectée). Cette technique ne fonctionnera pas pour les comparaisons numériques, car les guillemets forceront une comparaison de chaînes. Ainsi, avec les tests numériques, vous devez être sûr que toutes les variables reçoivent des valeurs avant d'effectuer le test.

 

Afin de maintenir la compatibilité avec CMD, TCC reconnaît les noms supplémentaires suivants pour les conditions :

 

CMD

TCC

EQL or ÉQU

EQ

NEQ

NE

LSS

LT

LEQ

LE

GTR

GT

GEQ

GE

 

Variables internes et fonctions variables sont très puissants lorsqu’ils sont combinés avec des comparaisons de chaînes et numériques. Ils vous permettent de tester l'état de votre système, les caractéristiques d'un fichier, des informations de date et d'heure, ou encore le résultat d'un calcul. Vous souhaiterez peut-être examiner les variables et les fonctions des variables pour déterminer la meilleure façon de configurer un test de condition.

 

Test d'état

 

Ces conditions testent le système d'exploitation, le système de fichiers ou TCC statut. En plus des tests ci-dessous, il existe de nombreuses variables internes et fonctions variables qui vous permettent de tester l'état de nombreuses autres parties du système.

 

Dans les descriptions ci-dessous des différents tests d'état, les tests d'état sont vrais si et seulement si la condition spécifiée est vraie.

 

DÉFINI variable

Si une variable existe dans l'environnement, l'expression est vraie. Cela équivaut à tester si la variable n'est pas vide ou non.




Remarque: Variables GOSUB, variables de tableauet variables internes n'existent pas dans l'environnement, ils échouent donc toujours au test DEFINED.



NIVEAU D'ERREUR [opérateur relationnel] n

Ce test récupère le code de sortie du programme externe précédent. Par convention, les programmes renvoient un code de sortie de 0 lorsqu'ils réussissent et un nombre différent de zéro pour indiquer une erreur. Le opérateur relationnel peut être l’un de ceux répertoriés ci-dessus (par exemple, EQ, GT). Si aucun opérateur n'est spécifié, la valeur par défaut est GE. La comparaison se fait numériquement.




Tous les programmes ne renvoient pas un code de sortie explicite. Pour les programmes qui ne le font pas, le comportement de ERRORLEVEL n'est pas défini.



EXISTER nom de fichier

Si le nom de fichier correspond à un fichier qui existe, l'expression est vraie. Vous pouvez utiliser des caractères génériques dans le nom de fichier, auquel cas l'expression est vraie s'il existe un fichier correspondant au nom générique. le nom de fichier peut inclure un chemin absolu ou relatif.




AVERTISSEMENT : sous Windows, l'expression sera vraie s'il existe un fichier ou un répertoire nommé filename. Utilisez plutôt ISFILE ou ISDIR.




Le nom de fichier spécial NUL est couramment utilisé dans les fichiers batch CMD pour tester l'existence d'un répertoire. L'expression existe xxx\NUL n'est vraie que si xxx est un répertoire.



ISALIAS alias

Si aliasname est défini comme alias, l’expression est vraie.



ISAPP nom de l'application

Si appname correspond au nom d’une application en cours d’exécution, l’expression est vraie. Pour faire correspondre une application spécifique, vous devez saisir le chemin d'accès complet de l'application. Les noms partiels et les caractères génériques produiront des résultats peu fiables. Les formes de nom de fichier courtes et longues du nom seront vérifiées (voir Recherches de fichiers LFN pour plus de détails sur la correspondance entre les noms de fichiers courts et longs).


Ce test peut nécessiter le privilège DEBUG.



ISBATCH nom de fichier

Si le nom de fichier spécifié est un fichier batch, l'expression est vraie.



ISDIR chemin

DIREXISTE chemin

 

Si le répertoire spécifié par path existe, l'expression est vraie. Le chemin peut être absolu ou relatif. DIREXIST peut être utilisé comme synonyme d’ISDIR.



ISFILE nom de fichier

Si le nom de fichier correspond à un fichier qui existe, l'expression est vraie. Vous pouvez utiliser des caractères génériques dans le nom de fichier, auquel cas l'expression est vraie s'il existe un fichier correspondant au nom générique. ISFILE correspond uniquement aux fichiers, pas aux répertoires.



ISFONCTION prénom

Si le nom de la fonction définie par l'utilisateur est chargé, l'expression est vraie.



ISINTERNE commander

Si command est une commande interne active, l’expression est vraie. Les commandes peuvent être activées et désactivées avec le RÉGLAGES /Je commande.



ISLABEL étiquette

Si l'étiquette existe dans le fichier batch actuel, l'expression est vraie. Les étiquettes peuvent comporter un ou plusieurs mots. Notez que ce test n'a rien à voir avec les étiquettes de partition de disque.



BIBLIOTHÈQUE prénom

Si le nom est une fonction de bibliothèque, l'expression est vraie



ISPLUGIN prénom

Si le nom est un plug-in variable, fonction ou commande, l'expression est vraie.



LISIBLE nom de fichier

Si le nom du fichier est lisible, l'expression est vraie.



LIEN ISSYMIEN nom de fichier

Si le fichier est un lien symbolique, l'expression est vraie.



EST VISIBLE « Titre »

Si la fenêtre spécifiée est visible, l'expression est vraie. (Cela signifie que Windows a défini l'indicateur de visibilité ; cela ne signifie pas que la fenêtre est nécessairement visible sur le bureau.)



EST ÉCRIVABLE nom de fichier

Si le nom du fichier est accessible en écriture, l'expression est vraie.



ISHUNG "titre"

Si la fenêtre spécifiée ne répond pas, l'expression est vraie.

 

BRANCHER module

Si le module plugin est chargé, l'expression est vraie. N'incluez pas d'extension (c'est-à-dire ".dll") pour le nom du module.

 

Expressions logiques

 

Une expression logique est l’une des suivantes :

 

 Un pas        a expression relationnelle

 Un pas        a test d'état

 Un pas        le opérateur logique unaire ne pas (ou !) suivi d'un expression logique

 Un pas        deux expression logiqueest relié par un opérateur logique binaire

 

Les opérateurs logiques

 

opérateur

type

usage

la valeur est VRAIE si

ne pas

unaire

ne pas cond

cond c'est faux.

.ET.

binaire

condition1 .ET. condition2

tous les deux condition1 et condition2 sont vrai.

.OU.

binaire

condition1 .OU. condition2

au moins un des condition1 et condition2 est vrai.

.XOR.

binaire

condition1 .XOR. condition2

un condition1 et condition2 est VRAI et l’autre est FAUX.

 

Cet exemple exécute un programme appelé CHARGEMENT DE DONNÉES si aujourd'hui nous sommes lundi ou mardi (saisissez-le sur une seule ligne) :

 

si "%_dow" == "Lun" .ou. "%_dow" == Chargement des données "Mar"

 

Les conditions de test sont toujours balayées de gauche à droite -- il y a pas d'ordre de préséance implicite, comme c'est le cas dans certains langages de programmation. Vous pouvez cependant forcer un ordre spécifique de tests en regroupant les conditions entre parenthèses, par exemple (saisissez ceci sur une seule ligne) :

 

if (%a == 1 .or. (%b == 2 .and. %c == 3)) fait écho à quelque chose

 

Combiner des expressions logiques

 

Parenthèses ne peut être utilisé que lorsque la partie du expression entre parenthèses contient au moins un des opérateurs logiques binaires .et., .ou.ou .xor.. Les parenthèses sur une expression simple qui ne combine pas deux ou plusieurs tests seront considérées comme faisant partie de la chaîne à tester et feront probablement échouer le test. Par exemple, le premier de ces tests est FAUX, le second est VRAI:

 

(une == une)

(a == a .et. b == b)

 

Les parenthèses peuvent être imbriquées.

 

Exemples

 

Ce fragment de fichier batch exécute un programme appelé HEBDOMADAIRE si aujourd'hui c'est lundi :

 

si "%_dow" == "mon" hebdomadaire

 

Ce fragment de fichier batch teste une valeur de chaîne :

 

input "Entrez votre sélection : " %%cmd

si "%cmd" == "WP" allez sur wordproc

si "%cmd" NE "GRAPHICS" allez à badentry

 

Cet exemple appelle GO.BTM si les deux premiers caractères du fichier MON FICHIER GO:

 

si "%@left[2,%@line[myfile,0]]" == "GO" appelez go.btm

 

Le premier fragment de fichier batch ci-dessous teste l'existence de A:\JAN.DOC avant de le copier sur le lecteur C (cela évite un message d'erreur si le fichier n'existe pas) :

 

si isfile a:\jan.doc copie a:\jan.doc c:\

 

Cet exemple teste le code de sortie du programme précédent et arrête tout traitement des fichiers batch si une erreur survient :

 

si niveau d'erreur == 0, allez au succès

echo "Erreur externe ; le fichier batch se termine !"

annuler