如何使用msbuild选择所有只读文件?

时间:2010-03-12 11:24:45

标签: msbuild

我正在尝试编写一个MsBuild脚本来压缩一些文件。我需要从文件夹中递归选择所有只读文件到ItemGroup以添加到zip。

我正在使用社区任务Zip任务,但我正在努力根据属性选择文件。

开箱即用,或者我是否需要编写自定义任务?

谢谢你的帮助。

3 个答案:

答案 0 :(得分:4)

您可以使用Property Functions(添加到msbuild 4)来确定文件是否为只读文件:

<ItemGroup>
  <MyFiles Include="Testing\*.*" >
    <ReadOnly Condition='1 == $([MSBuild]::BitwiseAnd(1, $([System.IO.File]::GetAttributes("%(Identity)"))))'>True</ReadOnly>
  </MyFiles>
</ItemGroup> 

<Target Name="Run" Outputs="%(MyFiles.Identity)">
  <Message Text="%(MyFiles.Identity)" Condition="%(MyFiles.ReadOnly) != True"/>
  <Message Text="%(MyFiles.Identity) ReadOnly" Condition="%(MyFiles.ReadOnly) == True" />
</Target>

答案 1 :(得分:0)

您是否查看了社区构建任务site

它有一个zip任务和一个属性更改任务 - 它们应该可以帮助你完成任务。

答案 2 :(得分:0)

这似乎可以通过一些脏的命令行使用来完成这项工作。

<Exec Command="dir .\RelPath\ToFolder\ToSearchIn /S /AR /B > readonlyfiles.temp.txt"/>
<ReadLinesFromFile File="readonlyfiles.temp.txt">
    <Output TaskParameter="Lines" ItemName="ReadOnlyFiles"/>
</ReadLinesFromFile>
<Delete Files="readonlyfiles.temp.txt"/>

它提供了文件的绝对路径。

要获得相对路径,请尝试以下方法:

<Exec Command="dir .\RelPath\ToFolder\ToSearchIn /S /AR /B > readonlyfiles.temp.txt"/>
<FileUpdate Files="readonlyfiles.temp.txt"
            Multiline="True"
            Regex="^.*\\RelPath\\ToFolder\\ToSearchIn"
            ReplacementText="RelPath\ToFolder\ToSearchIn"
            />
<ReadLinesFromFile File="readonlyfiles.temp.txt">
    <Output TaskParameter="Lines" ItemName="ReadOnlyZipFiles"/>
</ReadLinesFromFile>
<Delete Files="readonlyfiles.temp.txt"/>
相关问题