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

时间:2016-01-27 16:34:07

标签: windows batch-file

@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

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

我找不到通过索引从列表(或数组?)文件夹中检索元素的方法。

2 个答案:

答案 0 :(得分:4)

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%]!

答案 1 :(得分:0)

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

@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

有关如何在批处理文件中管理数组的完整说明,请参阅:Arrays, linked lists and other data structures in cmd.exe (batch) script