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

如何通过C#方法在PowerShell中可靠获取子文件夹的正确数量

问题修复方案

核心错误原因

  • 注释的DirectoryInfo写法存在语法错误:[System.IO.DirectoryInfo]::new()创建的是实例对象,实例方法需要用.调用,而::是静态方法调用符,写法错误无法返回正确结果。
  • 默认EnumerateDirectories仅统计目标路径下第一层子文件夹,如果需要统计所有嵌套层级的子文件夹,需要补充搜索范围参数。
  • 未添加异常处理逻辑:遇到权限不足的系统/隐藏文件夹时,枚举会直接中断,导致计数结果偏小。
  • 冗余的Measure-Object调用:PowerShell中可直接对枚举返回的集合取Count属性,无需额外管道计算,性能更好。

修正后可用代码

ForEach ($SubDir in ($DirObjects | Where-Object {$_.PSIsContainer})){
    # 统计文件,直接取Count减少性能损耗
    $NoOfex4Files = @([System.IO.Directory]::EnumerateFiles($SubDir.FullName, '*.ex4')).Count
    $NoOfmq4Files = @([System.IO.Directory]::EnumerateFiles($SubDir.FullName, '*.mq4')).Count

    # 统计子文件夹:如果仅要顶层子文件夹,把RecurseSubdirectories改为$false即可
    $enumOptions = [System.IO.EnumerationOptions]@{
        RecurseSubdirectories = $true 
        IgnoreInaccessible = $true # 自动跳过无权访问的路径,避免执行中断
    }
    $NoOfSubFolder = @([System.IO.Directory]::EnumerateDirectories($SubDir.FullName, '*', $enumOptions)).Count
}

补充说明

代码中用@()包裹枚举方法的返回结果,是为了兼容结果集为空、仅1条结果的场景,避免PowerShell将返回值识别为标量导致Count属性失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:45:03