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



我遇到了一个情况。我试图使用MSBuild批处理来复制一个文件夹(子目录以及文件)以破坏dest文件夹。但是当我运行下面的脚本时,它会在根目标目录中转储来自SRC的所有内容(来自子目录的内容),而我正在寻找的是在目标目录中获得与SRC完全相同的结构。

<PropertyGroup>
        <Srcfldr>C:helloworldREService</Srcfldr>
    <DestFldr>C:ProjectsdesireExamples</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)%(Extension)元数据重新映射目的地。参见MSDN上的第二个例子。

编辑:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Srcfldr>C:helloworldREService</Srcfldr>
        <DestFldr>C:ProjectsdesireExamples</DestFldr>
    </PropertyGroup>
    <ItemGroup>
        <SrcToCopy Include="$(Srcfldr)***"/>
    </ItemGroup>
    <ItemGroup>
        <DestToCopy Include="$(DestFldr)destfldr1"/>
        <DestToCopy Include="$(DestFldr)destfldr2"/>
        <DestToCopy Include="$(DestFldr)destfldr3"/>
    </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>
</Project>

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

<PropertyGroup>
        <Srcfldr>C:helloworldREService</Srcfldr>
    <DestFldr>C:ProjectsdesireExamples</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:MsbuildexprojRebinaries</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>

最新更新