在.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%
文件。如何更改我的代码,以便在我的变量中定义的所有文件夹中循环特定扩展名的所有文件?
答案 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