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.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>