将单个文件复制到多个(动态)目标

时间:2016-09-15 21:42:00

标签: msbuild

我希望能够使用msbuild中的复制任务将位置为静态的单个文件复制到特定目录中的所有文件夹 - 唯一的是我需要"所有文件夹"部分是动态的,因为我不知道他们的名字。我能够将文件复制到一个目录就好了,当我按名称指定目标文件夹路径时,我甚至可以复制到多个目录,但我希望能够复制到存在于给定目录,即使这些文件夹是空的(这是我似乎无法解决的另一个问题)。如何使用msbuild复制任务将一个文件(已知位置)复制到目录内的X个文件夹(名称未知)?

1 个答案:

答案 0 :(得分:2)

首先复制list the directories,然后使用item batching将文件复制到每个文件。

<!--declare the source file and target directories somewhere-->
<PropertyGroup>
  <MyTargetDir>c:\temp</MyTargetDir>
  <MySourceFile>c:\somefile</MySourceFile>
</PropertyGroup>

<Target Name="CopyToSubDirs">
  <!--list dirs-->
  <ItemGroup>
    <TargetDirs Include="$([System.IO.Directory]::GetDirectories(`$(MyTargetDir)`))"/>
  </ItemGroup>
  <!--copy to each dir-->
  <Copy SourceFiles="$(MySourceFile)" DestinationFolder="%(TargetDirs.Identity)"/>
</Target>