我想批量定义一个大数组(> 400键)但是当我执行我的脚本时,窗口关闭。我使用这个设置:
设置FILE_LIST =(filename1.xxx [...] filename450.yyy)
有些帮助吗? THX
答案 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)