【问题标题】:Count doesn't applied to -include jpg计数不适用于 -include jpg
【发布时间】:2017-07-13 23:50:28
【问题描述】:

我有以下脚本:

$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)

【问题讨论】:

    标签: powershell scripting powershell-4.0


    【解决方案1】:

    我无法完全解释这一点,因为文档对此问题有点不清楚,但您的怀疑是正确的。您至少有两种简单的方法可以得到正确的结果:

    1. 使用-Filter 而不是-Include

      $FilesInFolder = @($_ | Get-ChildItem -Recurse -Filter $Extension -File -Force)
      
    2. 显式指定路径而不是使用输入对象

      $FilesInFolder = @(Get-ChildItem -Path $_.FullName -Recurse -Include $Extension -File -Force)
      

    尤其是第二个版本让我觉得这可能是Get-ChildItem 中的一个错误(或至少是非常奇怪的行为)

    【讨论】:

    • 或者我可以使用 Where-Object { $_.extension -eq ".jpg" }
    【解决方案2】:

    我认为问题在于 $_ | Get-ChildItem 不会导致对象的 Path 被传送到 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 }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      相关资源
      最近更新 更多