如何用PowerShell批量删除父文件夹下超90天的日期命名子目录?
改进后的PowerShell脚本:自动清理过期日期文件夹并记录日志
以下脚本会自动遍历D:\下所有以Folder开头的父文件夹,删除其中命名为yyyymmdd格式且超过90天的子文件夹,同时将被删除的文件夹完整路径记录到日志文件中:
# 设置过期时间(90天前) $expirationDate = (Get-Date).AddDays(-90) # 日志文件路径,可自行修改 $logPath = "D:\FolderCleanupLog.txt" # 获取D盘下所有Folder开头的父文件夹 $parentFolders = Get-ChildItem -Path "D:\" -Directory -Filter "Folder*" foreach ($parent in $parentFolders) { # 获取当前父文件夹下符合yyyymmdd格式的子文件夹 $dateFolders = Get-ChildItem -Path $parent.FullName -Directory | Where-Object { $_.Name -match '^\d{8}$' } foreach ($folder in $dateFolders) { # 从文件夹名称解析日期 if ([DateTime]::TryParseExact($folder.Name, "yyyyMMdd", $null, [System.Globalization.DateTimeStyles]::None, [ref]$folderDate)) { # 判断是否过期 if ($folderDate -lt $expirationDate) { # 删除文件夹(-WhatIf参数用于测试,确认无误后可删除) Remove-Item -Path $folder.FullName -Recurse -Force # 记录日志 "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - 删除文件夹:$($folder.FullName)" | Out-File -Path $logPath -Append } } } }
关键说明:
- 自动遍历父文件夹:通过
Get-ChildItem -Path "D:\" -Directory -Filter "Folder*"自动获取所有D:\下以Folder开头的父文件夹,无需手动维护父文件夹列表。 - 日期解析优化:使用
[DateTime]::TryParseExact更安全地解析文件夹名称为日期,避免手动截取字符串可能出现的错误。 - 日志记录:每次删除操作都会将时间和文件夹完整路径追加到指定日志文件,方便后续核查。
- 安全测试:脚本中可以先添加
-WhatIf参数到Remove-Item命令后,运行时只会模拟删除操作并输出日志,确认逻辑正确后再移除该参数执行真实删除。
内容的提问来源于stack exchange,提问作者Dags
相关产品推荐
相关产品推荐

