无法在批处理脚本中打印(回显)特定的数组元素

时间:2019-10-15 11:38:53

标签: 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 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

3 个答案:

答案 0 :(得分:1)

下面是一个使用here描述的方法的示例,用于创建类似变量的数组:

@Echo Off & SetLocal EnableDelayedExpansion

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 --------

Rem ------- Start of array lists -------
Set "i=0"
Set "clist[!i!]=%clist: =" & Set /A i+=1 & Set "clist[!i!]=%"
Set "i=0"
Set "ilist[!i!]=%ilist: =" & Set /A i+=1 & Set "ilist[!i!]=%"
Set "i=0"
Set "testl[!i!]=%testl: ="& Set /A i+=1 & Set "testl[!i!]=%"
Set "i="
Rem -------- End of array lists --------

Rem ----- Start your commands here -----
Echo %clist[1]%
Echo %ilist[1]%
Echo %testl[1]%
Pause
Rem ------ End your commands here ------

EndLocal & GoTo :EOF

答案 1 :(得分:0)

如果您的意图确实是模仿一个数组,那么它将类似于此。

@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]%`

答案 2 :(得分:0)

如果“数组”成员值始终为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!
)