9

在 VS MSBuild 中,我们将一组文件从一个文件夹移动到另一个文件夹:

<ItemGroup>
      <RenameFile Include="Main\App.*" />     
</ItemGroup>    
<Move SourceFiles="@(RenameFile)" DestinationFiles="%(RootDir)%(RenameFile.Directory)NewApp%(RenameFile.Extension)" />

它工作正常,除了一个 file: App.exe.config,因为它具有双扩展名并且它重命名为(NewApp.config应该NewApp.exe.config如何)。

如何解决?

4

2 回答 2

9

从 MSBuild 4.0 开始,我们可以使用String Item Functions,例如 Replace:

<ItemGroup>
  <RenameFile Include="Main\App.*" />    
</ItemGroup>    
<Message Text="Move: @(RenameFile) -> @(RenameFile -> Replace('App', 'NewApp'))" Importance="High" />
<Move SourceFiles="@(RenameFile)" DestinationFiles="@(RenameFile -> Replace('App', 'NewApp'))" />

效果很好。

于 2018-03-22T20:27:04.920 回答
2

使用 MSBuild 移动和重命名具有双扩展名的文件

似乎您想移动和重命名文件App.*NewApp.*但使用 MSBuild 保留扩展名。您可以使用具有RegexReplace任务的MsBuild 社区任务。

为此,请将MSBuildTasks nuget 包添加到您的项目中,然后添加以下目标来执行此操作:

  <Target Name="MoveAndRename" AfterTargets="Build">
    <ItemGroup>
      <RenameFile Include="Main\App.*" />
    </ItemGroup>
    <Message Text="Files to copy and rename: @(RenameFile)" />
    <RegexReplace Input="@(RenameFile)" Expression="App." Replacement="NewApp.">
      <Output ItemName="DestinationFullPath" TaskParameter="Output" />
    </RegexReplace>
    <Message Text="Renamed Files: @(DestinationFullPath)" />
    <Move SourceFiles="@(RenameFile)" DestinationFiles="@(DestinationFullPath)" />
  </Target>

使用此目标,所有App.*文件都被移动并重命名为NewApp.*

在此处输入图像描述

于 2018-03-22T04:14:54.730 回答