92 votes

Créer des listes ou des tableaux dans Windows Batch

Puis-je déclarer une liste ou un tableau dans un fichier batch comme ceci :

set list = "A B C D"

Et ensuite je dois les écrire dans un fichier, avec les espaces entre eux :

A

B

C 

D

133voto

Aacini Points 19316

Oui, vous pouvez utiliser les deux voies. Si vous voulez simplement séparer les éléments et les montrer dans des lignes séparées, une liste est plus simple :

set list=A B C D

Une liste de valeurs séparées par un espace peut être facilement traitée par for commandement :

(for %%a in (%list%) do (
   echo %%a
   echo/
)) > theFile.txt

Vous pouvez également créer un tableau de cette manière :

setlocal EnableDelayedExpansion
set n=0
for %%a in (A B C D) do (
   set vector[!n!]=%%a
   set /A n+=1
)

et montrer les éléments du tableau de cette façon :

(for /L %%i in (0,1,3) do (
   echo !vector[%%i]!
   echo/
)) > theFile.txt

Pour plus de détails sur la gestion des tableaux dans les fichiers Batch, voir : Tableaux, listes chaînées et autres structures de données dans cmd.exe (batch) script.

ATTENTION ! Vous devez savoir que tous les caractères inclus dans set sont insérées dans le nom de la variable (à gauche du signe égal), ou dans la valeur de la variable. Par exemple, cette commande :

set list = "A B C D"

créer une variable appelée list (liste-espace) avec la valeur "A B C D" (espace, guillemet, A, etc.). C'est pourquoi il est conseillé de ne jamais insérer d'espace dans les fichiers set des commandes. Si vous devez mettre la valeur entre guillemets, vous devez mettre à la fois le nom de la variable et sa valeur :

set "list=A B C D"

PS - Vous ne devez PAS utiliser ECHO. afin de laisser des lignes vides ! Une alternative est ECHO/ . Pour plus de détails sur ce point, voir : http://www.dostips.com/forum/viewtopic.php?f=3&t=774

45voto

John Zhu Points 319

Parfois, l'élément du tableau peut être très long, à ce moment-là, vous pouvez créer un tableau de cette manière :

set list=a
set list=%list%;b 
set list=%list%;c 
set list=%list%;d

Alors montrez-le :

@echo off
for %%a in (%list%) do ( 
 echo %%a
 echo/
)

21voto

Magoo Points 22274
@echo off
setlocal
set "list=a b c d"
(
 for %%i in (%list%) do (
  echo(%%i
  echo(
 )
)>file.txt

Vous n'avez pas besoin - en fait, vous ne pouvez pas "déclarer" de variables en batch. L'attribution d'une valeur à une variable la crée, et l'attribution d'une chaîne vide la supprime. Tout nom de variable qui n'a pas de valeur assignée A une valeur de chaîne vide. TOUTES les variables sont des chaînes de caractères - SANS exception. Il existe des opérations qui semblent exécuter des fonctions mathématiques (entières), mais elles fonctionnent en convertissant des chaînes de caractères dans les deux sens.

Batch est sensible aux espaces dans les noms de variables, donc votre affectation telle qu'elle est affichée affecterait la chaîne de caractères "A B C D" - y compris les guillemets, à la variable "list " - PAS les guillemets, mais l'espace. La syntaxe set "var=string" est utilisé pour attribuer la valeur string a var alors que set var=string fera la même chose. Presque. Dans le premier cas, tout espace perdu après le guillemet fermant est EXCLU de la valeur attribuée, dans le second, il est INCLUS. Les espaces sont un peu difficiles à voir à l'impression.

ECHO fait écho aux chaînes de caractères. Clasiquement, il est suivi d'un espace - l'un des séparateurs par défaut utilisés par batch (les autres sont TAB, COMMA, SEMICOLON - n'importe lequel d'entre eux fait aussi bien, MAIS TABS est souvent transformé en une séquence d'espace par les éditeurs de texte et les autres ont développé leurs propres bizarreries au fil des ans). Les autres caractères qui suivent le O en ECHO ont été trouvés pour faire précisément ce que l'espace documenté devrait faire. Le DOT est courant. Parenthèse ouverte ( est probablement le plus utile puisque la commande

ECHO.%emptyvalue%

produira un rapport de l ECHO l'état ( ECHO is on/off ) alors que

ECHO(%emptyvalue%

produira une ligne vide.

Le problème avec ECHO( est que le résultat "semble" déséquilibré.

5voto

austin-schick Points 1240

Le type de tableau n'existe pas

Il n'y a pas de type "tableau" dans les fichiers batch, ce qui est à la fois un avantage et un inconvénient, mais il existe des solutions de contournement.

Voici un lien qui offre quelques suggestions pour créer pour vous-même un système similaire à un tableau dans un lot : http://hypftier.de/en/batch-tricks-arrays .

  • Quant à l'écho vers un fichier echo variable >> filepath fonctionne pour renvoyer le contenu d'une variable vers un fichier,
  • y echo. (le point n'est pas une faute de frappe) fonctionne pour renvoyer un caractère de nouvelle ligne.

Je pense que ces deux éléments réunis devraient permettre d'accomplir ce dont vous avez besoin.

Autres lectures

2voto

Odys Points 3273

Mise en place de l'environnement

@echo off
setlocal enabledelayedexpansion

Créer une liste

set items[0]=First
set items[1]=Second
set items[2]=Third
set items[3]=Fourth
set items[4]=Fifth

Sélectionnez dans la liste

%items[1]%

Afficher un élément de la liste

echo %items[1]%

Demander à l'utilisateur un choix (la clé dans la liste) et retourner l'élément correspondant.

set /p choice="Enter choice:
echo !items[%choice%]!

Affichez la liste. Les chiffres magiques entre parenthèses sont : 0 l'indice de départ du tableau. 1 l'étape. 4 le dernier élément. %%i est votre index.

for /L %%i in (0,1,4) do (
    echo !items[%%i]!
)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X