如何解决计算这些子文件夹中的子文件夹和 .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
...
我的预期输出应该是:
Time Count Hit
---- ----- ---
12:00 AM 2 2
1:00 AM 2 0
2:00 AM 1 0
Time
表示文件夹的时间,Count
是当时创建的文件夹数,Hit
是file.exe
在{{ 1}} 当时创建的文件夹的路径。
再举一个例子,在 C:\1\2\3\4\5\6\
处,创建了 12:00 AM
个文件夹,在这两个文件夹中还有包含 2
的 2
个实例的子文件夹。有道理吗?
我在计算 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
仅输出成员为 Name
、Count
和 Group
的对象。要访问通过管道传输到 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 举报,一经查实,本站将立刻删除。