2017-04-23 5 views
2

배열에 같은 이름의 파일을 그룹화하는 Hashtable을 만들려고합니다. 그래서 저장되어있는 폴더와 같은 파일의 속성을 나열 할 수 있습니다 .해시 테이블에 배열에 객체 추가

$ht = @{} 
gci -recurse -file | % { 
    try{ 
     $ht.Add($_.Name,@()) 
     $ht[$_.Name] += $_ 
    } 
    catch{ 
     $ht[$_.Name] += $_ 
    } 
} 

내가 갖는 모든은 다음과 같습니다

Index operation failed; the array index evaluated to null. 
At line:8 char:13 
+    $ht[$_.Name] += $_ 
+    ~~~~~~~~~~~~~~~~~~ 

나는이 작동하지 않는 이유를 잘 모르겠어요, 난 어떤 도움을 주셔서 감사합니다 것입니다.

+0

'경우 ($의 HT [$ _ 이름.]) {$의 HT [$ _ 이름.] + = $ _} else {$ ht [$ _. name] =, $ _}' – wOxxOm

답변

2

Do not reinvent 바퀴.

$groupedFiles | Where-Object Count -gt 1 

:

$groupedFiles = Get-ChildItem -recurse -file | Group-Object Name 

지금 당신은 쉽게 현재의 두 배 이상 사용 Where-Object cmdlet에있는 모든 파일 이름을 검색 할 수 있습니다 : 당신은 Group-Object cmdlet을 사용 그룹에 동일한 이름을 가진 파일을 저장할

코드가 catch 블록에 도달하면 현재 파이프 라인 변수 ($_)가 의 마지막 오류을 나타내므로이 오류가 발생합니다및 아니요, 현재 항목입니다. 당신은 현재 항목을 변수를 저장하거나하여 해당 문제를 해결할 수 있습니다, 또는 당신은 -PipelineVariable 고급 cmdlet에 매개 변수 사용

$ht = @{} 
gci -recurse -file -PipelineVariable item | % { 
    try{ 
     $ht.Add($item.Name,@()) 
     $ht[$item.Name] += $item 
    } 
    catch{ 
     $ht[$item.Name] += $item 
    } 
}