我有以下脚本:
$Extension = "*.jpg"
Get-ChildItem -Path 'C:\Users\DAVID\Documents\Test' -Directory | ForEach-Object {
$FilesInFolder = @($_ | Get-ChildItem -Recurse -Include $Extension -File -Force)
$FileSize = $FilesInFolder | Measure-Object -Property Length -Sum |
Select -ExpandProperty Sum
$FileSize = "{0:N2}" -f ($FileSize/1MB) + " MB"
$NumFiles = $FilesInFolder.Count
}
但它总是计算文件夹中的所有内容,包括 .zip 文件和 .exe。 我在这里做错了什么?我怎样才能让它只计算 .jpg 文件。找不到任何解决方案,但我认为它与此行有关:
$FilesInFolder = @($_ | Get-ChildItem -Recurse -Include $Extension -File -Force)
最佳答案
我无法完全解释这一点,因为文档在这个问题上有点不清楚,但你的怀疑是正确的。您至少有两种简单的方法可以获得正确的结果:
使用
-Filter
而不是-Ininclude
$FilesInFolder = @($_ | Get-ChildItem -Recurse -Filter $Extension -File -Force)
显式指定路径而不是使用输入对象
$FilesInFolder = @(Get-ChildItem -Path $_.FullName -Recurse -Include $Extension -File -Force)
特别是第二个版本让我认为这可能是 Get-ChildItem
中的一个错误(或者至少是非常奇怪的行为)
关于powershell - 计数不适用于 -include jpg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42416749/