如果文件存在且具有适当的时间戳,则删除父目录

时间:2014-11-07 18:07:54

标签: powershell

使用PowerShell我想搜索一个包含文件夹子集的目录树。如果这些文件夹中存在名为NOW的文件,并且该文件已有3天,我想删除父目录。

我认为我的搜索语法正确,然后管道到foreach循环,但我无法弄清楚如何删除父目录。

Get-ChildItem -Path C:\tools\test1 -Filter NOW -Recurse | 
    foreach ($_)   ???

非常感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:3)

Get-ChildItem返回文件的System.IO.FileInfo个对象。其中一个属性是Directory。那么你想要删除目录。目录仍然是对象,我们需要它的完整路径。

Remove-Item $_.Directory.FullName -Force -Recurse

以上将删除NOW所在的文件夹及其内容。但是你有另一个年龄条件。有几种方法可以做到这一点,但其中一种方法是使用New-TimeSpan将创建时间与Now进行比较。使用TimeSPam的Days属性

(New-TimeSpan -start $_.CreationTime -end ([datetime]::Now)).Days -gt 3

将它与你已有的一起放在一起。 -File将确保我们不会获得文件夹匹配。

$refdate = (Get-Date).Date.AddDays(-3)
Get-ChildItem -Path "C:\tools\test1" -Filter "NOW" -Recurse -File | 
        Where-Object{$_.CreationTime -gt $refdate} | 
        ForEach-Object{ Remove-Item $_.Directory.FullName -Force -Recurse -WhatIf }

-WhatIf将帮助您识别此进程尝试删除的文件夹。如果你至少没有PowerShell版本3,你可以这样做。

$refdate = (Get-Date).Date.AddDays(-3)
Get-ChildItem -Path "C:\tools\test1" -Filter "NOW" -Recurse | 
        Where-Object{(!$_.PSIsContainer) -and ($_.CreationTime -gt $refdate)} | 
        ForEach-Object{ Remove-Item $_.Directory.FullName -Force -Recurse -WhatIf }