按名称计算文件

时间:2017-11-29 08:02:48

标签: powershell

我正在寻找一种方法来计算来自许多子文件夹的文件,但棘手的部分是我想要通过部分名称来过滤它们。更具体地说,所有文件的名称中间都有一个日期。如果我只想计算特定文件夹中的文件,我使用它:

dir * |%{$_.Name.SubString(7,8)} | group |select name,count|ft -auto 

就像魅力一样。问题在于它看不到多个文件夹。另外一个问题是,在结果中,我想查看分组计数的路径名。我也在测试这个:

dir -recurse |  ?{ $_.PSIsContainer } | %{ Write-Host $_.FullName (dir $_.FullName | Measure-Object).Count } 

但我无法在此函数中的名称内部实现日期过滤器。我还附上了一个例子,说明了格式以及我希望如何获得结果。

enter image description here

有任何帮助吗?

1 个答案:

答案 0 :(得分:1)

  

我正在寻找一种方法来计算来自许多子文件夹的文件,但棘手的部分是我想要通过部分名称来过滤它们。更具体地说,所有文件的名称都在日期中间。

我不是100%清楚,如果你真的想在计算之前过滤它们或分组它们,那么我会同时展示它们。< / p>

假设这个名称的中间例如由_分隔,可以通过以下方式实现:

# C:/temp/testFolder/myName_123_folder/text.txt
Get-ChildItem * -Recurse |
    Select-Object -Property Name, @{Name = "CustomDate"; Expression = {$_.Name.Split("_")[1]}} |
    #This is how you would _filter_
    #Where-Object {$_.Custom -eq "123"} |
    Group-Object -Property CustomDate |
    Select-Object Name, Count

在拆分之前,不要忘记检查文件名是否与此模式匹配。这可以使用Select-Object和1. select之间的gci语句来完成,该语句会检查特定模式的文件名。

您的问题还表明您只想过滤目录:

dir -recurse |  ?{ $_.PSIsContainer } | %{ #[...]

哪个效率不高。

来自Docs of Get-ChildItem

  

-Directory

     

获取目录(文件夹)。

     

要仅获取目录,请使用-Directory参数并省略-File参数。要排除目录,请使用-File参数并省略-Directory参数,或使用-Attributes参数。

这意味着,仅搜索目录的首选方法是:

Get-ChildItem -Recurse -Directory | % { #[...]