Get-ChildItem을 사용하여 디렉토리 만 가져 오려면 어떻게합니까?
PowerShell 2.0을 사용하고 있으며 특정 경로의 모든 하위 디렉토리를 파이프 아웃하고 싶습니다. 다음 명령은 모든 파일과 디렉토리를 출력하지만 파일을 필터링하는 방법을 알 수 없습니다.
Get-ChildItem c:\mypath -Recurse
$_.Attributes
속성을 얻기 위해 사용하려고 시도했지만 System.IO.FileAttributes
비교할 리터럴 인스턴스를 구성하는 방법을 모르겠습니다 . 에서에게 cmd.exe
이 될 것이다
dir /b /ad /s
PowerShell 버전이 3.0 미만인 경우 :
에 FileInfo
의해 반환 된 객체 Get-ChildItem
에는 "base"속성이 PSIsContainer
있습니다. 해당 항목 만 선택하려고합니다.
Get-ChildItem -Recurse | ?{ $_.PSIsContainer }
디렉토리의 원시 문자열 이름을 원하면 할 수 있습니다
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName
PowerShell 3.0 이상 :
dir -Directory
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) 에서 테스트되었습니다 .
보다 깔끔한 접근법 :
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"
사용하다:
dir -Directory -Recurse | Select FullName
디렉토리의 폴더 이름을 가진 루트 구조의 출력이 제공됩니다.
이 방법에는 더 적은 텍스트가 필요합니다.
ls -r | ? {$_.mode -match "d"}
사용하다:
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
- 출력을 CSV 형식으로 변환하십시오.
convertto-csv -NoTypeInformation
- 결과를 파일로 저장하십시오.
Out-File c:\temp\mydirectorylist.csv
아래 스크립트를 통해 조금 더 읽기 쉽고 간단한 접근 방식을 얻을 수 있습니다.
$Directory = "./"
Get-ChildItem $Directory -Recurse | % {
if ($_.Attributes -eq "Directory") {
Write-Host $_.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 -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName
"원시 문자열"을 얻을 수 있습니다. 그러나 실제로 유형의 객체 Selected.System.IO.DirectoryInfo
가 반환됩니다. 원시 문자열의 경우 다음을 사용할 수 있습니다.
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | % { $_.FullName }
값이 문자열에 연결되어 있으면 차이점이 중요합니다.
- 와
Select-Object
놀랍게도foo\@{FullName=bar}
ForEach
-operator 와 함께 다음 과 같이 예상됩니다.foo\bar
내 솔루션은 TechNet 기사 Get-ChildItem Cmdlet으로 할 수있는 재미있는 일을 기반으로합니다 .
Get-ChildItem C:\foo | Where-Object {$_.mode -match "d"}
스크립트에서 사용했으며 잘 작동합니다.
이것을 사용하십시오 :
Get-ChildItem -Path \\server\share\folder\ -Recurse -Force | where {$_.Attributes -like '*Directory*'} | Export-Csv -Path C:\Temp\Export.csv -Encoding "Unicode" -Delimiter ";"
원래 질문에 구체적으로 답변하려면 (IO.FileAttributes 사용) :
Get-ChildItem c:\mypath -Recurse | Where-Object {$_.Attributes -and [IO.FileAttributes]::Directory}
그래도 Marek의 솔루션을 선호합니다 ( Where-Object { $_ -is [System.IO.DirectoryInfo] }
).
참고 URL : https://stackoverflow.com/questions/3085295/how-do-i-get-only-directories-using-get-childitem
'IT story' 카테고리의 다른 글
세마포어 대 모니터-차이점은 무엇입니까? (0) | 2020.04.19 |
---|---|
애니메이션을 중지하는 방법 (cancel ()이 작동하지 않음) (0) | 2020.04.19 |
문자열에서 처음 5자를 얻는 방법 (0) | 2020.04.19 |
모든 문자를 대문자로 TextView에 스타일을 지정하는 방법이 있습니까? (0) | 2020.04.19 |
새 파일에 쓸 때 자동으로 전체 경로 만들기 (0) | 2020.04.19 |