Powershell Get-ChildItem 是否多次计数?

Powershell Get-ChildItem 是否多次计数?

如何使用 powershell 计算文件夹下的文件数和文件夹数,模拟该文件夹的 Windows“属性”?

(get-childitem -recurse).count

返回对象总数(文件夹和文件总数),以及

(gci -rec | where { $_.PSIsContainer }).count

返回文件夹的数量。但是有没有办法在单个命令中同时计算文件夹和文件的数量,而无需遍历文件系统两次?我认为可以使用命名变量和循环编写过程化 powershell 代码,但这似乎不是正常的使用方式。


关于相关话题,http://technet.microsoft.com/en-us/library/ee692796.aspx描述了两种获取文件名列表的方法:

Get-ChildItem C:\Scripts | Select-Object Name

Get-ChildItem C:\Scripts -name

作者声称它们是等效的,但使用 -recurse 时,第一个只返回文件名,而第二个返回完整路径。有没有办法让 Select-Object 返回完整路径,以便这两个命令生成相同的输出?(随机尝试产生Select-Object Path空白行,而不是路径。)

gci -rec -name
gci -rec | Select-Object xxx?

答案1

您可以在遍历文件时获取每个项目的类型,然后使用group-object命令行获取每种类型的数量:

dir -rec | %{$_.GetType()} | group-object name | select name,count

Name          Count
----          -----
DirectoryInfo    15
FileInfo         26

要回答您的第二个问题,只需选择属性FullName

Get-ChildItem C:\Scripts | Select-Object FullName

相关内容