使用文件输入与MSBuild复制特定文件夹

时间:2013-10-12 21:30:48

标签: msbuild

我有一个工作目录 folder1,folder2,folder3,folder4,.. folder10

我有一个包含项目(文件夹)名称的文本文件:

文件内容:

folder1
folder2
folder3

我想从文件中读取行,然后在维护目录结构时仅将这些文件夹复制到新文件夹。

mynewfolder{ folder1, folder2, folder3 }

将有多个文件用于输入。生成的工作目录(我将其称为父目录)将改变如下:

parent before msbuild:
parent{ folder1, folder2, .., folder10, mybuild.xml}

parent after msbuild:
parent{ folder1, folder2, .., folder10, mybuild.xml, 
        mynewfolder{folder1, folder2, folder3},
        myothernewfolder{folder5, folder7, folder9}  }

我能得到的最接近的是将copy1,folder2和folder3的所有内容复制到mynewfolder中(因此,结构丢失了)

我尝试使用FindInList,我尝试使用transform方法,我也尝试调整所有内容以匹配此示例: MSBuild - Comparing ItemGroups metadata

但我运气不好。

我只有大约5个小时的MSBuild经验,所以我现在有点迷失了。提前感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

这是你想要的吗?

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">

<Target Name="Sample">
    <ItemGroup>
        <_File Include="fileWithDirectorieNames.txt" />
    </ItemGroup>
    <PropertyGroup>
        <_DestDir>d:\copy\</_DestDir>
    </PropertyGroup>

    <ReadLinesFromFile File="@(_File)" >
        <Output TaskParameter="Lines" ItemName="ItemsFromFile"/>
    </ReadLinesFromFile>

    <ItemGroup>
        <_files2Copy Include="%(ItemsFromFile.Identity)\**\*" >
            <lastDir>%(ItemsFromFile.Filename)%(ItemFromFile.Extension)\</lastDir>
        </_files2Copy>
    </ItemGroup>

    <Copy SourceFiles="@(_files2Copy)"
          DestinationFiles="@(_files2Copy->'$(_DestDir)%(lastDir)%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>