我正在寻找一种方法来计算来自许多子文件夹的文件,但棘手的部分是我想要通过部分名称来过滤它们。更具体地说,所有文件的名称中间都有一个日期。如果我只想计算特定文件夹中的文件,我使用它:
dir * |%{$_.Name.SubString(7,8)} | group |select name,count|ft -auto
就像魅力一样。问题在于它看不到多个文件夹。另外一个问题是,在结果中,我想查看分组计数的路径名。我也在测试这个:
dir -recurse | ?{ $_.PSIsContainer } | %{ Write-Host $_.FullName (dir $_.FullName | Measure-Object).Count }
但我无法在此函数中的名称内部实现日期过滤器。我还附上了一个例子,说明了格式以及我希望如何获得结果。
有任何帮助吗?
答案 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 } | %{ #[...]
哪个效率不高。
-Directory
获取目录(文件夹)。
要仅获取目录,请使用
-Directory
参数并省略-File
参数。要排除目录,请使用-File
参数并省略-Directory
参数,或使用-Attributes
参数。
这意味着,仅搜索目录的首选方法是:
Get-ChildItem -Recurse -Directory | % { #[...]