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
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
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
@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é.
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 .
echo variable >> filepath
fonctionne pour renvoyer le contenu d'une variable vers un fichier,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.
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 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.