Chaque fois que vous tapez quelque chose sur la ligne de commande et que vous appuyez sur la touche Entrée, ou que vous incluez une commande dans un fichier batch, vous transmettez une commande à TCCqui doit déterminer comment l'exécuter. Si vous comprenez le processus général utilisé, vous serez en mesure d'utiliser au mieux les commandes. La compréhension de ces étapes peut s'avérer particulièrement utile lorsque vous travaillez avec des alias complexes ou des commandes de fichiers batch.
TCC passe par plusieurs étapes lorsqu'il analyse une ligne de commande. Avant de commencer, il écrit toute la ligne de commande (qui peut contenir plusieurs commandes) dans le fichier d'historique si l'enregistrement de l'historique a été activé (avec la commande LOG /H ) et si la commande ne provient pas d'un fichier batch. La première commande est alors isolée pour être traitée. Les étapes suivantes décrivent le traitement de base requis pour chaque commande. Au cours de ce traitement, des tâches d'analyse supplémentaires peuvent être déclenchées comme indiqué et certaines étapes peuvent être répétées plusieurs fois.
TCC commence par diviser la commande en une commande nom et une commande queue. Le nom de la commande est le premier mot de la commande et la queue est tout ce qui suit le nom de la commande. Par exemple, dans la ligne de commande
dir *.txt /2/p/v
le nom de la commande est dir et la queue de la commande est "*.txt /2/p/v". Dans certains cas, l'analyseur syntaxique pourra comprendre une syntaxe incorrecte telle quedir/w, mais il doit toujours y avoir au moins un espace entre le nom de la commande et ses paramètres.
Suivant, TCC essaie de faire correspondre le nom de la commande à sa liste d'alias. S'il trouve une correspondance entre le nom de la commande et l'un des alias que vous avez définis, il remplace le nom de la commande par le contenu de l'alias. Cette substitution est effectuée en interne et n'est normalement pas visible ; toutefois, vous pouvez afficher une ligne de commande avec les alias développés en appuyant sur Ctrl-W après avoir saisi la commande à l'invite.
Si l'alias comprend des paramètres (%1, %2, etc.), les valeurs des paramètres sont complétées à partir du texte de la ligne de commande, et tous les paramètres utilisés dans ce processus sont supprimés de la ligne de commande. Leprocessus consistant à remplacer un nom de commande faisant référence à un alias par le contenu de l'alias et à remplir les paramètres de l'alias est appeléexpansion de l'alias .
Cette expansion d'un alias crée un nouveau nom de commande : le premier mot de l'alias. Ce nouveau nom de commande est à nouveau comparé à la liste des alias et, si une correspondance est trouvée, le contenu du nouvel alias est développé de la même manière que le premier alias. Ce processus, appeléexpansionimbriquée alias , se poursuit jusqu'à ce que le nom de la commande ne fasse plus référence à un alias.
L'étape suivante consiste à localiser les paramètres du fichier batch, les variables d'environnement, les variables internes ou les fonctions variables de la commande et à les remplacer par leur valeur (voir "Environnement : Variables et fonctions"). Ce processus est appeléexpansion de la variable et n'est normalement pas visible. Toutefois, vous pouvez visualiser une ligne de commande développée en appuyant sur Ctrl-X après avoir saisi la commande à l'invite.
Le processus d'expansion des variables est modifié pour certaines commandes internes, telles que EXCEPT, IF et GLOBAL. Ces commandes sont toujours suivies d'une autre commande, de sorte que l'expansion des variables s'effectue séparément pour la commande d'origine et la commande qui la suit.
Une fois l'expansion des variables terminée, TCC essaie ensuite de faire correspondre le nom de la commande résultante avec sa liste de fonctions de bibliothèque, de commandes de plugin ou de commandes internes. S'il n'y parvient pas, il sait qu'il devra rechercher un fichier batch ou un programme externe pour exécuter votre commande.
Vous pouvez spécifier un plugin particulier à exécuter en faisant précéder le nom de la fonction, de la variable ou de la commande du nom du plugin et d'un $. Par exemple :
echo %_myplugin$variable
echo %@myplugin$func[abc]
myplugin$mycommand
Lorsque tous les alias et variables d'environnement ont été développés, TCC affichera la commande complète à l'écran (si l'écho de la ligne de commande a été activé) et l'écrira dans le fichier journal (si l'enregistrement des commandes a été activé).
Avant de pouvoir exécuter votre commande, TCC doit analyser la queue de la commande pour voir si elle inclut une redirection ou une conduite. Si c'est le cas, les commutateurs internes appropriés sont activés pour envoyer la sortie vers un autre périphérique ou vers un fichier au lieu de l'afficher à l'écran. Un deuxième processus est lancé à ce stade, si nécessaire, pour recevoir les données de sortie.
À cestade, tous les caractères d'échappementrestants sont traités. Cependant, il se peut que ce traitement ait déjà eu lieu dans certaines fonctions variables (telles que @IF) susceptibles de transmettre des chaînes échappées dans leurs paramètres. Si vous faites référence à l'une de ces fonctions dans un ECHO ou une commande similaire, vous devez échapper deux fois ("^^") ou utiliser SETDOS /X pour éviter une évaluation prématurée. Testez soigneusement ces situations pour vous assurer que les résultats sont conformes à vos attentes.
Enfin, il est temps d'exécuter la commande. TCC Le système cherchera d' abord un nom de commande plugin correspondant ; s'il n'existe pas, il essaiera alors de faire correspondre une commande interne. Dans le cas contraire, TCC recherche un fichier exécutable (.EXE), un fichier batch ou un fichier avec une extension exécutable qui correspond au nom de la commande (voir la description détaillée de cette recherche dans Fichiers exécutables et recherches de fichiers).
Si le premier argument d'une ligne de commande est au format "env_var=valeur options de commande" (et que env_var=valeur ne correspond pas à une commande externe), TCC définira la variable d'environnement spécifiée à la valeur, exécutera la commande, puis supprimera la variable.
Une fois que la commande interne ou le programme externe s'est terminé, TCC enregistre le résultat ou le code de sortie généré par la commande, nettoie toute redirection spécifiée, puis retourne à la ligne de commande d'origine pour récupérer la commande suivante. Lorsque toutes les commandes d'une ligne de commande sont terminées, la ligne suivante est lue dans le fichier batch en cours ou, si aucun fichier batch n'est actif, l'invite s'affiche.
Note : Vous pouvez désactiver et réactiver plusieurs parties de l'analyse des commandes (par exemple l'expansion des alias, l'expansion des variables et la redirection) à l'aide de la commande SETDOS /X.