使用Powershell计算文件夹

时间:2012-10-17 12:15:06

标签: windows shell powershell scripting

是否有人知道 powershell 2.0 命令/脚本来计算特定文件夹中的所有文件夹和子文件夹(递归;无文件)(例如C:\ folder1 \ folder2中所有子文件夹的数量) ?

此外,我还需要所有“叶子”文件夹的数量。换句话说,我只想计算没有子模板的文件夹。

6 个答案:

答案 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