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>