【问题标题】:getting folders in one string在一个字符串中获取文件夹
【发布时间】:2012-03-18 11:03:30
【问题描述】:

我想使用批处理脚本来循环浏览文件夹和子文件夹,并在单个字符串中返回包含 xml 文件的所有文件夹。 (我需要能够将其作为参数发送)

我的文件夹结构比较简单,我有一个“父”文件夹,包含子文件夹,每个文件夹都包含 xml 文件。所以文件夹结构如下:

MasterFolder1 > Subfolder1 > file1.xml - file2.xml ... 更多文件
子文件夹 2 > file1.xml - file2.xml ... 更多文件
... 更多子文件夹

MasterFolder2 > Subfolder1 > 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

这给了我这样的输出

模型 1 - DE
型号1 - FR
模型1 - ES
模型 2 - DE
Model2 - FI
模型 2 - 丹麦

等等

现在,我想得到的是这样的:

型号 1 - DE;FR;ES
模型 2 - DE;FI;DK

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

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

【问题讨论】:

    标签: batch-file


    【解决方案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!
       )
    )
    

    last echo 命令中的:~0,-1! 部分删除最后一个子文件夹名称的分号。

    【讨论】:

      猜你喜欢
      • 2015-01-17
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2017-08-28
      • 2015-08-06
      • 2015-03-03
      相关资源
      最近更新 更多