2015-05-29 103 views
1

我想比較兩組文件夾以確定文件和文件夾數量的差異。我找到了一個將輸出我正在查找的數據的命令,但找不到將其打印到文件的方法。這裏是我目前使用的命令:在PowerShell中打印遞歸文件和文件夾計數?

dir -recurse | ?{ $_.PSIsContainer } | %{ Write-Host $_.FullName (dir $_.FullName | Measure-Object).Count } 

這讓我所需要的數據,但我需要找到一個方法來打印這一個文本文件。任何幫助將不勝感激。

回答

3

問題是使用Write-Host cmdlet,它繞過了幾乎所有的管道處理。在這種情況下,它也是不必要的,因爲任何未被cmdlet使用的輸出都會自動傳遞到管道中(或者如果沒有其他任何進一步的信息,則傳送到控制檯)。

這裏是您的代碼重寫爲輸出一個字符串到管道,而不是使用寫主機。這使用PowerShell的字符串子表達式運算符$()。在控制檯上,它看起來相同,但可以通過管道傳輸到文件或其他cmdlet。

gci -Recurse -Directory | %{ "$($_.FullName) $((gci $_.FullName).Count)" } 

您也可能發現將數據放入PSCustomObject中很有用。一旦擁有對象,就可以進行進一步處理,例如基於計數進行排序或篩選。

$folders = gci -Recurse -Directory | %{ [PSCustomObject]@{Name=$_.FullName; Count=(dir $_.FullName).Count }} 

$folders | sort Count 
$folders | where Count -ne 0 

對成語的一些注意事項:dirGet-Childitem的別名,如gci。使用gci-Directory參數是僅列出目錄的最佳方式,而不是PSIsContainer檢查。最後,Measure-Object是不必要的。您可以直接使用文件列表的Count

Write-Host Considered Harmful請參閱從PowerShell中

的發明者
相關問題