我需要删除根目录下名为*.log.*
的子文件夹中带有扩展名 exits 的日志SessLogs
WorkflowLogs
d:\software\Bil
同样,我有许多不同命名的子目录SessLogs
,WorkflowLogs
如文件夹Bil
,如何实现这一点,我有一个示例脚本创建,如下所示,但它需要一些更新。
目录结构例如
软件-->Wel-->“SessLogs”和“WorkflowLogs”
软件-->Gim-->“SessLogs”和“WorkflowLogs”
软件-->Ren-->“SessLogs”和“WorkflowLogs”
$Path = "D:\software"
$Daysback = "-30"
$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($Daysback)
get-childitem "D:\software*" -include "*.*" -force -recurse |where-object { (-not $_.PSIsContainer) -and ($_.creationtime -lt $DatetoDelete) } |remove-item -whatif
答案1
我不确定我是否正确理解了您的要求,但如果我理解了,您已经拥有了它。我所做的更改:
Get-Childitem
使用时,recurse
不需要在搜索路径末尾添加星号 (*)。- 由于您正在寻找包含“.log.”的文件,只需将其用作包含参数,而不是“*.*”,它将搜索所有带有点的文件。
(-not $_.PSIsContainer)
如果您知道您的文件夹中不包含字符串“.log”,那么您也可以删除它- 但您可以保留它以确保万无一失。
因此,这应该执行以下操作:获取 D:\Software 下的所有项目以及其名称中包含字符串“.log.”的所有子文件夹,这些子文件夹不是目录,并且是在过去 30 天或之前创建的 - 然后删除它们。
$Path = "D:\software"
$Daysback = "-30"
$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($Daysback)
get-childitem "D:\software" -include "*.log.*" -force -recurse |where-object { (-not $_.PSIsContainer) -and ($_.creationtime -lt $DatetoDelete) } |remove-item -whatif