특정 유형에 속하는 하위 폴더에있는 파일을 포함하여 모든 파일을 가져와야합니다.
Get-ChildItem을 사용하여 이와 같은 작업을 수행하고 있습니다 .
Get-ChildItem "C:\windows\System32" -Recurse | where {$_.extension -eq ".txt"}
그러나 전체 경로가 아닌 파일 이름 만 반환합니다.
특정 유형에 속하는 하위 폴더에있는 파일을 포함하여 모든 파일을 가져와야합니다.
Get-ChildItem을 사용하여 이와 같은 작업을 수행하고 있습니다 .
Get-ChildItem "C:\windows\System32" -Recurse | where {$_.extension -eq ".txt"}
그러나 전체 경로가 아닌 파일 이름 만 반환합니다.
답변:
Select-Object를 다음 과 같이 사용할 수도 있습니다 .
Get-ChildItem "C:\WINDOWS\System32" *.txt -Recurse | Select-Object FullName
Select-Object
반환 PSCustomObject
합니다. 다른 프로그램에 대한 매개 변수로 결과를 사용하는 경우이 작동하지 않을 수 있습니다
PSCustomObject
사용하십시오 . 내가 이해하는 한 매개 변수를 사용하면 cmdlet이 결과를 일부 사용자 지정 개체 대신 지정된 속성의 기본 형식으로 반환합니다. -ExpandProperty FullName
FullName
-ExpandProperty
Get-ChildItem -Path 'C:\Program Files\TheProgram' -Recurse | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-03-01')} | Select-Object 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 이후로 변경되었습니다.
이것은 나를 위해 일했고 이름 목록을 생성합니다.
$Thisfile=(get-childitem -path 10* -include '*.JPG' -recurse).fullname
get-member -membertype properties
엄청나게 유용한 명령 인 을 사용하여 찾았습니다 . 당신을 제공하는 대부분의 옵션은 함께 추가됩니다 .<thing>
처럼 fullname
여기에있다. 같은 명령을 수행 할 수 있습니다.
| get-member -membertype properties
명령이 끝날 때 수행 할 수있는 작업 및 액세스 방법에 대한 자세한 정보를 얻으려면 다음을 수행하십시오.
get-childitem -path 10* -include '*.JPG' -recurse | get-member -membertype properties
이 시도:
Get-ChildItem C:\windows\System32 -Include *.txt -Recurse | select -ExpandProperty FullName
왜 아무도 foreach 루프를 사용하지 않았습니까? 여기서 프로는 변수의 이름을 쉽게 지정할 수 있다는 것입니다.
# Note that I'm pretty explicit here. This would work as well as the line after:
# Get-ChildItem -Recurse C:\windows\System32\*.txt
$fileList = Get-ChildItem -Recurse -Path C:\windows\System32 -Include *.txt
foreach ($textfile in $fileList) {
# This includes the filename ;)
$filePath = $textfile.fullname
# You can replace the next line with whatever you want to.
Write-Output $filePath
}
$
앞에 textfile
:을 추가 하십시오 $textfile = $fileList[$i].FullName
. $i
숫자 값이 있다고 가정합니다 .
[대체 구문]
어떤 사람들에게는 방향성 파이프 운영자는 취향이 아니라 체인을 선호합니다. roslyn issue tracker : dotnet / roslyn # 5445 에서 공유 된이 주제에 관한 흥미로운 의견을보십시오 .
사례와 상황에 따라이 방법 중 하나는 암시 적 (또는 간접)으로 간주 될 수 있습니다. 예를 들어,이 경우 열거 가능한 파이프에 파이프를 사용하면 특수 토큰 $_
(일명 PowerShell's "THIS" token
)이 일부에게는 불쾌한 것처럼 보일 수 있습니다.
그러한 친구들에게는 다음과 같이 점 체인을 사용 하는보다 간결하고 간단한 방법이 있습니다 .
(gci . -re -fi *.txt).FullName
(<이 호언 장담> PowerShell을의 명령 인수 파서가 부분적인 매개 변수 이름을 허용하도록 외에 주. -recursive
, -recursiv
, -recursi
, -recurs
, -recur
, -recu
, -rec
과 -re
수용,하지만 불행히도되지 않은 -r
하나에 의미가있는 유일한 올바른 선택이다 .. -
(문자 우리의 경우 POSIXy 유닉스 관례에 따라 이동하십시오!) </ rant>)
-r
짧은 형태의 -Recurse
작품은 나에게 잘 작동합니다.
-File
스위치 -fi
에서도 마찬가지 -fil
이며 -file
작동하지만 작동하지 않습니다 -f
. POSIX 스타일로 가면 --file
(다중 문자) 및 -f
(단일 문자, -f가 다른 것을 위해 예약 되지 않은 한 단일 문자 옵션이 아닌 경우 단일 문자 옵션 force
이어야 함)이어야합니다 -l
.
아래 스크립트를 사용하여 모든 폴더 경로를 명시하고 있습니다.
Get-ChildItem -path "C:\" -Recurse -Directory -Force -ErrorAction SilentlyContinue | Select-Object FullName | Out-File "Folder_List.csv"
전체 폴더 경로가 오지 않습니다. 113 자 이후 :
Example - C:\ProgramData\Microsoft\Windows\DeviceMetadataCache\dmrccache\en-US\ec4d5fdd-aa12-400f-83e2-7b0ea6023eb7\Windows...
*.txt*
(-Filter
CMD 와일드 카드 사용) 과 같은 파일을 가져옵니다 . 이것이 원하는 것이 아닌 경우를 사용하십시오-Include *.txt
.