计算这些子文件夹中的子文件夹和 .exe 文件的数量
Count the numbers of subfolders and .exe files inside those subfolders
抱歉这么长 post,尽量详细。
我的文件夹结构如下所示:
C:\file.exe
我想要完成的是计算文件夹 6
中存在的文件夹数量,然后按创建时间对它们进行分组。我也在尝试计算 file.exe
在这些文件夹中存在的实例数。
例如,文件夹 C:
包含以下子文件夹,这些子文件夹是在如下所示的时间创建的::
a 12:00 AM
b 12:00 AM
c 1:00 AM
d 1:00 AM
e 2:00 AM
...
在这些文件夹中,a
和 b
包含 file.exe
。
我的预期输出应该是:
Time Count Hit
---- ----- ---
12:00 AM 2 2
1:00 AM 2 0
2:00 AM 1 0
Time
表示文件夹的时间,Count
是当时创建的文件夹数,Hit
是file.exe
在文件夹中的实例数C:\
当时创建的文件夹路径。
再举一个例子,在 12:00 AM
,创建了 2
个文件夹,并且在这两个文件夹中有子文件夹包含 2
个 file.exe
的实例。有道理吗?
我在计算 file.exe
的实例时遇到问题。
当我 运行 我的脚本时,它确实对文件夹进行了分组,并给我创建的时间和当时的数量,但它没有给我 file.exe
的实例数,我不是确定我做错了什么。这是我使用的代码:
Get-ChildItem "C:" | `
Sort-Object -Property LastWriteTime | `
Select-Object @{Name = "Date"; Expression = { $_.LastWriteTime.ToString('h:mm tt') }}, `
@{Name = "Hit"; Expression = { (Get-ChildItem "C:" -Recurse -Filter "*.png").Count}} | `
Group-Object Date | Select-Object @{Name = "Time"; Expression = { $_.Name }} , Count, Hit
我得到的是
Time Count Hit
---- ----- ---
12:00 AM 2
1:00 AM 2
2:00 AM 1
有什么想法吗?如果您需要更多说明,请告诉我!
Group-Object
仅输出具有成员 Name
、Count
和 Group
的对象。要访问通过管道传输到 Group-Object
的 cmdlet 输出的属性(指定为 Group-Object)
参数的 属性 除外,您需要访问 Group
属性 ,这是所有分组对象的数组。因此您需要为 Hit
.
计算另一个 属性
试试这个:
Get-ChildItem "C:" -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 }}
表达式计算 Group
数组所有元素的 hit
属性 之和。
另一个问题是您对两个 Get-ChildItem
调用使用相同的路径,因此您实际上是使用相同的路径多次搜索 *.png
。当然,这会导致计数不正确。我通过指定 $_
作为路径来解决这个问题,这是第一个 Get-ChildItem
.
找到的文件夹
我还添加了 -Directory
到顶级 Get-ChildItem
和 -File
到嵌套的 Get-ChildItem
。可能不会对结果产生影响,但我认为它使代码更清晰。更能表达意图。
抱歉这么长 post,尽量详细。
我的文件夹结构如下所示:
C:\file.exe
我想要完成的是计算文件夹 6
中存在的文件夹数量,然后按创建时间对它们进行分组。我也在尝试计算 file.exe
在这些文件夹中存在的实例数。
例如,文件夹 C:
包含以下子文件夹,这些子文件夹是在如下所示的时间创建的::
a 12:00 AM
b 12:00 AM
c 1:00 AM
d 1:00 AM
e 2:00 AM
...
在这些文件夹中,a
和 b
包含 file.exe
。
我的预期输出应该是:
Time Count Hit
---- ----- ---
12:00 AM 2 2
1:00 AM 2 0
2:00 AM 1 0
Time
表示文件夹的时间,Count
是当时创建的文件夹数,Hit
是file.exe
在文件夹中的实例数C:\
当时创建的文件夹路径。
再举一个例子,在 12:00 AM
,创建了 2
个文件夹,并且在这两个文件夹中有子文件夹包含 2
个 file.exe
的实例。有道理吗?
我在计算 file.exe
的实例时遇到问题。
当我 运行 我的脚本时,它确实对文件夹进行了分组,并给我创建的时间和当时的数量,但它没有给我 file.exe
的实例数,我不是确定我做错了什么。这是我使用的代码:
Get-ChildItem "C:" | `
Sort-Object -Property LastWriteTime | `
Select-Object @{Name = "Date"; Expression = { $_.LastWriteTime.ToString('h:mm tt') }}, `
@{Name = "Hit"; Expression = { (Get-ChildItem "C:" -Recurse -Filter "*.png").Count}} | `
Group-Object Date | Select-Object @{Name = "Time"; Expression = { $_.Name }} , Count, Hit
我得到的是
Time Count Hit
---- ----- ---
12:00 AM 2
1:00 AM 2
2:00 AM 1
有什么想法吗?如果您需要更多说明,请告诉我!
Group-Object
仅输出具有成员 Name
、Count
和 Group
的对象。要访问通过管道传输到 Group-Object
的 cmdlet 输出的属性(指定为 Group-Object)
参数的 属性 除外,您需要访问 Group
属性 ,这是所有分组对象的数组。因此您需要为 Hit
.
试试这个:
Get-ChildItem "C:" -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 }}
表达式计算 Group
数组所有元素的 hit
属性 之和。
另一个问题是您对两个 Get-ChildItem
调用使用相同的路径,因此您实际上是使用相同的路径多次搜索 *.png
。当然,这会导致计数不正确。我通过指定 $_
作为路径来解决这个问题,这是第一个 Get-ChildItem
.
我还添加了 -Directory
到顶级 Get-ChildItem
和 -File
到嵌套的 Get-ChildItem
。可能不会对结果产生影响,但我认为它使代码更清晰。更能表达意图。