我有以下脚本:
$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)
答案 0 :(得分:2)
我无法完全解释这一点,因为文档在这个问题上有点不清楚,但你的怀疑是正确的。您至少有两种简单的方法可以获得正确的结果:
使用-Filter
代替-Include
$FilesInFolder = @($_ | Get-ChildItem -Recurse -Filter $Extension -File -Force)
显式指定路径而不是使用输入对象
$FilesInFolder = @(Get-ChildItem -Path $_.FullName -Recurse -Include $Extension -File -Force)
特别是第二个版本让我觉得这可能是Get-ChildItem
答案 1 :(得分:1)
我认为问题是$ _ | Get-ChildItem不会导致将对象的路径传递给Path属性(因为$ _而是具有名为PSPath的属性)。
然而,这似乎有效:
$Extension = "*.jpg"
Get-ChildItem -Path 'C:\Users\ab73541\Documents\' -Directory | ForEach-Object {
$FilesInFolder = @(Get-ChildItem $_.PSPath -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 }