在一个字符串中获取文件夹

时间:2012-03-18 11:03:30

标签: batch-file

我想使用批处理脚本循环遍历文件夹和子文件夹,并在单个字符串中返回包含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

等等,所以我可以将主文件夹作为单个变量发送,将主文件夹的所有子文件夹作为应用程序的分组变量发送。

希望我在这里有点清楚,我是批处理文件的绝对初学者。

1 个答案:

答案 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!部分删除最后一个子文件夹名称的分号。