2015-01-05 87 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批处理文件中的数组管理。