web-dev-qa-db-fra.com

Créer une liste ou des tableaux dans un lot Windows

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

set list = "A B C D"

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

A

B

C 

D
60
user2533789

Oui, vous pouvez utiliser les deux manières. Si vous souhaitez simplement séparer les éléments et les afficher sur 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 la commande for:

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

Vous pouvez aussi créer un tableau de cette façon:

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

et montrez 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 d'informations sur la gestion des tableaux dans les fichiers Batch, voir: Tableaux, listes chaînées et autres structures de données dans le script cmd.exe (batch)

ATTENTION! Vous devez savoir que tous les caractères inclus dans la commande set sont insérés 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éez une variable appelée list (espace liste) avec la valeur "A B C D" (espace, guillemet, A, etc.). Pour cette raison, il est judicieux de ne jamais insérer d'espaces dans les commandes set. Si vous devez inclure la valeur entre guillemets, vous devez inclure 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 vierges! Une alternative est ECHO/. Pour plus de détails sur ce point, voir: http://www.dostips.com/forum/viewtopic.php?f=3&t=774

102
Aacini
@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" des variables par lot. L'affectation 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 la valeur d'une chaîne vide. TOUTES les variables sont des chaînes - SANS exception. Il existe des opérations qui semblent exécuter des fonctions mathématiques (entières), mais elles fonctionnent en effectuant une conversion en arrière à partir de chaînes.

Batch étant sensible aux espaces dans les noms de variable, votre affectation affectée affectera la chaîne "A B C D" - y compris les guillemets, à la variable "list " - SANS les guillemets, mais également les espaces. La syntaxe set "var=string" est utilisée pour attribuer la valeur string à var alors que set var=string fera la même chose. Presque. Dans le premier cas, tous les espaces en fin de ligne après le devis de clôture sont EXCLUS de la valeur attribuée, dans le second, ils sont INCLUS. Les espaces sont un peu difficiles à voir lorsqu'ils sont imprimés.

ECHO fait écho aux chaînes. En général, il est suivi d’un espace - l’un des séparateurs par défaut utilisé par batch (les autres sont TAB, COMMA, SEMICOLON) - l’un d’entre eux le fait aussi, MAIS TABS est souvent transformé en espace par les éditeurs de texte et d’autres personnages suivant la O dans ECHO ont été trouvés pour faire exactement ce que le document SPACE devrait faire. DOT est commun. Open-parenthesis ( est probablement le plus utile car la commande

ECHO.%emptyvalue%

produira un rapport sur l'état ECHO (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é.

16
Magoo

Parfois, l'élément de tableau peut être très long, vous pouvez alors créer un tableau de cette façon:

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

Puis montrez-le:

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

Le type de tableau n'existe pas

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

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

  • En ce qui concerne l'écho dans un fichier echo variable >> filepath fonctionne pour l'écho du contenu d'une variable dans un fichier,
  • et echo. (le point n'est pas une faute de frappe) fonctionne pour faire écho à un caractère de nouvelle ligne.

Je pense que ces deux ensemble devraient fonctionner pour accomplir ce dont vous avez besoin.

Lectures complémentaires

0
Schickmeister