Isto preenche um array e imprime-o
Poderia usar nomes1 nomes2 nomes3, em vez de nomes[1] nomes[2] nomes[3] escrevendo nomes!i! em vez de nomes[!i!]. Produz a matriz através da geração de nomes variáveis. Não existe uma estrutura de array em lote. Mas é tão puro como qualquer estrutura de array, e o preenchimento ou impressão parece exactamente como se preenchia ou imprime um array numa linguagem apropriada (que na realidade tem a estrutura de array!)
@echo off
setlocal enabledelayedexpansion enableextensions
set i=-1
for %%f in (bob, tom, joseph) do (
set /a i=!i!+1
set names[!i!]=%%f
)
set lastindex=!i!
for /L %%f in (0,1,!lastindex!) do (
echo !names[%%f]!
)
a saída-
c:\blah>a
bob
tom
joseph
c:\blah>
Algumas explicações-
O setlocal enabledelayedexpansion enableextensions
com o !var! em vez de %var% é necessário para evitar comportamentos estranhos, de modo a que as variáveis se comportem correctamente quando dentro de um FOR ou IF. É uma estranheza com ficheiros de lotes. Ver set /?
onde isso é mencionado mais adiante.
Isto é o que povoa o array, e é bastante directo para qualquer pessoa que conheça os arrays. Também se poderia fazer names[0]=bob
names[1]=tom
names[2]=joseph
embora uma das belezas de um array seja a capacidade de preencher um array com um loop, que é o que eu fiz aqui.
for %%f in (bob, tom, joseph) do (
set /a i=!i!+1
set names[!i!]=%%f
)
set lastindex=!i!
Isto mostra o array. %%f se o ecoar vai de 0 até ao último índice do array, em passos de 1. assim imprimirá nomes[0] nomes[1] nomes[2]
for /L %%f in (0,1,!lastindex!) do (
echo !names[%%f]!
)