如何在RecursiveDir中包含父目录?

时间:2011-05-16 15:12:23

标签: regex msbuild

我正在尝试复制特定目录,保存目录结构,但无法找到在%(RecursiveDir)中包含特定子目录的方法

一个解决方案是使用更一般的捕获.\**\Dir1\**\*.*,但这可能会捕获一些不相关的东西,例如Level1 \ Dir1,这对我的任务来说是不正确的。

目前,我必须使用全包**\*.*,然后从项目组中删除特定目录。

这是脚本:

<ItemGroup>
 <Files Include=".\Dir1\**\*.*" />
 <Files Include=".\Dir2\**\*.*" />
</ItemGroup>

<Target Name="CopyFiles">
 <ItemGroup>
   <Files Remove=".\**\.svn\**" />
 <ItemGroup>
 <Copy SourceFiles="@(Files)" DestinationFolder="..\OtherDir\%(Files.RecursiveDir)"
</Target>

结果是:

..\OtherDir\FileFromDir1.txt
..\OtherDir\FileFromDir2.txt

但我需要:

..\OtherDir\Dir1\FileFromDir1.txt
..\OtherDir\Dir2\FileFromDir2.txt

如何实现这一目标?

3 个答案:

答案 0 :(得分:2)

不能让这个常见问题无法解答...... 解决方案是在父目录名称之前添加额外的**前缀:

<ItemGroup>
 <Files Include=".\**\Dir1\**\*.*" />
 <Files Include=".\**\Dir2\**\*.*" />
</ItemGroup>

答案 1 :(得分:1)

您想使用DestinationFiles,而不是DestinationFolder,并且可以使用项目转换来构建路径。

<Copy
  SourceFiles="@(Files)"
  DestinationFiles="@(Files->'..\OtherDir\%(RecursiveDir)%(FileName)%(Extension)')"
  />

答案 2 :(得分:0)

尝试将%(Files.RecursiveDir)更改为

%(RecursiveDir)%(文件名)%(扩展部分)

给你

DestinationFolder =&#34; .. \ OtherDir \%(RecursiveDir)%(文件名)%(扩展部分)&#34;