微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算这些子文件夹中的子文件夹和 .exe 文件的数量

如何解决计算这些子文件夹中的子文件夹和 .exe 文件的数量

抱歉我的帖子太长了,我尽量详细。

我的文件夹结构如下:

C:\1\2\3\4\5\6\file.exe

我想要完成的是计算文件6 中存在的文件数量,然后按创建时间对它们进行分组。我还试图计算 file.exe 存在于这些文件夹中的实例数。

例如,文件C:\1\2\3\4\5 包含以下子文件夹,这些子文件夹是在如下所示的时间创建的:

a 12:00 AM
b 12:00 AM
c 1:00 AM
d 1:00 AM
e 2:00 AM
...

在这文件夹中,ab 包含 file.exe

我的预期输出应该是:

Time     Count Hit
----     ----- ---
12:00 AM     2   2
1:00 AM      2   0
2:00 AM      1   0

Time 表示文件夹的时间,Count 是当时创建的文件夹数,Hitfile.exe 在{{ 1}} 当时创建的文件夹的路径。

再举一个例子,在 C:\1\2\3\4\5\6\ 处,创建了 12:00 AM文件夹,在这两个文件夹中还有包含 22 个实例的子文件夹。有道理吗?

我在计算 file.exe 的实例时遇到问题。 当我运行我的脚本时,它确实对文件夹进行了分组,并给了我创建的时间和当时的数量,但它没有给我 file.exe 的实例数,我不确定我是什么我做错了。这是我正在使用的代码

file.exe

我得到的是

Get-ChildItem "C:\1\2\3\4\5" | `
        sort-object -Property LastWriteTime | `
        Select-Object @{Name = "Date"; Expression = { $_.LastWriteTime.ToString('h:mm tt') }},`
        @{Name = "Hit"; Expression = { (Get-ChildItem "C:\1\2\3\4\5" -Recurse -Filter "*.png").Count}} | `
        group-object Date | Select-Object @{Name = "Time"; Expression = { $_.Name }},Count,Hit

有什么想法吗?如果您需要更多说明,请告诉我!

解决方法

Group-Object 仅输出成员为 NameCountGroup 的对象。要访问通过管道传输到 Group-Object 的 cmdlet 输出中的属性(指定为 Group-Object) 的参数的属性除外,您需要访问 Group 属性,它是所有分组的数组对象。因此您需要为 Hit 计算另一个属性。

试试这个:

Get-ChildItem "C:\1\2\3\4\5" -Directory |
    Sort-Object -Property LastWriteTime |
    Select-Object @{Name = "Date"; Expression = { $_.LastWriteTime.ToString('h:mm tt') }},@{Name = "Hit"; Expression = { ($_ | Get-ChildItem -Recurse -File -Filter "*.png").Count}} |
    Group-Object Date | 
    Select-Object @{Name = "Time"; Expression = { $_.Name }},Count,@{Name = "Hit"; Expression = { ($_.Group | Measure-Object -Property Hit -sum).sum }}

该表达式计算 hit 数组所有元素的 Group 属性的总和。

另一个问题是您对两个 Get-ChildItem 调用使用相同的路径,因此您实际上是使用相同的路径多次搜索 *.png。当然,这会导致不正确的计数。我通过指定 $_ 作为路径来解决这个问题,这是第一个 Get-ChildItem 找到的文件夹。

此外,我已将 -Directory 添加到顶级 Get-ChildItem 并将 -File 添加到嵌套的 Get-ChildItem。可能不会对结果产生影响,但我认为它使代码更清晰。更能表达意图。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。