0

我遇到了一种情况。我正在尝试使用 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

4

3 回答 3

0

Vanilla 复制任务更适合复制文件而不是目录,在任何情况下,为了保留您需要重新映射目标使用%(RecursiveDir)%(Filename)%(Extension)元数据的结构。请参阅MSDN 上的第二个示例

编辑:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <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" 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>
于 2014-08-11T21:32:33.820 回答
0

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

<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)')" />

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

于 2014-08-11T22:43:54.910 回答
0

这似乎现在对我有用......

<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>
于 2014-08-26T20:05:15.300 回答