需要从分散在多个根目录中的同名子目录中删除文件(*.log.*)

需要从分散在多个根目录中的同名子目录中删除文件(*.log.*)

我需要删除根目录下名为*.log.* 的子文件夹中带有扩展名 exits 的日志SessLogsWorkflowLogsd:\software\Bil

同样,我有许多不同命名的子目录SessLogsWorkflowLogs如文件夹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

相关内容