0

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

我想删除 DATA 文件夹的所有内容,但使用 msbuild 将 DATA 文件夹本身留在原处。

我知道您可以使用 msbuild Community Tasks/extension RemoveContent 任务从文件夹中删除所有子目录和文件,而无需删除文件夹本身,但我不知道如何选择所有 DATA 文件夹并在每个文件夹上调用 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>
  - ... 
4

1 回答 1

0

您可以使用 System.IO.GetDirectories 使用属性函数列出目录,因为这允许使用通配符轻松列出目录,然后使用 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:\ 上启动了 RemoveContent,但结果并不好笑。

于 2013-09-13T07:59:26.203 回答