按名称计算文件

问题描述 投票:0回答:1

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

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

有帮助吗?

powershell
1个回答
1
投票

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

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

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

# 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.gci之间的select语句来完成,它会检查特定模式的文件名。


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

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

哪个效率不高。

来自Docs of Get-ChildItem

-目录

获取目录(文件夹)。

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

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

Get-ChildItem -Recurse -Directory | % { #[...]
© www.soinside.com 2019 - 2024. All rights reserved.