PowerShell에서 파일의 전체 경로 가져 오기 사용하여 이와 같은 작업을

특정 유형에 속하는 하위 폴더에있는 파일을 포함하여 모든 파일을 가져와야합니다.

Get-ChildItem을 사용하여 이와 같은 작업을 수행하고 있습니다 .

Get-ChildItem "C:\windows\System32" -Recurse | where {$_.extension -eq ".txt"}

그러나 전체 경로가 아닌 파일 이름 만 반환합니다.



답변

| select FullName위 줄 끝에 추가하십시오 . 나중에 실제로 무언가를 해야하는 경우 다음과 같이 foreach 루프에 파이프해야 할 수도 있습니다.

get-childitem "C:\windows\System32" -recurse | where {$_.extension -eq ".txt"} | % {
     Write-Host $_.FullName
}

답변

늦은 필터링을 사용하는 것보다 훨씬 빠르게 수행해야합니다.

Get-ChildItem C:\WINDOWS\System32 -Filter *.txt -Recurse | % { $_.FullName }

답변

Select-Object를 다음 과 같이 사용할 수도 있습니다 .

Get-ChildItem "C:\WINDOWS\System32" *.txt -Recurse | Select-Object FullName

답변

더 짧은 것이 여기 있습니다 :

(Get-ChildItem C:\MYDIRECTORY -Recurse).fullname > filename.txt

답변

상대 경로가 원하는 경우 -Name플래그를 사용할 수 있습니다 .

Get-ChildItem "C:\windows\System32" -Recurse -Filter *.txt -Name


답변

Get-ChildItem -Recurse *.txt | Format-Table FullName

그것이 내가 사용한 것입니다. 루프 구문이 포함되어 있지 않기 때문에 더 이해하기 쉽다고 생각합니다.


답변

PS 5에서 정말 성가신 것은 $ _가 foreach 내에서 전체 경로가 아닐 것입니다. FileInfo 및 DirectoryInfo 객체의 문자열 버전입니다. 어떤 이유로 경로의 와일드 카드가이를 수정하거나 Powershell 6 또는 7을 사용합니다. 중간에 항목을 가져 오기 위해 파이프 할 수도 있습니다.

Get-ChildItem -path C:\WINDOWS\System32\*.txt -Recurse | foreach { "$_" }

Get-ChildItem -path C:\WINDOWS\System32 -Recurse | get-item | foreach { "$_" }

이것은 .Net Core (Powershell 7)에서 해결 된 .Net의 문제 인 것 같습니다 : FileInfo / Directory 인스턴스의 문자열 화 동작이 v6.0.2 # 7132 이후로 변경되었습니다.