Get-Child Item을 사용하여 디렉토리만 가져오려면 어떻게 해야 합니까?
PowerShell 2.0을 사용하고 있는데 특정 경로의 모든 하위 디렉토리를 파이프 아웃하려고 합니다.다음 명령어는 모든 파일과 디렉토리를 출력하지만 파일을 필터링하는 방법을 알 수 없습니다.
Get-ChildItem c:\mypath -Recurse
사용해보았습니다.$_.Attributes
속성을 얻으려면 , 그러나 어떻게 문자 그대로의 인스턴스를 구축해야 하는지 모르겠다.System.IO.FileAttributes
비교할 수 있습니다.인cmd.exe
그건 그럴 것이다.
dir /b /ad /s
PowerShell 3.0 이후의 경우:
Get-ChildItem -Directory
에일리어스를 사용할 수도 있습니다.dir
,ls
,그리고.gci
PowerShell 3.0 이전 버전의 경우:
그FileInfo
에 의해 반환된 오브젝트Get-ChildItem
"베이스" 속성을 가지고 있습니다.PSIsContainer
. 해당 항목만 선택하려고 합니다.
Get-ChildItem -Recurse | ?{ $_.PSIsContainer }
디렉토리의 원시 문자열 이름을 원할 경우 다음을 수행할 수 있습니다.
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName
PowerShell 3.0에서는 다음과 같이 심플합니다.
Get-ChildItem -Directory #List only directories
Get-ChildItem -File #List only files
사용하다
Get-ChildItem -dir #lists only directories
Get-ChildItem -file #lists only files
에일리어스를 선호하는 경우
ls -dir #lists only directories
ls -file #lists only files
또는
dir -dir #lists only directories
dir -file #lists only files
하위 디렉토리도 다시 검색하려면-r
선택.
ls -dir -r #lists only directories recursively
ls -file -r #lists only files recursively
PowerShell 4.0, PowerShell 5.0(Windows 10), PowerShell Core 6.0(Windows 10, Mac 및 Linux) 및 PowerShell 7.0(Windows 10, Mac 및 Linux)에서 테스트 완료.
참고: PowerShell Core에서 심볼링크를 지정하면-r
전환합니다.심볼 링크를 따라가려면-FollowSymlink
와 교환하다.-r
.
주 2: PowerShell은 버전 6.0 이후 크로스 플랫폼이 되었습니다.크로스 플랫폼 버전은 원래 PowerShell Core라고 불렀지만 PowerShell 7.0+ 이후 "Core"라는 단어는 삭제되었습니다.
Get-ChildItem 매뉴얼:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem
보다 깔끔한 접근법:
Get-ChildItem "<name_of_directory>" | where {$_.Attributes -match'Directory'}
PowerShell 3.0에 디렉토리만 반환하는 스위치가 있는지 궁금합니다.추가하는 것은 논리적인 것 같습니다.
용도:
dir -r | where { $_ -is [System.IO.DirectoryInfo] }
PowerShell v2 이후 버전(k는 검색을 시작하는 폴더를 나타냅니다)에서 다음을 수행합니다.
Get-ChildItem $Path -attributes D -Recurse
폴더 이름만 사용하고 다른 이름은 사용하지 않는 경우 다음을 사용하십시오.
Get-ChildItem $Path -Name -attributes D -Recurse
특정 폴더를 찾는 경우 다음을 사용할 수 있습니다.이 경우 다음 폴더를 찾고 있습니다.myFolder
:
Get-ChildItem $Path -attributes D -Recurse -include "myFolder"
이 방법에서는 텍스트가 적게 필요합니다.
ls -r | ? {$_.mode -match "d"}
승인된 답변에는 다음과 같은 내용이 있습니다.
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName
"원시 스트링"을 얻습니다.하지만 사실 타입의 오브젝트는Selected.System.IO.DirectoryInfo
반환됩니다.원시 문자열의 경우 다음을 사용할 수 있습니다.
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | % { $_.FullName }
값이 문자열에 연결되어 있는 경우 차이는 중요합니다.
- 와 함께
Select-Object
의외로foo\@{FullName=bar}
ForEach
-예상대로: -예상대로입니다.foo\bar
용도:
dir -Directory -Recurse | Select FullName
디렉토리 전용 폴더명을 가지는 루트 구조의 출력이 표시됩니다.
먼저 Get-ChildItem을 사용하여 모든 폴더와 파일을 반복적으로 가져올 수 있습니다.그런 다음 파일만 가져오는 Where-Object 절에 출력을 파이프합니다.
# one of several ways to identify a file is using GetType() which
# will return "FileInfo" or "DirectoryInfo"
$files = Get-ChildItem E:\ -Recurse | Where-Object {$_.GetType().Name -eq "FileInfo"} ;
foreach ($file in $files) {
echo $file.FullName ;
}
용도:
Get-ChildItem \\myserver\myshare\myshare\ -Directory | Select-Object -Property name | convertto-csv -NoTypeInformation | Out-File c:\temp\mydirectorylist.csv
그 결과, 다음과 같은 것이 실현됩니다.
- 로케이션의 합니다.
Get-ChildItem \\myserver\myshare\myshare\ -Directory
- 합니다.
Select-Object -Property name
- 형식( 형식)으로 변환합니다.
convertto-csv -NoTypeInformation
- 를 파일에
Out-File c:\temp\mydirectorylist.csv
다음의 스크립트를 사용하면, 보다 읽기 쉽고 심플한 어프로치를 실현할 수 있습니다.
$Directory = "./"
Get-ChildItem $Directory -Recurse | % {
if ($_.Attributes -eq "Directory") {
Write-Host $_.FullName
}
}
이게 도움이 됐으면 좋겠네요!
이 솔루션은 TechNet 기사 Fun Things You Can Do with the Get-Child Item cmdlet을 기반으로 합니다.
Get-ChildItem C:\foo | Where-Object {$_.mode -match "d"}
대본에 썼는데 잘 되더라고요.
이 질문은 정확하고 잘 대답한 질문이지만, 제가 지금 보고 있기 때문에 뭔가 더 덧붙여야겠다고 생각했습니다.
Get-ChildItem
는 두 가지 유형의 객체를 생성하는 반면 대부분의 명령어는 하나만 생성합니다.
FileInfo 및 디렉토리정보가 반환됩니다.
이 명령어로 사용할 수 있는 'members'를 다음과 같이 표시하면 이를 확인할 수 있습니다.
Get-ChildItem | Get-Member
- 유형 이름:시스템.IO. 디렉토리정보
- 유형 이름:시스템.IO.FileInfo
각 유형별로 사용 가능한 다양한 메서드와 속성을 볼 수 있습니다.차이가 있다는 점에 유의하십시오.예를 들어 FileInfo 객체에 길이 속성이 있지만 디렉토리는정보 개체는 그렇지 않습니다.
어쨌든 기술적으로는 디렉토리를 분리함으로써 디렉토리만 반환할 수 있습니다.Info 오브젝트
Get-ChildItem | Where-Object {$_.GetType().Name -eq "DirectoryInfo"}
맨 에서 언급했듯이 사용하시는 입니다.Get-ChildItem -Directory
하지만 이제 멀티플 오브젝트 타입으로 작업하는 방법을 알게 되었습니다.
다음 항목 사용:
Get-ChildItem -Path \\server\share\folder\ -Recurse -Force | where {$_.Attributes -like '*Directory*'} | Export-Csv -Path C:\Temp\Export.csv -Encoding "Unicode" -Delimiter ";"
PsIsContainer 개체를 사용할 수 있습니다.
Get-ChildItem -path C:\mypath -Recurse | where {$_.PsIsContainer -eq $true}
에 구체적으로(「」를 사용해 주세요).IO.FileAttributes
Get-ChildItem c:\mypath -Recurse | Where-Object {$_.Attributes -band [IO.FileAttributes]::Directory}
하지만 난 마렉의 해결책이 더 좋아
Where-Object { $_ -is [System.IO.DirectoryInfo] }
언급URL : https://stackoverflow.com/questions/3085295/how-do-i-get-only-directories-using-get-childitem
'programing' 카테고리의 다른 글
SQL Server에 데이터베이스가 있는지 확인하는 방법 (0) | 2023.04.08 |
---|---|
PowerShell은 상수를 지원합니까? (0) | 2023.04.08 |
개체 'DF__*'이(가) '*' 열에 종속됨 - int를 이중으로 변경 (0) | 2023.04.08 |
현재 PowerShell 스크립트의 위치를 확인하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.08 |
Join-Path를 사용하여 3개 이상의 문자열을 하나의 파일 경로에 결합하려면 어떻게 해야 합니까? (0) | 2023.04.08 |