Move タスク

ファイルを新しい場所に移動します。

パラメーター

Move タスクのパラメーターの説明を次の表に示します。

パラメーター 説明
DestinationFiles 省略可能な ITaskItem[] 型の出力パラメーターです。

ソース ファイルの移動先ファイルの一覧を指定します。 この一覧は、SourceFiles パラメーターに指定された一覧の内容と 1 対 1 で対応している必要があります。 つまり、SourceFiles に指定された最初のファイルは、DestinationFiles に指定された最初の場所に移動され、2 番目以降のファイルも同様に処理されます。
DestinationFolder 省略可能な ITaskItem 型のパラメーターです。

ファイルの移動先ディレクトリを指定します。
MovedFiles 省略可能な ITaskItem[] 型の出力パラメーターです。

正常に移動されたアイテムが格納されます。
OverwriteReadOnlyFiles 省略可能な Boolean 型のパラメーターです。

true の場合、ファイルが読み取り専用としてマークされている場合でも、ファイルを上書きします。
SourceFiles 必須の ITaskItem[] 型のパラメーターです。

移動するファイルを指定します。

解説

DestinationFolder パラメーターか DestinationFiles パラメーターのいずれかを指定する必要がありますが、両方は指定できません。 両方を指定した場合、タスクは失敗し、エラーがログに記録されます。

Move タスクでは、対象ファイルに必要なフォルダーを作成します。

表に示されているパラメーターを使用できるだけでなく、このタスクは TaskExtension クラスからパラメーターを継承します。このクラス自体は Task クラスから継承されます。 これらの追加のパラメーターの一覧とその説明については、「TaskExtension Base Class」を参照してください。

次の例では、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.txtfiles\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>

関連項目