2016-09-08 2 views
0

내 디스크의 두 번째 수준 디렉터리 이름을 모두 검색하고 싶습니다. 예를 들어, C:\folder1\folder2C:\folder1\folder3과 같이 검색하려면 folder2folder3 만 검색하면됩니다.두 번째 수준의 디렉터리 이름 만 반환

나는 이것을 작성하고 PS는 모든 디렉토리 이름이 표시

Get-ChildItem -Recurse | ?{ $_.PSIsContainer} | Select-Object Name 

나는이 help 발견, 나는 이런 식으로 이전 명령을 수정 : 나는 그것을 사용하는 경우

Get-ChildItem -Recurse | `Where-Object {($_.directory -match '^*\\\S*$')} ` | ForEach-Object {?{ $_.PSIsContainer} | Select-Object Name } 

하지만를 추신 : 아무것도 표시되지 않습니다.

왜 누군가가 나를 도울 수 있는지 이해할 수 없습니까? 고맙습니다!

답변

2

만 파일이 .directory 속성을 가지고있는 것 같습니다에 단지 이름이 압정 원한다면 적어도 PowerShell을 3.0이 그런 빠른

Get-ChildItem \*\*\ -Directory 

될 경우, 디렉토리 그렇게하지 않으면 (.directory 패턴과 일치하는) 필터를 통과하는 필터를 얻지 못하고 필터 (PSIsContainer)도 전달하게됩니다. 이 제외

당신의 PSIsContainer 필터가 작동하지 않습니다이 이해가되지 않습니다

| ForEach-Object {?{ $_.PSIsContainer} | Select-Object Name } 

; cmdlet | ? {}으로 ?을 사용하여 파이프 라인 만 필터링 할 수 있습니다. 입력없이 루프 스크립트 블록의 시작 부분을 필터링 할 수 없으며 아무 것도 유용하지 않습니다. 이 루프에서 반복하여 where-object {}을 실행 중입니다. - 출력이 없습니다.

-Recurse를 사용하면 끝까지 모든 단일 디렉터리로 이동하고 모든 파일에 대해 [fileinfo] 개체를 만들 때 매우 느립니다. 매트의 와일드 카드 대답은 그렇다

, PS v3의 이상, 루트에있는 모든 디렉토리 및 다음 그 내부의 모든 디렉토리를 나열 할 수 있으며, 여기서 멈추지 가정 :

Get-ChildItem c:\ -Directory | Get-ChildItem -Directory | Select -ExpandProperty Name 

or 

gci c:\ -Dir | ForEach { (gci $_ -Dir).Name } 
+0

안녕하세요! '-Directory'로 시도해 보았습니다. 감사합니다. 사실, 나는 또한 ForEach-Object {? {$ _. PSIsContainer} | '-Directory' 문 뒤에 Select-Object Name'을 입력하면 동작합니다. 분명히 '이름 선택'이 더 좋습니다. 하지만 ... 당신에게 알려주는 것. 고맙습니다! – Hari

+0

@ 하리 작동합니까? 나는'gci | 각각 { ? {$ _. PsIsContainer}}'출력이 없으며 파일도 폴더도 없습니다. '$ _'는 가치가 없습니다 ...? – TessellatingHeckler

+0

다음 명령을 시도했습니다 :'Get-ChildItem C : \ * \ * -Directory | ? {$ _. PSIsContainer} | -ExpandProperty Name'을 선택하면 같은 결과를 얻을 수 있습니다 :'Get-ChildItem c : \ -Directory | Get-ChildItem - 디렉토리 | -ExpandProperty Name'을 선택하십시오. 그래서 ... 네. – Hari

1

재미있는 와일드 카드를 사용하여 원하는 것을 얻을 수 있어야합니다.

Get-ChildItem \*\*\ | Where-Object{$_.PSIsContainer} 

또는 당신이 | Select-Object -ExpandProperty Name

관련 문제