我正在批处理脚本中定义列表,然后喜欢在每个列表中打印一个特定的元素,但是得到一个'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
答案 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!
)