使用msbuild重复删除内容

使用msbuild重复删除内容,msbuild,Msbuild,我有一个目录结构,如下所示。我不知道会有多少父文件夹,但我知道每一个都将包含一个名为DATA的文件夹。数据文件夹的名称不会更改,但父文件夹可以称为任何名称 我想删除数据文件夹的所有内容,但使用msbuild将数据文件夹本身保留在适当的位置 我知道您可以使用msbuild Community Tasks/extension RemoveContent任务从文件夹中删除所有子目录和文件,而无需删除文件夹本身,但我不知道如何选择所有数据文件夹并对每个文件夹调用RemoveContent TOP -

我有一个目录结构,如下所示。我不知道会有多少父文件夹,但我知道每一个都将包含一个名为DATA的文件夹。数据文件夹的名称不会更改,但父文件夹可以称为任何名称

我想删除数据文件夹的所有内容,但使用msbuild将数据文件夹本身保留在适当的位置

我知道您可以使用msbuild Community Tasks/extension RemoveContent任务从文件夹中删除所有子目录和文件,而无需删除文件夹本身,但我不知道如何选择所有数据文件夹并对每个文件夹调用RemoveContent

TOP
  - PARENT1
    - FOLDER1
    - FOLDER2
    - DATA
      - SUBFOLDER
          - SUBSUBFOLDER1
            - <files>
          - SUBSUBFOLDER2
            - <files>
      - SUBFOLDER
          - SUBSUBFOLDER1
            - <files>
          - SUBSUBFOLDER2
            - <files>
  - PARENT2
    - FOLDER1 
    - DATA
      - SUBFOLDER
          - SUBSUBFOLDER1
            - <files>
          - SUBSUBFOLDER2
            - <files>
      - SUBFOLDER
          - SUBSUBFOLDER1
            - <files>
          - SUBSUBFOLDER2
            - <files>
  - PARENT3
    - FOLDERABC
    - DATA
      - SUBFOLDER
          - SUBSUBFOLDER1
            - <files>
          - SUBSUBFOLDER2
            - <files>
      - SUBFOLDER
          - SUBSUBFOLDER1
            - <files>
          - SUBSUBFOLDER2
            - <files>
  - ... 
顶部
-父母1
-折叠1
-折叠2
-资料
-子文件夹
-子文件夹1
- 
-子文件夹2
- 
-子文件夹
-子文件夹1
- 
-子文件夹2
- 
-父母2
-折叠1
-资料
-子文件夹
-子文件夹1
- 
-子文件夹2
- 
-子文件夹
-子文件夹1
- 
-子文件夹2
- 
-父母3
-福尔德拉BC
-资料
-子文件夹
-子文件夹1
- 
-子文件夹2
- 
-子文件夹
-子文件夹1
- 
-子文件夹2
- 
- ... 

您可以使用System.IO.GetDirectory列出目录,因为这样可以轻松地使用通配符列出目录,然后使用RemoveContent任务对列表进行批处理。应该是这样的:

<Target Name="EraseEverythingUnderAllDataDirs">
  <ItemGroup>
    <Dirs Include="$([System.IO.Directory]::GetDirectories(`path\toTOP`,`DATA`,System.IO.SearchOption.AllDirectories))" />
  </ItemGroup>
  <MSBuild.ExtensionPack.FileSystem.Folder TaskAction="RemoveContent" 
                                           Path="%(Dirs.Identity)"/>
</Target>

我建议首先检查这是否是您想要的,使用Message任务而不是RemoveContent。不是开玩笑的,我有一次无意中删除了c:\上的内容,并对结果不感兴趣