【问题标题】:How can I access an element from a list/array in a windows batch code?如何从 Windows 批处理代码中的列表/数组中访问元素?
【发布时间】:2016-01-27 16:34:07
【问题描述】:
@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 文件,需要将每个文件复制到列表中的下一个文件夹(同时创建文件夹)

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

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

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

    【讨论】:

    • 谢谢!这正如预期的那样工作。你拯救了我的一天:)
    • @Stephan:如果“batch 不能使用数组”,您的代码怎么可能正确处理数组元素?也许“模拟数组”是一个没有意义的短语......请参阅:stackoverflow.com/questions/10544646/dir-output-into-bat-array/…
    • @Aacini:在我看来,一堆自变量并不能构成一个数组。数组是单个对象,而不是类似命名变量的集合——即使寻址“元素”的语法相似。
    • 好吧,根据你的意见,数组、结构、列表等,也不能真正存在于计算机中,因为 RAM 只是一堆字节!所有这些概念都是由高级编程语言的编译器和解释器“模拟”出来的,对吧? (你读过我的链接帖子吗?)
    • 是的,我确实阅读了您的帖子。但是编译器真的存在吗?计算机真的存在吗?还是它们是由一大堆原子“模拟”的,其中每个原子都由一些字符串模拟?这只是你画线的地方。我个人对数组的看法是:“如果它不作为单个对象处理(由编译器/解释器/无论如何),它就不是一个数组”。只是我的意见。
    【解决方案2】:

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

    @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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多