2013-08-27 14 views
22

I stworzył tablicę takiego:Jak przechodzić między tablicami wsadowymi?

set sources[0]="\\sources\folder1\" 
set sources[1]="\\sources\folder2\" 
set sources[2]="\\sources\folder3\" 
set sources[3]="\\sources\folder4\" 

Teraz chcę wykonać iterację tej tablicy:

for %%s in (%sources%) do echo %%s 

to nie działa! Wygląda na to, że skrypt nie wchodzi w pętlę. Dlaczego? Jak mogę zatem iterować?

Odpowiedz

26

Jeśli nie wiesz, ile elementów ma tablica (która wydaje się przypadek), można użyć tej metody:

for /F "tokens=2 delims==" %%s in ('set sources[') do echo %%s 

należy pamiętać, że elementy te będą przetwarzane alphabetica Zamawiam, czyli jeśli masz więcej niż 9 (lub 99 itd.) elementów, indeks musi mieć pozostawione zero (y) w elementach 1..9 (lub 1.99, itd.)

12

Jest to jeden sposób:

@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]%% 
+0

to nie zadziała bez opóźnionego rozszerzenia! –

+5

@LS_dev O wy, małej wiary. Spróbuj. :) – foxidrive

+3

Masz rację! Moje przeprosiny! –

17

Jeśli nie potrzebują zmiennych, zrobić:

for %%s in ("\\sources\folder1\" "\\sources\folder2\" "\\sources\folder3\" "\\sources\folder4\") do echo %%s 
+8

To zdecydowanie nie jest pomocne:/Zapytałem, jak wykonać iterację poprzez tablicę, i dałeś odpowiedź: "po prostu nie używaj tablicy!" – aurel

+18

Podałem ci tylko tę sugestię, ponieważ czasami ponownie rozważam swoją architekturę programu w zależności od możliwych rozwiązań. Wyobraź sobie, że stworzyłeś tablicę, aby móc dokonywać iteracji po elementach, a następnie iterowanie bez wcześniejszej tablicy spowoduje, że ta tablica będzie niepotrzebna! –

+0

Zauważ, że spacja między 'in' i' ('jest ważna To nie zadziała:' in ("\\ sources ...)' ale jeśli napiszesz spacją 'in (" \\ sources ...) " praca –

19

Inną alternatywą korzystając zdefiniowane i pętla, która nie wymaga opóźniony rozbudowa:

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 
) 

Należy użyć „call echo” jako echo nie będzie działać, chyba że masz delayedexpansion i używać! zamiast %%

+1

Podoba mi się ta metoda, nieco prostsza –

Powiązane problemy