Move 任务

将文件移至新位置。

参数

下表描述了 Move 任务的参数。

参数 说明
DestinationFiles 可选的 ITaskItem[] 输出参数。

指定要将源文件移动到的文件的列表。 此列表应与 SourceFiles 参数中指定的列表具有一对一的映射关系。 也就是说,SourceFiles 中指定的第一个文件将移动到 DestinationFiles 中指定的第一个位置,依次类推。
DestinationFolder 可选 ITaskItem 参数。

指定要将文件移动到的目录。
MovedFiles 可选的 ITaskItem[] 输出参数。

包含已成功移动的项。
OverwriteReadOnlyFiles 可选 Boolean 参数。

如果为 true,则覆盖文件,即使它们标记为只读文件。
SourceFiles 必选 ITaskItem[] 参数。

指定要移动的文件。

注解

必须指定 DestinationFolder 参数或 DestinationFiles 参数,但不能对两者都进行指定。 如果指定了两者,则任务失败并记录一条错误。

Move 任务根据需要为所需的目标文件创建文件夹。

除了具有表中列出的参数外,此任务还将从本身继承自 Task 类的 TaskExtension 类继承参数。 有关这些其他参数的列表及其说明的信息,请参阅 TaskExtension 基类

示例

以下示例将文件从 source 文件夹移动到 dest 文件夹。 source 文件夹和 dest 文件夹都与项目文件相关。 如果 dest 文件夹不存在,系统将创建此文件夹。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <FilesToMove Include="source\*.*"/>
  </ItemGroup>

  <Target Name="MoveFiles" AfterTargets="Build">
     <Message Text="Moving Files @(FilesToMove)"/>
     <Move SourceFiles="@(FilesToMove)" DestinationFolder="dest">
       <Output 
          TaskParameter="DestinationFiles"
          ItemName="FilesWritten"/>
     </Move>
     <Message Text="@(FilesWritten)"/>
  </Target>
</Project>

以下示例根据替换模式重命名文件。 它假设 files\original1.txt 和 files\original2.txt 等文件存在,并且 original.txt 在执行之前存在于项目级别。 请注意,使用字符串项函数 Replace 来修改文件名。 请参阅项函数

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemGroup>
    <FilesToRename Include="files\original*" />    
  </ItemGroup>

  <Target Name="MoveFiles" AfterTargets="Build">
    <Message Text="Rename one file"/>
    <Move SourceFiles="original.txt" DestinationFiles="new.txt"/>
    <Message Text="Renaming files @(FilesToRename)"/>
    <Move SourceFiles="@(FilesToRename)" DestinationFiles="@(FilesToRename->Replace('original', 'new'))" />
  </Target>

</Project>

以下示例重命名完整子树中包含 MSBuild 属性中的搜索文本和替换文本的所有文件。 它展示如何使用字符串属性函数 Replace 来修改文件名。 它还展示如何使用 OverwriteReadOnlyFiles 选项。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <SearchText>original</SearchText>
    <ReplaceText>new</ReplaceText>
  </PropertyGroup>

  <ItemGroup>
    <FilesToRename Include="files\**\*$(SearchText)*" />    
  </ItemGroup>

  <Target Name="MoveFiles" AfterTargets="Build">
    <Message Text="Renaming files @(FilesToRename)"/>
    <Move SourceFiles="@(FilesToRename)"
          OverwriteReadOnlyFiles="true"
          DestinationFiles="@(FilesToRename->Replace($(SearchText), $(ReplaceText)))" />
  </Target>

</Project>

你可能会发现使用项元数据来生成目标文件列表很有用。 此时,引用众所周知的项元数据 %(RelativeDir)%(Filename),构造修改后的文件名,在这种情况下,用于将扩展名为 .txt 的子树中的所有文件的扩展名更改为 .orig

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <NewExtension>orig</NewExtension>
  </PropertyGroup>

  <ItemGroup>
    <FilesToRename Include="files\**\*.txt" />
    <RenamedFiles Include="@(FilesToRename -> '%(RelativeDir)%(Filename).$(NewExtension)')" />    
  </ItemGroup>

  <Target Name="MoveFiles" AfterTargets="Build">
    <Message Text="Renaming files @(FilesToRename) to @(RenamedFiles)"/>
    <Move SourceFiles="@(FilesToRename)"
          OverwriteReadOnlyFiles="true"
          DestinationFiles="@(RenamedFiles)" />
  </Target>

</Project>

请参阅