2010-08-18 94 views
3

我想使用Msbuild刪除超過6個月以上的文件夾 - 超過6個月的文件夾。刪除6個月以前的文件

我想使用的MSBuild

%的ModifiedTime(馳名項元數據),我不喜歡使用海關的任務,只有默認的MSBuild和Microsoft.Sdc.Tasks。我使用VS 2008,.net .35。

有什麼建議嗎?

<Target Name="SomeTarget"> 

<ItemGroup> 
    <FilesToDelete Include="Path\**\*.zip"/> 
</ItemGroup> 

<Delete Files="@(FilesToDelete)" /> 

</Target> 

回答

7

認爲你可以做到這一點,而無需在本地的MSBuild 4使用自定義的任務,但我還沒有開始用,玩,所以無法評論。

但是,對於本機MSBuild 3.5,我不認爲這是可能的 - 爲了操縱日期,你需要分解成代碼。你看,ModifiedDate元數據在內部是一個字符串 - 並且需要進行合理的操作來轉換爲日期。

我不確定Sdc任務是什麼 - 我不使用它們,因爲我更喜歡CommunityTasks,但即使執行了這些任務,我也無法想到任何可行的任務。

自定義MSBuild任務並不那麼可怕 - 我建議每個(可調整大小)項目都應該有一個解決方案,它是在任何其他解決方案之前構建的,該解決方案將包含自定義msbuild任務的DLL輸出到衆所周知的位置(例如「源」的根目錄下的「lib」文件夾)。

如果你可以讓這個作爲一個解決方案,然後在這裏是一個任務我只是敲了那達到你想要什麼:

using System; 
using System.Linq; 
using Microsoft.Build.Framework; 
using Microsoft.Build.Utilities; 

namespace Build.MsBuildTasks 
{ 
    public class FindFilesOlderThan : Task 
    { 
     [Required] 
     public ITaskItem[] Files { get; set; } 

     public int Months { get; set; } 

     public int Days { get; set; } 

     public int Years { get; set; } 

     [Output] 
     public ITaskItem[] MatchingFiles { get; set; } 

     public override bool Execute() 
     { 
      var olderThan = DateTime.UtcNow.AddYears(-Years).AddMonths(-Months).AddDays(-Days); 

      MatchingFiles = (from f in Files 
          where DateTime.Parse(f.GetMetadata("ModifiedTime")) < olderThan 
          select f).ToArray(); 

      return true; 
     } 
    } 
} 

你可以這樣使用它,像這樣:

<UsingTask AssemblyFile="$(MSBuildProjectDirectory)\..\lib\Build.MsBuildTasks.dll" 
    TaskName="Build.MsBuildTasks.FindFilesOlderThan" /> 

<Target Name="Purge"> 
    <ItemGroup> 
     <FilesToConsider Include="f:\temp\AzurePackages\**\*.*" /> 
    </ItemGroup> 

    <FindFilesOlderThan 
     Files="@(FilesToConsider)" 
     Months="6"> 
     <Output 
      TaskParameter="MatchingFiles" 
      ItemName="FilesToPurge"/> 
    </FindFilesOlderThan> 


    <Message Text="FilesToPurge: @(FilesToPurge)" /> 
</Target> 

中當然,YMMV

+0

什麼是YMMV? thmm – Kiquenet 2010-08-19 10:05:43

+0

YMMV:你的Milage May Vary ... – 2010-08-19 10:30:17