Au fur et à mesure que vous gagnerez en expérience avec les fichiers batch, vous constaterez probablement que vous devez manipuler des chaînes de texte. Vous devrez peut-être demander à un utilisateur un nom ou un mot de passe, traiter une liste de fichiers ou rechercher un nom dans une liste téléphonique. Ce sont tous des exemples de traitement de chaînes : la manipulation de texte lisible.

 

TCC inclut plusieurs fonctionnalités qui facilitent le traitement des chaînes. Par exemple, vous pouvez utiliser le CONTRIBUTION, MSGBOX, BOÎTE DE REQUÊTE commandes pour la saisie de l'utilisateur ; le ÉCHO et ÉCHOERR, ECHOS et ECHOSERR, ÉCRAN, SCRPUT, VSCRPUT commandes de sortie ; et le POUR commande ou @FILEREEAD fonction pour parcourir les lignes d’un fichier. En outre, fonctions variables offrir une large gamme de gestion des chaînes et des caractères capacités.

 

Par exemple, supposons que vous ayez besoin d'un fichier de commandes qui demandera à un utilisateur un nom, divisera le nom en un prénom et un nom de famille, puis exécutera un hypothétique programme de connexion. LOGIN attend la syntaxe /F:premier /L:dernier avec le prénom et le nom en majuscules et aucun des deux noms ne dépasse 8 caractères. Voici une façon d’écrire un tel fichier batch :

 

@ Echo off

setlocal

unalias *

input Saisissez votre nom (pas d'initiales) : %%name

 

définir en premier=%@word[0,%name]

définir flen=%@len[%first]

définir dernier=%@word[1,%name]

définir llen=%@len[%last]

 

si %flen gt 8 .ou. %llen GT 8 alors

  echo Nom ou prénom trop long

  quitter

fin

 

connexion /F:%@upper[%first] /L:%@upper[%last]

endlocal

 

Le plus setlocal La commande au début de ce fichier batch enregistre l’environnement et les alias. Puis le UNALIAS * La commande supprime tous les alias existants afin qu'ils n'interfèrent pas avec le comportement des commandes dans le reste du fichier batch. Le premier bloc de lignes se termine par un CONTRIBUTION commande qui demande à l'utilisateur de saisir un nom. L'entrée de l'utilisateur est stockée dans la variable d'environnement NAME.

 

Le deuxième bloc de lignes extrait le prénom et le nom de l'utilisateur de la variable NAME et calcule la longueur de chacun. Il stocke le prénom et le nom, ainsi que la longueur de chacun, dans des variables d'environnement supplémentaires. Notez que le @MOT la fonction numérote le premier mot par 0 et non par 1.

 

Le plus IFF La commande dans le troisième bloc de lignes teste la longueur du prénom et du nom. Si l'un ou l'autre comporte plus de 8 caractères, le fichier batch affiche un message d'erreur et se termine. (QUERYBOX peut limiter la longueur du texte saisi plus simplement grâce à son /L changer. Nous avons utilisé une méthode légèrement plus lourde ci-dessus afin de démontrer l'utilisation des fonctions de chaîne dans les fichiers batch.)

 

Enfin, dans le dernier bloc, le fichier batch exécute le programme LOGIN avec les paramètres appropriés, puis utilise le ENDLOCAL commande pour restaurer l’environnement d’origine et la liste d’alias. Dans le même temps, ENDLOCAL supprime les variables temporaires utilisées par le fichier batch (NAME, FIRST, FLEN, etc.).

 

Lorsque vous traitez des chaînes, vous devez également éviter certains pièges courants. Le plus important concerne la gestion des caractères spéciaux.

 

Supposons que vous ayez un fichier batch avec ces deux commandes, qui acceptent simplement une chaîne et l'affichent :

 

input Saisissez une chaîne : %%str

écho %str

 

Ces lignes semblent sûres, mais que se passe-t-il si l'utilisateur entre la chaîne "some > none" (sans les guillemets). Une fois la chaîne placée dans la variable STR, la deuxième ligne devient

 

faire écho à certains > aucun

 

Le plus ">" est un redirection symbole, donc la ligne fait écho à la chaîne "some" et la redirige vers un fichier appelé NONE - probablement pas ce à quoi vous vous attendiez. Vous pouvez essayer d'utiliser double citation pour éviter ce genre de problème, mais cela ne fonctionnera pas vraiment. Si vous utilisez des guillemets inverses (ECHO `%STR`), la commande fera écho à la chaîne de quatre caractères %STR. Les noms des variables d'environnement ne sont pas développés lorsqu'ils sont entre guillemets arrière.

 

Si vous utilisez des guillemets doubles (ECHO "%STR"), la chaîne saisie par l'utilisateur s'affichera correctement, tout comme les guillemets doubles. Avec des guillemets doubles, le résultat ressemblerait à ceci :

 

"certains > aucun"

 

Comme vous pouvez l'imaginer, ce type de problème devient beaucoup plus difficile si vous essayez de traiter le texte d'un fichier. Les caractères spéciaux dans le texte peuvent provoquer toutes sortes de confusion dans vos fichiers batch. Le texte contenant des guillemets arrière, des guillemets doubles ou des symboles de redirection peut être pratiquement impossible à gérer correctement.

 

Une façon de surmonter ces problèmes potentiels consiste à utiliser le SETDOS /X commande pour désactiver temporairement les symboles de redirection et autres caractères spéciaux. Le fichier batch de deux lignes ci-dessus aurait beaucoup plus de chances de produire les résultats attendus s'il était réécrit de cette façon :

 

setdos /x-15678

input Saisissez une chaîne : %%str

écho %str

setdos /x0

 

Le plus la première ligne désactive le traitement des alias et désactive plusieurs symboles spéciaux, notamment le séparateur de commandes et tous les symboles de redirection. Une fois la chaîne traitée, la dernière ligne réactive les fonctionnalités qui ont été désactivées dans la première ligne.

 

Si vous avez besoin de capacités avancées de traitement de chaînes au-delà de celles fournies par TCC, vous voudrez peut-être envisager d'utiliser le Lua, Perl, Python, REXXou Rubi langues. Nos produits peuvent exécuter des programmes Lua, Perl, Python, REXX et Ruby en interne, et prennent également en charge l'évaluation d'expressions Perl, Python, REXX et Ruby individuelles en interne.