Batch file 如何打印数组元素并使用for循环遍历它们?

Batch file 如何打印数组元素并使用for循环遍历它们?,batch-file,Batch File,我正在处理批处理文件。我有一个数组: 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 /

我正在处理批处理文件。我有一个数组:

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
)
)
  • 如何打印名为
    Base\u list
    的数组

  • 如何遍历此数组


  • 我想,你完全被/L的
    搞糊涂了

    正确的语法是(,)do…/L%%i的

    @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]!
    )
    
    打印:

    (如果索引大于9,并且没有名称以
    base\u list[
    -您不指定)开头的不需要的变量,则假定您不希望保留数字序列

    迭代:

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


    取决于您想要执行的操作-与“打印”相同的条件。

    您的代码中有几个小错误:

    @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]!
       )
    )
    
    • 您尚未初始化计数器变量
    • 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]!
       )
    )
    
    我建议您阅读批处理文件中的阵列管理

    @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]!
       )
    )