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

PowerShell对比两个文件夹时如何跳过末尾带句点的损坏文件夹

问题场景

你使用如下PowerShell命令对比两个目录的递归内容时,遇到名称末尾带句点的损坏文件夹会触发报错,导致对比流程中断:

Compare-Object (Get-ChildItem -Recurse Y:\Ftp\BFold\Final) (Get-ChildItem -Recurse Y:\Dest\TFold\Temp)

注:Compare是Compare-Object的默认别名,两类报错的解决方法如下:

方案1:主动跳过所有名称末尾带句点的文件夹

在Get-ChildItem阶段就过滤排除目标异常文件夹,从根源避免报错:

# 封装递归获取有效项的函数,排除末尾带句点的文件夹
function Get-ValidChildItem {
    param($Path)
    Get-ChildItem -Path $Path | ForEach-Object {
        # 跳过名称末尾为句点的文件夹
        if ($_.PSIsContainer -and $_.Name.EndsWith('.')) {
            return
        }
        $_
        # 递归遍历子目录(排除了异常文件夹后不会触发报错)
        if ($_.PSIsContainer) {
            Get-ValidChildItem -Path $_.FullName
        }
    }
}

# 调用函数获取两边的有效项后对比
Compare-Object (Get-ValidChildItem Y:\Ftp\BFold\Final) (Get-ValidChildItem Y:\Dest\TFold\Temp)
方案2:仅忽略遍历错误,不做主动过滤

如果不需要特意排除这类文件夹,只需要让对比流程不中断,可以直接给Get-ChildItem添加静默忽略错误的参数:

Compare-Object (Get-ChildItem -Recurse Y:\Ftp\BFold\Final -ErrorAction SilentlyContinue) (Get-ChildItem -Recurse Y:\Dest\TFold\Temp -ErrorAction SilentlyContinue)

该方案会忽略所有遍历阶段的报错(包括权限不足、路径过长等其他错误),适合只需要对比正常可访问项的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:57:05