我想使用批处理脚本循环遍历文件夹和子文件夹,并在单个字符串中返回包含xml文件的所有文件夹。 (我需要能够将其作为参数发送)
我的文件夹结构相对简单,我有一个'父'文件夹,包含子文件夹,每个文件夹都包含xml文件。所以文件夹结构如下:
MasterFolder1>子文件夹1> file1.xml - file2.xml ...更多文件
子文件夹2> file1.xml - file2.xml ...更多文件
...更多子文件夹
MasterFolder2>子文件夹1> file1.xml - file2.xml ...更多文件
子文件夹2> file1.xml - file2.xml ...更多文件
...更多子文件夹
等等
我能够构建的是批处理数据,它将循环遍历所有文件夹,并且只关心具有xml文件的批处理数据。它看起来如下:
@echo off & setLocal enableDELAYedexpansion
set catdir=%CD%\catalog\%
cd %catdir%
FOR /f %%G in ('dir /ad/s/b') DO (
if exist %%G\*.xml (
for /f "tokens=1-6 delims=\/" %%i in ("%%G") do (
set model=%%m REM 'model' is the master folder name
set locale=%%n REM 'locale' is the sub folder name
echo %%m - %%n
)
)
)
pause
这给了我一个类似
的输出 Model1 - DE
Model1 - FR
Model1 - ES
Model2 - DE
Model2 - FI
Model2 - DK
等等
现在,我喜欢的是这样的:
Model1 - DE; FR; ES
Model2 - DE; FI; DK
等等,所以我可以将主文件夹作为单个变量发送,将主文件夹的所有子文件夹作为应用程序的分组变量发送。
希望我在这里有点清楚,我是批处理文件的绝对初学者。
答案 0 :(得分:1)
这个问题可以通过这个过程解决:
1- For each one of the top-level folders:
2- Initialize result with top-level folder name
3- For each one of the subfolders below it
4- If subfolder contains *.xml files: gather its name in result
5- Show the result
这是批处理文件:
@echo off
setlocal EnableDelayedExpansion
set catdir=%CD%\catalog\
cd %catdir%
for /D %%m in (*) do (
set "result=%%m - "
pushd "%%m"
for /D %%n in (*) do (
if exist "%%n\*.xml" (
set "result=!result!%%n;"
)
)
popd
if not "!result!" == "%%m - " (
echo !result:~0,-1!
)
)
最后一个echo命令中的:~0,-1!
部分删除最后一个子文件夹名称的分号。