Move - задача
Перемещает файлы в новое расположение.
Параметры
В следующей таблице приводятся параметры задачи Move.
Параметр | Описание |
---|---|
DestinationFiles |
Необязательный выходной параметр ITaskItem[] .Указывает список файлов, в который будут перемещены исходные файлы. Предполагается, что этот список будет взаимно-однозначно сопоставляться со списком, указанным в параметре SourceFiles . Для перемещения первого файла из списка SourceFiles используется первый путь из списка DestinationFiles и т. д. |
DestinationFolder |
Необязательный параметр ITaskItem. Указывает каталог, в который вы хотите переместить файлы. |
MovedFiles |
Необязательный выходной параметр ITaskItem[] .Содержит успешно перемещенные элементы. |
OverwriteReadOnlyFiles |
Необязательный параметр Boolean .Значение true означает, что нужно перезаписывать даже файлы, доступные только для чтения. |
SourceFiles |
Обязательный параметр ITaskItem[] .Указывает файлы для перемещения. |
Замечания
Можно указать либо параметр DestinationFolder
, либо параметр DestinationFiles
, но не оба одновременно. В противном случае задача прерывает работу и в журнале регистрируется ошибка.
Задача Move
создает все необходимые папки для указанного целевого расположения файлов.
Помимо параметров, перечисленных в таблице, эта задача наследует параметры от класса TaskExtension, который сам является производным от класса Task. Список этих дополнительных параметров и их описания см. в статье Базовый класс 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>