有谁知道powershell 2.0命令/脚本来计算特定文件夹中的所有文件夹和子文件夹(递归;没有文件)(例如C:\folder1\folder2 中所有子文件夹的数量)?
此外,我还需要所有“叶子”文件夹的数量。换句话说,我只想计算没有子文件夹的文件夹。
有谁知道powershell 2.0命令/脚本来计算特定文件夹中的所有文件夹和子文件夹(递归;没有文件)(例如C:\folder1\folder2 中所有子文件夹的数量)?
此外,我还需要所有“叶子”文件夹的数量。换句话说,我只想计算没有子文件夹的文件夹。
在 PowerShell 3.0 中,您可以使用目录开关:
(Get-ChildItem -Path <path> -Directory -Recurse -Force).Count
您可以使用get-childitem -recurse
获取当前文件夹中的所有文件和文件夹。
通过管道将Where-Object
其过滤到仅作为容器的文件。
$files = get-childitem -Path c:\temp -recurse
$folders = $files | where-object { $_.PSIsContainer }
Write-Host $folders.Count
作为一个单行:
(get-childitem -Path c:\temp -recurse | where-object { $_.PSIsContainer }).Count
另外一个选项:
(ls -force -rec | measure -inp {$_.psiscontainer} -Sum).sum
这是一个很好的起点:
(gci -force -recurse | where-object { $_.PSIsContainer }).Count
但是,我怀疑这将包括.zip
计数中的文件。我将对其进行测试并尝试发布更新...
编辑:已确认 zip 文件不计为容器。以上应该没问题!
要回答问题的第二部分,即获取叶文件夹计数,只需修改 where 对象子句以添加对每个目录的非递归搜索,仅获取返回计数为 0 的目录:
(dir -rec | where-object{$_.PSIsContainer -and ((dir $_.fullname | where-object{$_.PSIsContainer}).count -eq 0)}).Count
如果您可以使用 powershell 3.0,它看起来会更干净一些:
(dir -rec -directory | where-object{(dir $_.fullname -directory).count -eq 0}).count
使用 recourse 选项获取路径子项,通过管道仅过滤容器,再次通过管道测量项目数
((get-childitem -Path $the_path -recurse | where-object { $_.PSIsContainer }) | measure).Count