Batch file Can';t打印(回显)batchscript中的特定数组元素

Batch file Can';t打印(回显)batchscript中的特定数组元素,batch-file,cmd,Batch File,Cmd,我在批处理脚本中定义列表,然后在每个列表中打印一个特定的元素,但是得到一个“ECHO is off”输出(如果是空的话) 我试着用FOR循环遍历列表,效果很好 这是我正在尝试运行的代码 @echo off rem --------start of Define list-------- set clist= A B C D E F G H I J K L M N O P Q R S T U V W X Y Z set ilist= X Y Z A B C D E F G H I J K L M

我在批处理脚本中定义列表,然后在每个列表中打印一个特定的元素,但是得到一个“ECHO is off”输出(如果是空的话)

我试着用FOR循环遍历列表,效果很好

这是我正在尝试运行的代码

@echo off

rem --------start of Define list--------
set clist= A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
set ilist= X Y Z A B C D E F G H I J K L M N O P Q R S T U V W 
set testl= 1 2 3 4
rem --------end of Define list--------

echo %clist[1]%
echo %ilist[1]%
echo %testl[1]%
预期产出:

B
Y
2
实际产量:

ECHO is off
ECHO is off
ECHO is off

如果你真的想模拟一个数组,那么它将类似于此

@echo off
setlocal EnableDelayedExpansion

set "clist=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
set /a cnt=0
for %%a in (%clist%) do (
   set "clist[!cnt!]=%%a"
   set /a cnt+=1
)
for /l %%i in (0,1,!cnt!) do echo( clist[%%i]=!clist[%%i]!
您还可以单独回显变量

echo %clist[1]%`

下面是使用所述方法创建类似数组的变量的示例:

@Echo Off&SetLocal EnableDelayedExpansion
Rem------定义列表的开始-------
设置“clist=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z”
设置“ilist=X Y Z A B C D E F G H I J K L M N O P Q R S T U V W”
设置“testl=1 2 3 4”
Rem------定义列表的结尾--------
Rem------数组列表的开始-------
设置“i=0”
设置“clist[!i!]=%clist:=”&Set/A i+=1&Set“clist[!i!]=%
设置“i=0”
设置“ilist[!i!]=%ilist:=”&Set/A i+=1&Set“ilist[!i!]=%”
设置“i=0”
Set“testl[!i!]=%testl:=”&Set/A i+=1&Set“testl[!i!]=%
设置“i=”
Rem------数组列表的结尾--------
Rem------在这里启动您的命令-----
回显%clist[1]%
回显%ilist[1]%
回显%testl[1]%
暂停
Rem------在这里结束您的命令------
EndLocal和GoTo:EOF
如果“数组”成员值的长度始终为1个字符,则只需要一个带有子字符串操作的变量

@echo off

rem --------start of Define list--------
set "clist=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set "ilist=XYZABCDEFGHIJKLMNOPQRSTUVW" 
set "testl=1234"
rem --------end of Define list--------

echo %clist:~1,1%
echo %ilist:~1,1%
echo %testl:~1,1%

rem Show all values in loop
setlocal enableDelayedExpansion
for /l %%N in (0 1 25) do (
  echo clist[%%N] = !clist:~%%N,1!
  echo ilist[%%N] = !ilist:~%%N,1!
  echo testl[%%N] = !testl:~%%N,1!
)

以空格分隔的列表不构成数组。当人们谈论“数组”时,他们通常指的是创建多个变量
var[0]
var[1]
var[2]
等。批脚本中没有任何列表或数组的概念,只有普通的环境变量(如
var
);但是这些元素有时被命名为数组元素(比如
VAR[0]
VAR[1]
,等等),我通常称之为伪数组。在这篇文章中循环一下: