使用PowerShell我想搜索一个包含文件夹子集的目录树。如果这些文件夹中存在名为NOW的文件,并且该文件已有3天,我想删除父目录。
我认为我的搜索语法正确,然后管道到foreach循环,但我无法弄清楚如何删除父目录。
Get-ChildItem -Path C:\tools\test1 -Filter NOW -Recurse |
foreach ($_) ???
非常感谢任何帮助,谢谢
答案 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 }