2015-01-05 132 views
1

我正在處理批處理文件。我有一個數組:如何使用for循環打印數組元素並遍歷它們?

setlocal enabledelayedexpansion 
set Base_list[0]=Base1 
set Base_list[1]=Base2 
set Base_list[2]=Base3 
set Base_list[3]=Base4 
set Base_list[4]=Base5 
set Base_list[5]=Base6 
set Current_Node=Node1 
if "%Current_Node%" == "Node1" (for /l %%a in (0 ,%counter% , %Base_list%) do (
// do some stuff 
) 
) 
  1. 如何打印此陣名爲Base_list

  2. 我該如何迭代這個數組?

回答

0

我想,你是完全for /L混淆。

正確的語法是for /L %%i in (<start>,<step>,<end>) do...

@echo off 
setlocal enabledelayedexpansion 
set Base_list[0]=Base1 
set Base_list[1]=Base2 
set Base_list[2]=Base3 
set Base_list[3]=Base4 
set Base_list[4]=Base5 
set Base_list[5]=Base6 
set Current_Node=Node1 

REM list array: 
set base_list[ 

REM list values only: 
for /f "tokens=2 delims==" %%i in ('set Base_list[') do echo %%i 

REM get size of the array: 
for /f %%i in ('set base_list[ ^|find /c "="') do set count=%%i 
echo size is %count% 
REM subtract one because array starts with 0: 
set /a count-=1 

if "%Current_Node%" == "Node1" for /l %%a in (0,1,%count%) do (
    echo %%a: some stuff with !base_list[%%a]! 
) 
0

打印:

set base_list[ 

(這是假設你不希望保留的數字序列,如果指數> 9,並有與名稱沒有多餘的變量起始base_list[ - 您不指定)

迭代:

for /f "tokens=1*delims==" %%a in ('set base_list[ 2^>nul') do echo %%b 

for /f "tokens=1*delims==" %%a in ('set base_list[ 2^>nul') do echo %%a has value %%b 

取決於挺你想做的事 - 同樣的條件 「打印」。

0

你在你的代碼中的幾個小錯誤:

  • 您還沒有初始化的計數器變量。
  • 的FOR命令是略有不同的格式
  • 註釋通過REM命令插入,而不是//

這是你的代碼的正確版本:

@echo off 
setlocal enabledelayedexpansion 
set Base_list[0]=Base1 
set Base_list[1]=Base2 
set Base_list[2]=Base3 
set Base_list[3]=Base4 
set Base_list[4]=Base5 
set Base_list[5]=Base6 
set Current_Node=Node1 

rem Explicitly set the counter: 
set counter=5 

if "%Current_Node%" == "Node1" (
    for /l %%a in (0 , 1, %counter%) do (
    rem do some stuff 
    echo Element %%a in Base_list array is: !Base_list[%%a]! 
    ) 
) 

然而,這代碼可以用更簡單的方式編寫:

@echo off 
setlocal enabledelayedexpansion 

rem Create the array via elements placed in a FOR command 
rem at same time, generate the counter: 
set counter=0 
for %%a in (Base1 Base2 Base3 Base4 Base5 Base6) do (
    set Base_list[!counter!]=%%a 
    set /A counter+=1 
) 

rem Adjust the counter because the array is zero-based: 
set /A counter-=1 

set Current_Node=Node1 

if "%Current_Node%" == "Node1" (
    for /l %%a in (0 , 1, %counter%) do (
    rem do some stuff 
    echo Element %%a in Base_list array is: !Base_list[%%a]! 
    ) 
) 

我建議你閱讀this post批處理文件中的數組管理。