2015-11-27 36 views
0

我想我們都知道PsIsContainer方法來檢查當前文件是否是文件夾。但在我的項目中,我需要一種快速瞭解文件夾中文件夾數量的方法。我需要的只是快速獲得他們的號碼。我想寫一個看起來像C:\folder;12的.txt行。這意味着在該文件夾中使用-recurse參數,將會有12個文件夾。Powershell:快速計數容器

爲了解釋原因,當我切斷用於分析某些文件夾的程序時,我需要保存工作進度。當分析文件夾時,結果將被寫入第二個.txt文件。例如,如果一個文件夾被稱爲C:\ folder \ folder1,文件夾將被分析,然後folder1也將被分析。這使文件夾在文件中出現兩次,因爲全名總是被寫入。我想要做的是計算寫入C:\文件夾的行數。如果它等於下一個數字,它就是第一個.txt中的路徑,這意味着該文件已被分析過,並且該功能不需要再次執行。

有人有解決方案嗎?或者,也許另一個想法來保存進度?因爲我真的有這種感覺,這太耗時了。

謝謝你的幫助。

+0

可能[重複問題](http://stackoverflow.com/questions/12934106/counting-folders-with-powershell) – DarkLite1

+0

P問題在於,通過這種解決方案,我只能計算文件夾,我不能(或者我不知道如何)在where-object cmdlet中添加另一個條件。例如,我想把條件檢查,如果我的函數返回一個大於某個閾值的數字,我怎麼能做到這一點? '$ i =(gci -force -recurse | where-object {$ _。PSIsContainer(function1 -gt $ threshold)})。Count' does not work。編輯:好吧,我討厭自己這個。我明白了,沒關係。 但程序執行仍然太長 – Kikopu

+0

爲了加快速度,最好使用'Get-ChildItem -Force -Recurse -Directory',我相信在PowerShell 3.0中可以使用'-Directory'開關。 – DarkLite1

回答

1

另一種方法,我發現速度更快的是使用cmd內置的'dir'命令 當然這是在你不需要子文件夾的情況下(你可以在foreach循環中運行該函數,或者改變功能,如果是這種情況)

Function Get-FolderCount($path) 
{ 
$Dir = cmd /c dir $path /a:d 
Return ($Dir[-1] -csplit 'Dir' -replace '\s')[0] 
} 

我使用這個問題,以及用於測量文件夾的大小與/ s的開關,並採取的總大小是快得多然後的powershell,也然後快得多上交互式shell運行它...