根据 Powershell 中的路径查找文件夹深度

问题描述 投票:0回答:1

我需要找出给定路径的文件夹有多深。 问题是该脚本根本无法运行。 它不打印任何内容,只打印一行。

$nmlfpEngD = "\\nml-fp\EngDesignLib\"
$nmlfPrdD = "\\nml-fp\PrdDesignLib\"
$csvFilePath = "\\nml-fp\Users\Scripts\Scripts\Aras\CSVOutput\GetSubFolders.csv"
$subfolders = Get-ChildItem -Path $nmlfpEngD*  -Directory -Recurse -Force
foreach ($subfolder in $subfolders) {
    $resultObject = [PSCustomObject]@{
        StringCount   = $subfolder.FullName.ToString().Split('\').Count
        SubfolderName = $subfolder.Name
        Path          = $subfolder.FullName
        #Exists = 1
    }
    $resultObject | Export-Csv -Path $csvFilePath -NoTypeInformation -Append
    Write-Host $resultObject
}

当删除

Recurse
时,它会获取深度级别 1 的文件夹名称。但这达不到目的。 这不是
Recurse
的正确用法吗?

powershell get-childitem
1个回答
0
投票

就个人而言,我喜欢在 UNC 路径上使用

LiteralPath
而不是
Path
,但这并不能解释为什么你的代码无法写入文件。
使用
-Recurse
开关时,无需以
\*
结束路径。

另外,我会在这里使用

Select-Object
而不是foreach循环,并让它使用计算属性创建要收集在变量中的对象。
然后一次性将所有内容写入 CSV 文件。

请尝试

$nmlfpEngD   = '\\nml-fp\EngDesignLib'
$nmlfPrdD    = '\\nml-fp\PrdDesignLib'
$csvFilePath = '\\nml-fp\Users\Scripts\Scripts\Aras\CSVOutput\GetSubFolders.csv'
$dirsep      = [System.IO.Path]::DirectorySeparatorChar

# you can give both paths to Get-ChildItem as array by simply adding a comma in between
$result = Get-ChildItem -LiteralPath $nmlfpEngD, $nmlfPrdD -Directory -Recurse | 
          # because these are UNC paths, we need to trim off the first two backslashes
          Select-Object @{Name = 'StringCount'; Expression = {$_.FullName.Trim($dirsep).Split($dirsep).Count}}, 
                        @{Name = 'SubfolderName '; Expression = {$_.Name}}, 
                        @{Name = 'Path '; Expression = {$_.FullName}}
# output on screen
$result | Format-Table -AutoSize

# output to Csv
$result | Export-Csv -LiteralPath $csvFilePath -NoTypeInformation
© www.soinside.com 2019 - 2024. All rights reserved.