我需要找出给定路径的文件夹有多深。 问题是该脚本根本无法运行。 它不打印任何内容,只打印一行。
$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
的正确用法吗?
就个人而言,我喜欢在 UNC 路径上使用
LiteralPath
而不是 Path
,但这并不能解释为什么你的代码无法写入文件。-Recurse
开关时,无需以 \*
结束路径。
另外,我会在这里使用
Select-Object
而不是foreach循环,并让它使用计算属性创建要收集在变量中的对象。请尝试
$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