2011-05-16 66 views
1

我试图复制特定的目录,保存目录结构,但不能找到一种方法,包括在特定%子目录(RecursiveDir)如何在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 

如何实现这一目标?

回答

0

尝试更改%(Files.RecursiveDir)到

%(RecursiveDir)%(文件名)%(分机)

给你

DestinationFolder =” .. \ OtherDir \%(递归目录)%(文件名)%(扩展名)“

+0

我认为这将不适合DestinationFolder参数这样 – 2011-05-18 13:24:49

+0

抱歉,我应该指出它需要使用DestinationFiles – stack72 2011-05-18 13:30:13

1

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

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

来自dir1和dir2的文件以这种方式在OtherDir文件夹中混合,不是吗? – 2011-05-18 13:26:35

+0

不,复制任务将使SourceFiles中的项目与DestinationFiles中的相应项目一一对应。由于其中一个是另一个的转换,因此SourceFiles中的每个文件都将在DestinationFiles中具有一对一的匹配。 – 2011-05-18 23:16:43

+0

请仔细阅读该问题。这样它会丢失Dir1和Dir2,并将它们混合到OtherDir下。 – 2011-06-15 14:22:36

2

不能离开这个普遍的问题没有答案...... 的解决方案是增加的父目录名前额外**前缀:

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