如何访问Windows批处理代码中的列表/数组中的元素?

@echo off set Counter=0 set folders=(14370437 14707356 16048938 16818856) for %%f in (*.jpg) do call :p "%%f" goto :eof :p set /a Counter+=1 set /a X=Counter %% 6 %name% = folders[Counter] ??? mkdir C:\output\%name% if %X%==1 copy %1 C:\output\%name%\front-image.jpg goto :eof 

我有一个静态的文件夹名称列表(列表比这个例子长得多)和另一个function,我需要使用它们。 我通过一堆.jpg文件循环,需要将每个文件复制到列表中的下一个文件夹(也创build文件夹)

我无法find一种方法来检索列表(或数组?)文件夹中的索引。

batch不能使用列表或数组,但可以模拟一个数组:

 @echo off setlocal enabledelayedexpansion set folders=(14370437 14707356 16048938 16818856) set i=0 for %%i in %folders% do ( set /a i+=1 set element[!i!]=%%i ) set element echo %element[2]% 

虽然这是有效的,但我强烈建议,在他们真正属于的地方使用偏见:

 @echo off setlocal enabledelayedexpansion set folders=14370437 14707356 16048938 16818856 set i=0 for %%i in (%folders%) do ( set /a i+=1 set element[!i!]=%%i ) set element echo %element[2]% set number=3 echo !element[%number%]! 

您可以通过这种方式“移动”或“旋转”列表中的元素:

 @echo off set Counter=0 set folders=14370437 14707356 16048938 16818856 set "folders2=%folders%" for %%f in (*.jpg) do call :p "%%f" goto :eof :p set /a Counter+=1 set /a X=Counter %% 6 for /F "tokens=1*" %%a in ("%folders2%") do ( set "name=%%a" rem Use this for "shift elements" set "folders2=%%b" rem OR use this for "rotate elements" set "folders2=%%b %%a" ) mkdir C:\output\%name% if %X%==1 copy %1 C:\output\%name%\front-image.jpg goto :eof 

有关如何在批处理文件中管理阵列的完整说明,请参阅cmd.exe(批处理)脚本中的数组,链表和其他数据结构