You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell删除Archiv目录下嵌套空文件夹代码失效问题咨询

故障原因排查
  • 核心问题:遍历Archiv目录下子文件夹时未添加递归参数
    原代码中处理逻辑为Get-ChildItem -LiteralPath $dir -Directory -Force,缺少-Recurse参数,仅能获取Archiv目录下的一级子文件夹,无法扫描到嵌套的深层目录(如示例中的文件夹B、C、D、E、H等),因此无法匹配删除这些深层空文件夹。
  • 逻辑验证:原代码自带的按路径长度降序排序逻辑无需修改,添加递归参数后会优先处理最深层的目录,删除深层空目录后,上层目录如果变为空,轮到处理上层目录时会自动触发空目录判断逻辑完成删除。
修复后代码
$LogFile = 'C:\Users\User\RemovedEmptyFolders.log'
$TopDir  = 'C:\Users\User\Test'

# 首先获取$TopDir下所有名为Archiv的文件夹完整路径,按路径长度降序排列保证优先处理深层嵌套的Archiv目录
$archiveDirs = (Get-ChildItem -LiteralPath $TopDir -Filter 'Archiv' -Recurse -Directory -Force).FullName | 
                Sort-Object -Property Length -Descending 

# 逐个处理每个Archiv目录下的空文件夹
$removed = foreach ($dir in $archiveDirs) {
    # 新增-Recurse参数扫描所有层级子文件夹,按路径长度降序排列优先处理最深层目录
    (Get-ChildItem -LiteralPath $dir -Directory -Force -Recurse) |
    Sort-Object @{Expression = {$_.FullName.Length}} -Descending | 
    ForEach-Object {
       # 判断文件夹是否为空(包含统计隐藏文件/文件夹)
       if (@($_.GetFileSystemInfos()).Count -eq 0) { 
           $_.FullName
           Remove-Item -LiteralPath $_.FullName -Force
       }
    }
    # 处理完成后如果Archiv目录本身为空也同步删除
    if (@(Get-ChildItem -LiteralPath $dir -Force).Count -eq 0) {
        $dir
        Remove-Item -LiteralPath $dir -Force
    }
}

$removed | Set-Content -Path $LogFile -PassThru

内容的提问来源于stack exchange,提问作者Peppino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:39:02