是否有人知道 powershell 2.0 命令/脚本来计算特定文件夹中的所有文件夹和子文件夹(递归;无文件)(例如C:\ folder1 \ folder2中所有子文件夹的数量) ?
此外,我还需要所有“叶子”文件夹的数量。换句话说,我只想计算没有子模板的文件夹。
答案 0 :(得分:8)
您可以使用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
答案 1 :(得分:7)
在PowerShell 3.0中,您可以使用目录开关:
(Get-ChildItem -Path <path> -Directory -Recurse -Force).Count
答案 2 :(得分:2)
这是一个非常好的起点:
(gci -force -recurse | where-object { $_.PSIsContainer }).Count
但是,我怀疑这将包括计数中的.zip
个文件。我会测试并尝试发布更新...
编辑:确认zip文件不计为容器。以上应该没问题!
答案 3 :(得分:2)
要回答问题的第二部分,获取叶子文件夹计数,只需修改where object子句以添加每个目录的非递归搜索,只获取返回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
答案 4 :(得分:2)
另一种选择:
(ls -force -rec | measure -inp {$_.psiscontainer} -Sum).sum
答案 5 :(得分:0)
使用追索选项获取路径子项,将其管道以仅过滤容器,再次管道以测量项目数
((get-childitem -Path $the_path -recurse | where-object { $_.PSIsContainer }) | measure).Count