如何在批处理文件中打印数组中特定项的值,而不进行循环?

时间:2017-08-03 18:21:42

标签: arrays batch-file

我查看了很多关于批处理数组的信息,但几乎所有这些都涉及遍历列表。有没有办法在没有的情况下使用循环直接在特定索引上打印值?

以下是我尝试做的一个例子:

@echo off
setlocal enabledelayedexpansion
set ITEM_LIST=(item1 item2 item3 item4 item5)

echo !ITEM_LIST[1]!
echo %ITEM_LIST[1]%

3 个答案:

答案 0 :(得分:3)

使用自扩展代码将字符串列表转换为数组变量

如果您不想在检索值和构建数组时进行迭代,则 你可以使用自扩展代码。

但要注意在尝试理解代码时遇到麻烦。

@echo off & setlocal enabledelayedexpansion
Set i=0 & set "ITEM_LIST= item1 item2 item3 item4 item5"
Set "ITEM_LIST=%ITEM_LIST: ="&Set /a i+=1&Set "ITEM_LIST[!i!]=%"
Echo List has %i% entries
Set ITEM_LIST

echo !ITEM_LIST[1]!
echo %ITEM_LIST[5]%

示例运行:

> SO_45491838.cmd
List has 5 entries
ITEM_LIST[1]=item1
ITEM_LIST[2]=item2
ITEM_LIST[3]=item3
ITEM_LIST[4]=item4
ITEM_LIST[5]=item5
item1
item5

只是附加两个其他常见用途:

@echo off & setlocal enabledelayedexpansion
Rem Set MonthName[01..12] to short English month names
Set i=100&Set "MonthName= Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
Set "MonthName=%MonthName: ="&Set /a i+=1&Set "MonthName[!i:~-2!]=%"
Set MonthName

Rem Set DayName[1..7] to short English day names
Set i=0&Set "DayName= Mon Tue Wed Thu Fri Sat Sun"
Set "DayName=%DayName: ="&Set /a i+=1&Set "DayName[!i!]=%"
Set DayName

答案 1 :(得分:2)

您可以使用下标语法从数组中检索值,并在数组名称后面的方括号内传递要检索的值的索引。

例如:

set a[0]=1 
echo %a[0]%

在你的代码中它将是

echo %ITEM_LIST[0]%

答案 2 :(得分:1)

您是否使用

设置列表
set ITEM_LIST=item1 item2 item3 item4 item5

然后

for /f "tokens=3" %%a in ("%item_list%") do echo %%a

应该显示第三项。