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

Powershell 如果存在具有适当时间戳的文件,则删除父目录,powershell,Powershell,使用PowerShell,我想搜索一个目录树,它将包含文件夹的子集。如果这些文件夹中存在名为NOW的文件,并且该文件已存在3天,我希望删除父目录 Get-ChildItem -Path C:\tools\test1 -Filter NOW -Recurse | foreach ($_) ??? 我想我的搜索语法是正确的,然后通过管道传递到foreach循环,但我不知道如何删除父目录 Get-ChildItem -Path C:\tools\test1 -Filter NOW -R

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

Get-ChildItem -Path C:\tools\test1 -Filter NOW -Recurse | 
    foreach ($_)   ???
我想我的搜索语法是正确的,然后通过管道传递到foreach循环,但我不知道如何删除父目录

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

非常感谢您的帮助,谢谢

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

Remove-Item $_.Directory.FullName -Force -Recurse
上述操作将删除现在所在的文件夹及其内容。但你还有另一个年龄问题。有两种方法可以做到这一点,但其中一种方法是使用
newtimespan
将创建时间与现在进行比较。使用TimeSPam的
Days
属性

(New-TimeSpan -start $_.CreationTime -end ([datetime]::Now)).Days -gt 3
把这些和你已经拥有的结合起来<代码>-文件将确保我们不会获得文件夹匹配

$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 }

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

Remove-Item $_.Directory.FullName -Force -Recurse
上述操作将删除现在所在的文件夹及其内容。但你还有另一个年龄问题。有两种方法可以做到这一点,但其中一种方法是使用
newtimespan
将创建时间与现在进行比较。使用TimeSPam的
Days
属性

(New-TimeSpan -start $_.CreationTime -end ([datetime]::Now)).Days -gt 3
把这些和你已经拥有的结合起来<代码>-文件将确保我们不会获得文件夹匹配

$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 }

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

Remove-Item $_.Directory.FullName -Force -Recurse
上述操作将删除现在所在的文件夹及其内容。但你还有另一个年龄问题。有两种方法可以做到这一点,但其中一种方法是使用
newtimespan
将创建时间与现在进行比较。使用TimeSPam的
Days
属性

(New-TimeSpan -start $_.CreationTime -end ([datetime]::Now)).Days -gt 3
把这些和你已经拥有的结合起来<代码>-文件将确保我们不会获得文件夹匹配

$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 }

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

Remove-Item $_.Directory.FullName -Force -Recurse
上述操作将删除现在所在的文件夹及其内容。但你还有另一个年龄问题。有两种方法可以做到这一点,但其中一种方法是使用
newtimespan
将创建时间与现在进行比较。使用TimeSPam的
Days
属性

(New-TimeSpan -start $_.CreationTime -end ([datetime]::Now)).Days -gt 3
把这些和你已经拥有的结合起来<代码>-文件将确保我们不会获得文件夹匹配

$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 }


对于目录,它返回一个DirectoryInfo对象。文件返回具有不同属性的FiLeFielo对象。感谢@ThemadTechnician提供的提示,我建议在管道之外计算一个参考日期(
$refdate=(Get date).date.AddDays(-3)
),然后使用
$\uuuUu.CreationTime-gt$refdate
)过滤结果,这样您就不会一次又一次地浪费资源计算时间跨度。至于筛选出目录,只需将
-而不是$\PSIsContainer
添加到筛选器中即可。我想可能有一个文件夹名为“NOW”,并在其中拾取@AnsgarWiechers感谢您的建议。这就是我在这方面做得更好的原因谢谢你的帮助!对于目录,它返回一个DirectoryInfo对象。文件返回具有不同属性的FiLeFielo对象。感谢@ThemadTechnician提供的提示,我建议在管道之外计算一个参考日期(
$refdate=(Get date).date.AddDays(-3)
),然后使用
$\uuuUu.CreationTime-gt$refdate
)过滤结果,这样您就不会一次又一次地浪费资源计算时间跨度。至于筛选出目录,只需将
-而不是$\PSIsContainer
添加到筛选器中即可。我想可能有一个文件夹名为“NOW”,并在其中拾取@AnsgarWiechers感谢您的建议。这就是我在这方面做得更好的原因谢谢你的帮助!对于目录,它返回一个DirectoryInfo对象。文件返回具有不同属性的FiLeFielo对象。感谢@ThemadTechnician提供的提示,我建议在管道之外计算一个参考日期(
$refdate=(Get date).date.AddDays(-3)
),然后使用
$\uuuUu.CreationTime-gt$refdate
)过滤结果,这样您就不会一次又一次地浪费资源计算时间跨度。至于筛选出目录,只需将
-而不是$\PSIsContainer
添加到筛选器中即可。我想可能有一个文件夹名为“NOW”,并在其中拾取@AnsgarWiechers谢谢你的建议