循环批处理中的不同文件夹中的文件

时间:2017-05-18 09:02:00

标签: loops batch-file directory

在.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
)

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

1 个答案:

答案 0 :(得分: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命令迭代的文件夹包含在内部/r命令的for子句中,因此以前的代码将当前活动目录更改为文件夹迭代。

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

@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