【问题标题】:Cycle files from different folders inside a batch从批处理中的不同文件夹循环文件
【发布时间】:2017-05-18 09:02:00
【问题描述】:

在 .bat 文件中,我有这样的内容:

set Files="..\DataSet\*.shp"

for /r %%i in (%Files%) do (
    echo Preparing table %%i
    REM other commands
)

这允许我对 `%Files% 中设置的文件夹内的每个扩展名为 .shp 的文件执行操作。

问题是这是一个文件夹。我想在相同的变量中定义不同的文件夹,并循环其中的所有文件。类似的东西

set Files="..\DataSet1\*.shp;..\DataSet2\*.shp;..\DataSet3\*.shp"

for /r %%i in (%Files%) do (
    echo Preparing table %%i
    REM other commands
)

这样我应该能够处理在%Files% 变量中定义的所有文件夹中存在的每个.shp 文件。如何更改我的代码以循环在我的变量中定义的所有文件夹中的所有特定扩展名的文件?

【问题讨论】:

  • set Files="..\DataSet1\*.shp" "..\DataSet2\*.shp" "..\DataSet3\*.shp"
  • 它似乎不起作用。我没有进入循环内部。
  • 抱歉,我错过了/r。请参阅发布的答案以获取替代方案

标签: loops batch-file directory


【解决方案1】:
@echo off
    setlocal enableextensions disabledelayedexpansion

    set folders="..\DataSet1" "..\DataSet2" "..\DataSet3"
    set extensions=".shp"

    for %%f in (%folders%) do for %%x in (%extensions%) do pushd "%%~ff" && (
        for /r %%i in ("*%%~x") do (
            echo Preparing table %%i
            rem .....
        )
        popd
    )

由于无法将被for 命令迭代的文件夹包含在内部for 命令的/r 子句中,因此之前的代码将当前活动目录更改为要迭代的文件夹。

如果更改当前活动目录有问题,可以将文件迭代移动到子程序

@echo off
    setlocal enableextensions disabledelayedexpansion

    set folders="..\DataSet1" "..\DataSet2" "..\DataSet3"
    set extensions=".shp"

    for %%f in (%folders%) do for %%x in (%extensions%) do (
        call :process "%%~ff" "%%~x"
    )
    goto :eof

:process folderBeingProcessed extensionToProcess    
    for /r "%~1" %%i in ("*%~2") do (
            echo Preparing table %%i
            rem .....
    )
    goto :eof

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多