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
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
@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é.
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/
)
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 .
echo variable >> filepath
fonctionne pour l'écho du contenu d'une variable dans un fichier,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.