我有一個腳本,它獲取每個檔案夾并獲取每個檔案夾的名稱、檔案數、大小。
尺寸與測量物件不起作用。
我第一次嘗試使用我自己的物件來處理這個([pscustomobject])。
我可以在物件中集成命令(測量物件)嗎?
Get-ChildItem d:\ -Directory -Recurse -Depth 2 -ErrorAction SilentlyContinue|
ForEach-Object{
[pscustomobject]@{
FullName = $_.Fullname
FileCount = $_.GetFiles().Count
size=measure-object -sum -property length
}
} | sort -Property filecount -Descending
謝謝,)
uj5u.com熱心網友回復:
不幸的是,檔案夾實際上并沒有大小(當我們檢查它的屬性時,Windows 會很好地為我們找到)
因此,在您的腳本中,您需要獲取當前迭代檔案夾的所有子項并測量它們的組合大小。
Get-ChildItem d:\ -Directory -Recurse -Depth 2 -ErrorAction SilentlyContinue |
ForEach-Object {
[pscustomobject]@{
FullName = $_.Fullname
FileCount = $_.GetFiles().Count
size = (Get-Childitem -Path $_.Fullname -recurse | measure-object -property length -sum).sum
}
} | sort -Property filecount -Descending
uj5u.com熱心網友回復:
您將使用.GetFiles()兩次的結果,第一次用于獲取檔案總數,第二次用于獲取檔案的總和Length,因此我建議您將該方法呼叫的結果存盤在一個變數中以供進一步操作。
要獲取檔案夾大小,您可以使用Enumerable.Sum:
Get-ChildItem D:\ -Directory -Recurse -Depth 2 -ErrorAction SilentlyContinue | & {
process {
$files = $_.GetFiles()
[pscustomobject]@{
FullName = $_.FullName
FileCount = $files.Count
Size = [Linq.Enumerable]::Sum([int64[]] $files.ForEach('Length'))
}
}
} | Sort-Object -Property Filecount -Descending
或者,如果您想使用Measure-Object,該Size屬性將是:
Size = ($files | Measure-Object Length -Sum).Sum
最后,如果您想對每個檔案夾進行遞回搜索,您可以使用for SearchOption Enum來定位.GetFiles(String, SearchOption)多載:AllDirectories
$files = $_.GetFiles('*', [IO.SearchOption]::AllDirectories)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/487121.html
標籤:电源外壳
