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>

См. также