2017-02-23 26 views
2

我有以下腳本:計數不適用於-Include JPG

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

回答

2

我不能完全解釋這一點,因爲文檔是對這個問題有點不清楚,但是你懷疑對。您至少有兩種簡單的方法來得到正確的結果:

  1. 使用-Filter,而不是-Include

    $FilesInFolder = @($_ | Get-ChildItem -Recurse -Filter $Extension -File -Force) 
    
  2. 指定明確的路徑,而不是使用輸入對象

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

特別是第二個版本讓我覺得這是也許一個bug(或至少很奇怪的行爲)在Get-ChildItem

+0

或者我可以使用位置對象{$ _擴展-eq 「.JPG」。} –

1

我認爲問題是$ _ | 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 }