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