如何在Batch中定义一个大数组?

时间:2014-06-26 16:39:03

标签: arrays batch-file

我想批量定义一个大数组(> 400键)但是当我执行我的脚本时,窗口关闭。我使用这个设置:

  

设置FILE_LIST =(filename1.xxx [...] filename450.yyy)

有些帮助吗? THX

3 个答案:

答案 0 :(得分:4)

Windows批处理文件的每个变量的值限制为8192个字符,包括变量的名称和等号。如果每个“filename#.xxx”的值有16个字符,则最多可以在一个变量中存储8192/16 = 512个文件名;要做到这一点,您必须使用批处理命令。例如:

@echo off
setlocal EnableDelayedExpansion

set "FILE_LIST="
for /L %%i in (1,1,450) do set "FILE_LIST=!FILE_LIST!filename%%i.xxx "
echo FILE_LIST=%FILE_LIST%

请注意,上一个变量是列表,NOT和数组。要定义数组,请使用以下方法:

@echo off
setlocal EnableDelayedExpansion

for /L %%i in (1,1,450) do set "FILE_ARRAY[%%i]=filename%%i.xxx"
echo FILE_ARRAY:
set FILE_ARRAY

所有变量占用的总空间限制为64兆字节。

有关批处理文件中数组和其他数据结构的详细说明,请参阅:Arrays, linked lists and other data structures in cmd.exe Batch script

编辑回复评论

下面的批处理文件假设.txt文件中每行有一个文件名,并且该文件名不包含感叹号:

@echo off
setlocal EnableDelayedExpansion

rem Load the .txt file in FILE_ARRAY elements:
set num=0
for /F "delims=" %%a in (fileList.txt) do (
   set /A num+=1
   set "FILE_ARRAY[!num!]=%%a"
)

rem Process the FILE_ARRAY elements:
for /L %%i in (1,1,%num%) do echo Processing: %%i- "!FILE_ARRAY[%%i]!"

答案 1 :(得分:1)

我终于以这种方式使用了:

set FILE_ARRAY[0]=filename1.xxx
set FILE_ARRAY[1]=filename2.yyy
set FILE_ARRAY[2]=filename3.zzz

for /F "tokens=2 delims==" %%i in ('set FILE_ARRAY[') do (
  echo %%i
)

感谢您的回答。

答案 2 :(得分:0)

好像您可能遇到了批处理文件限制(link),以下link描述了一个WA,因为将var中的内容转储到文件中,然后读取该文件当你需要那么大的变种时回来。

啊批次,你无休止的解决方法......