Windows10 / powershell:如何计算文件然后按子文件夹对它们进行排序?

时间:2017-10-30 13:35:33

标签: powershell

我在Linux中有一个脚本,可以搜索/计算子文件夹中的所有文件,并为每个文件计算一次。

运行时的示例输出:my-count-script.sh /usr

 5322 X11R6
  316 bin
   89 lib
 2165 libdata
   50 libexec
19220 local
   10 mdec
  206 sbin
 8970 share

这使我可以计算/usr内的所有文件夹。因此,实际共享路径为/usr/share。 bin的路径是/usr/bin

我猜/usr是父,孩子包括sharebin等。我希望显示停在“子”级别。

有什么想法可以在power shell中完成吗?

3 个答案:

答案 0 :(得分:2)

像这样的快速衬里:

(ls c:\YourPath\*\* -File).Directory | Group-Object name

答案 1 :(得分:1)

你想要这样的东西:

Get-Childitem $home -recurse | Group-Object Directory -noelement

我在这里使用$ home作为目录规范,但你可能想要使用与你的情况更相关的那个。

答案 2 :(得分:1)

这将在第一级获取每个子目录的子项目计数。

获取所有子目录,然后为每个目录获取每个子文件夹递归获取所有文件的目录。

Get-childitem C:\Test -Recurse -Depth 0 -Directory | %{@{$_.Name = (Get-ChildItem $_.FullName -File -Recurse).count}} | format-table

如果您不想要递归计数,那么运行此命令只会获得每个子目录中的文件计数

Get-childitem C:\Test -Recurse -Depth 0 -Directory | %{@{$_.Name = (Get-ChildItem $_.FullName -File).count}} | format-table

这是一个也可以实现你想要的功能

function Get-SubDirectoryCount(){
    Param(
      [Parameter(Mandatory=$True)]
      [string]$Directory,
      [switch]$Recurse,
      [Parameter(ParameterSetName='FilesOnly')]
      [switch]$FilesOnly,
      [Parameter(ParameterSetName='DirectoriesOnly')]
      [switch]$DirectoriesOnly,
      [Parameter(ParameterSetName='FilesDirectoriesOnly')]
      [switch]$FilesAndDirectories
    )
    Invoke-expression  "Get-childitem $Directory -Recurse -Depth 0 -Directory | %{@{`$_.Name = (Get-ChildItem `$_.FullName $(if($DirectoriesOnly){write-output "-Directory"})$(if($FilesOnly){write-output "-File"}) $(if($Recurse){write-output "-Recurse"})).count}} | format-table"
}

#Get Files and Directories Recursively 
Get-SubDirectoryCount -Directory C:\Test -FilesAndDirectories -Recurse
#Get Files Recursively 
Get-SubDirectoryCount -Directory C:\Test -FilesOnly -Recurse
#Get Directories Recursively
Get-SubDirectoryCount -Directory C:\Test -DirectoriesOnly -Recurse