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>