2012-12-25 3 views
1

Get-ChildItem은 폴더의 내용을 검색하고 폴더의 각 개체 크기, 개체 및 개체 유형 (파일/디렉터리)을 표시하려고합니다. 그러나 나는 그 세 개의 기둥 만 작동시키는 데 어려움을 겪고 있습니다.Get-ChildItem 파일/폴더

이름과 길이는 다소 단순하지만 파일과 폴더의 차이를 어떻게 표시합니까?

답변

3

PSIsContainer 속성을 확인하십시오. 폴더의 경우 $ true로, 파일의 경우 $ false로 설정됩니다. 예를 들면 다음과 같습니다.

Get-ChildItem | Foreach-Object{ 
    New-Object PSObject -Property @{ 
     Name = $_.Name 
     SizeMB = if($_.PSIsContainer) { (Get-ChildItem $_.FullName -Recurse | Measure-Object Length -Sum).Sum/1mb } else {$_.Length} 
     Type = if($_.PSIsContainer) {'Directory'} else {'File'} 
    } 
} 
+0

다시 한번 승리의 해답입니다. 그래서 내가 맞다면 폴더에있는 각 객체에 대한 속성 객체를 만듭니다. 그리고 각 속성 개체에 대해 이전 값을 기반으로 이름 값, 크기 값 및 유형 값을 지정합니다. 내가 이해하지 못하는 유일한 방법은 크기를 정의하는 방법입니다. 나는 당신이 전체 디렉토리의 크기를 측정하기 위해 -recurse 스위치를 사용하고, 파일에 대해 길이를 사용한다고 생각하십니까? Measure-Object가 파일에서도 작동하지 않습니까? 어느 쪽이든, 다시 한 번 감사드립니다! –

+0

파일에는 길이 속성이 있으므로 크기를 알기 위해 다른 것은 필요하지 않습니다. 반면에 폴더에는 Length 속성이 없습니다. 폴더 크기를 계산하려면 모든 파일을 반복적으로 반복해야합니다. 재귀 적으로 모든 파일의 길이가 합산됩니다. 이것이 바로 Measure-Object cmdlet이 유용 할 때입니다. –

+0

멋진 알고리즘, @Shay! 그러나 하나의 불일치가 있습니다. 디렉토리의 경우 _ 메가 바이트 _를 계산하지만 파일의 경우 _bytes_ 만 계산합니다. 가장 간단한 수정은 속성 이름을'SizeMB'에서'Size'로 변경하고 폴더 크기 계산에서 1mb 나누기를 삭제하는 것입니다. –