for loop - iterativos - ¿Cómo hacer un bucle a través de una matriz en lote?
do while matlab ejemplo (5)
Creé una matriz como esta:
set sources[0]="//sources/folder1/"
set sources[1]="//sources/folder2/"
set sources[2]="//sources/folder3/"
set sources[3]="//sources/folder4/"
Ahora quiero iterar a través de esta matriz:
for %%s in (%sources%) do echo %%s
¡No funciona! Parece que el script no entra en el ciclo. ¿Porqué es eso? ¿Cómo puedo iterar entonces?
Esta es una forma:
@echo off
set sources[0]="//sources/folder1/"
set sources[1]="//sources/folder2/"
set sources[2]="//sources/folder3/"
set sources[3]="//sources/folder4/"
for /L %%a in (0,1,3) do call echo %%sources[%%a]%%
Otra alternativa que utiliza define y un bucle que no requiere expansión retrasada:
set Arr[0]=apple
set Arr[1]=banana
set Arr[2]=cherry
set Arr[3]=donut
set "x=0"
:SymLoop
if defined Arr[%x%] (
call echo %%Arr[%x%]%%
set /a "x+=1"
GOTO :SymLoop
)
¡Asegúrese de utilizar "call echo" porque el eco no funcionará a menos que tenga una demora de expansión y uso! en lugar de %%
Si no necesita variables de entorno, haga lo siguiente:
for %%s in ("//sources/folder1/" "//sources/folder2/" "//sources/folder3/" "//sources/folder4/") do echo %%s
Si no sabe cuántos elementos tiene la matriz (que parece ser el caso), puede usar este método:
for /F "tokens=2 delims==" %%s in (''set sources['') do echo %%s
Tenga en cuenta que los elementos se procesarán en orden alfabético , es decir, si tiene más de 9 (o 99, etc.) elementos, el índice debe haber dejado cero (s) en los elementos 1..9 (o 1..99, etc.)
Utilizo esto, lo importante es que la variable tiene solo 1 longitud, como %% a, y no como %% repo:
for %%r in ("https://github.com/patrikx3/gitlist" "https://github.com/patrikx3/gitter" "https://github.com/patrikx3/corifeus" "https://github.com/patrikx3/corifeus-builder" "https://github.com/patrikx3/gitlist-workspace" "https://github.com/patrikx3/onenote" "https://github.com/patrikx3/resume-web") do (
echo %%r
git clone --bare %%r
)