Recursion MSbuild批处理--递归文件夹复制到多个目标文件夹

Recursion MSbuild批处理--递归文件夹复制到多个目标文件夹,recursion,msbuild,copy,directory,batching,Recursion,Msbuild,Copy,Directory,Batching,我遇到了一种情况。我正在尝试使用MSBuild批处理将文件夹子目录以及文件复制到多个dest文件夹。 但是当我运行下面的脚本时,它也会从根目标目录的子目录中转储src内容中的每一个内容,而我希望得到与目标目录中src内容完全相同的结构 <PropertyGroup> <Srcfldr>C:\helloworld\REService</Srcfldr> <DestFldr>C:\Projects\desire\Examples

我遇到了一种情况。我正在尝试使用MSBuild批处理将文件夹子目录以及文件复制到多个dest文件夹。 但是当我运行下面的脚本时,它也会从根目标目录的子目录中转储src内容中的每一个内容,而我希望得到与目标目录中src内容完全相同的结构

<PropertyGroup>
        <Srcfldr>C:\helloworld\REService</Srcfldr>
    <DestFldr>C:\Projects\desire\Examples</DestFldr>
  </PropertyGroup>

  <ItemGroup>
    <SrcToCopy Include="$(Srcfldr)\*.*"/>
  </ItemGroup>

  <ItemGroup>
    <DestToCopy Include="$(DestFldr)/destfldr1"/>
    <DestToCopy Include="$(DestFldr)/destfldr2"/>
    <DestToCopy Include="$(DestFldr)/destfldr3"/>

  </ItemGroup>

   <Target Name="DeployBatching">
    <RemoveDir Directories="@(DestToCopy)"/>
    <MakeDir Directories="@(DestToCopy)"/>

    <Copy SourceFiles="@(SrcToCopy)" DestinationFolder="%(DestToCopy.FullPath)" />
你能告诉我我做错了什么吗


SK

普通复制任务更适合复制文件而不是目录,在任何情况下,为了保留结构,您需要使用%RecursiveDir和%Filename%扩展名元数据重新映射目标。看

编辑:


看起来它不像我想要的那样工作。。。我尝试了下面的代码

<PropertyGroup>
        <Srcfldr>C:\helloworld\REService</Srcfldr>
    <DestFldr>C:\Projects\desire\Examples</DestFldr>
  </PropertyGroup>

  <ItemGroup>
    <SrcToCopy Include="$(Srcfldr)\*.*"/>
  </ItemGroup>

  <ItemGroup>
    <DestToCopy Include="$(DestFldr)/destfldr1"/>
    <DestToCopy Include="$(DestFldr)/destfldr2"/>
    <DestToCopy Include="$(DestFldr)/destfldr3"/>

  </ItemGroup>

<PropertyGroup>
        <DestToCopyvar>%(DestToCopy)</DestToCopyvar>
      </PropertyGroup>

        <Target Name="DeployBatching">

          <Copy SourceFiles="@(SrcToCopy)" DestinationFiles="@(SrcToCopy->'$(DestToCopyvar)\%(RecursiveDir)%(Filename)%(Extension)')" />

它只是复制根目录中的根文件,同时缺少目录和子目录…

这似乎对我现在起作用了

<PropertyGroup>
<Srcfldr>C:\Msbuild\exproj\Rebinaries</Srcfldr>
<copyfldr>c$\component1</copyfldr>
</PropertyGroup>

<ItemGroup>
<SrcToCopy Include="$(Srcfldr)\**\*"/>
</ItemGroup>

 <ItemGroup>
 <DestToCopy Include="\\devsvr1\$(copyfldr);\\devsvr2\$(copyfldr)"/>
 </ItemGroup>

 <Target Name="DeployBatching" Outputs="%(DestToCopy.FullPath)">
    <PropertyGroup>
        <DestToCopy>%(DestToCopy.FullPath)</DestToCopy>
    </PropertyGroup>
    <RemoveDir Directories="@(DestToCopy)"/>
    <MakeDir Directories="@(DestToCopy)"/>
    <Copy
        SourceFiles="@(SrcToCopy)"
        DestinationFiles="@(SrcToCopy->'$(DestToCopy)\%(RecursiveDir)\%(Filename)%(Extension)')"
    />
</Target>

看起来对我不起作用。。。我尝试了下面的代码%DestToCopy它只复制根目录中的根文件,缺少目录和子目录…@Satesh$Srcfldr\***这里**表示任何级别,这就是%RecursiveDir的用途。仔细阅读示例。是的,复制到单个目标文件夹是可行的,但从单个真实来源复制到多个目标文件夹对我来说是一个问题。不知何故,注释丢失了。。是的,效果如预期。谢谢@llYa
<PropertyGroup>
<Srcfldr>C:\Msbuild\exproj\Rebinaries</Srcfldr>
<copyfldr>c$\component1</copyfldr>
</PropertyGroup>

<ItemGroup>
<SrcToCopy Include="$(Srcfldr)\**\*"/>
</ItemGroup>

 <ItemGroup>
 <DestToCopy Include="\\devsvr1\$(copyfldr);\\devsvr2\$(copyfldr)"/>
 </ItemGroup>

 <Target Name="DeployBatching" Outputs="%(DestToCopy.FullPath)">
    <PropertyGroup>
        <DestToCopy>%(DestToCopy.FullPath)</DestToCopy>
    </PropertyGroup>
    <RemoveDir Directories="@(DestToCopy)"/>
    <MakeDir Directories="@(DestToCopy)"/>
    <Copy
        SourceFiles="@(SrcToCopy)"
        DestinationFiles="@(SrcToCopy->'$(DestToCopy)\%(RecursiveDir)\%(Filename)%(Extension)')"
    />
</Target>