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

PowerShell中查询文件夹深度时Recurse参数失效问题排查

问题分析与解决办法

1. Recurse参数的使用问题

你写的-Path $nmlfpEngD*是错误的,这种写法会让Get-ChildItem先尝试匹配\\nml-fp\EngDesignLib\下的所有直接子项(*是通配符),再对这些子项执行递归。但网络共享路径下这种写法容易出现解析异常,导致无法获取递归后的文件夹。

正确的用法是直接指定根路径,不需要加*:

$subfolders = Get-ChildItem -Path $nmlfpEngD -Directory -Recurse -Force

2. 完全无输出的原因排查

  • Write-Host输出格式错误:你直接输出$resultObject,PowerShell只会显示对象的哈希表格式(比如@{StringCount=X; SubfolderName=Y; Path=Z}),如果本身没拿到文件夹对象,自然看不到有效内容。改成格式化输出才能明确看到结果:
    Write-Host "深度:$($resultObject.StringCount) | 文件夹名:$($resultObject.SubfolderName) | 路径:$($resultObject.Path)"
    
  • 权限限制:递归访问网络共享文件夹时,可能部分子文件夹没有读取权限,导致Get-ChildItem静默失败。可以添加错误捕获查看具体问题:
    $subfolders = Get-ChildItem -Path $nmlfpEngD -Directory -Recurse -Force -ErrorAction SilentlyContinue
    # 查看错误信息
    $Error
    
  • CSV写入混淆:如果脚本多次运行,-Append参数会累积内容,但第一次运行没有生成对象的话,CSV文件会是空的。可以先清空CSV再写入,避免旧内容干扰:
    # 清空现有CSV
    if (Test-Path $csvFilePath) { Remove-Item $csvFilePath }
    

3. 文件夹深度计算修正

你当前的StringCount计算的是路径拆分后的总段数,不是相对于根目录的实际深度。比如根路径\\nml-fp\EngDesignLib\拆分后是4段('', '', nml-fp, EngDesignLib),子文件夹\\nml-fp\EngDesignLib\a\b拆分后是6段,实际深度是2,所以需要减去根路径的段数:

$rootSegmentCount = $nmlfpEngD.Split('\').Count
foreach ($subfolder in $subfolders) {
    $resultObject = [PSCustomObject]@{
        Depth         = $subfolder.FullName.Split('\').Count - $rootSegmentCount
        SubfolderName = $subfolder.Name
        Path          = $subfolder.FullName
    }
    # 后续写入和输出代码不变
}

修正后的完整脚本

$nmlfpEngD = "\\nml-fp\EngDesignLib\"
$csvFilePath = "\\nml-fp\Users\Scripts\Scripts\Aras\CSVOutput\GetSubFolders.csv"

# 清空现有CSV文件,避免旧内容干扰
if (Test-Path $csvFilePath) {
    Remove-Item $csvFilePath -Force
}

# 计算根路径的段数,用来计算相对深度
$rootSegmentCount = $nmlfpEngD.Split('\').Count

# 递归获取所有文件夹,同时捕获错误
$subfolders = Get-ChildItem -Path $nmlfpEngD -Directory -Recurse -Force -ErrorAction SilentlyContinue

# 如果有错误,打印出来排查
if ($Error.Count -gt 0) {
    Write-Host "遇到以下错误:"
    $Error | ForEach-Object { Write-Host $_ }
}

foreach ($subfolder in $subfolders) {
    $resultObject = [PSCustomObject]@{
        Depth         = $subfolder.FullName.Split('\').Count - $rootSegmentCount
        SubfolderName = $subfolder.Name
        Path          = $subfolder.FullName
    }
    $resultObject | Export-Csv -Path $csvFilePath -NoTypeInformation -Append
    Write-Host "深度:$($resultObject.Depth) | 文件夹名:$($resultObject.SubfolderName) | 路径:$($resultObject.Path)"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:35:01