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