다음 코드를 Powershell 스크립트로 실행하려고 하는데 제대로 작동하지 않습니다. 첫째, 다음은 하나의 -Include
항목에서 작동하지만 여러 항목에서는 작동하지 않는 것 같습니다. 둘째, -Exclude
경계가 작동하지 않는 것 같습니다. 나는 아직도 다음에서 파일을 얻습니다.C:\윈도우그리고C:\프로그램 파일디렉토리.
$Include = "*.zip","*.rar","*.tar","*.7zip"
$exclude = "C:\Windows","C:\Program Files"
Get-ChildItem "C:\" -Include $Include -Exclude $Exclude -Recurse -Force -ErrorAction silentlycontinue | Select-Object -ExpandProperty FullName
참고: 이 스크립트의 목적은 시스템에서 모든 압축 파일을 찾는 것입니다. 나는 이것이 아마도 정말 간단하다는 것을 알고 있지만 그것을 작동시킬 수는 없는 것 같습니다.
답변1
매개 -Exclude
변수가 제대로 작동한 적이 없습니다. Name
일반적으로 그다지 유용하지 않은 속성 과 일치하는 것 같습니다 . 아마도 필터링을 직접 수행해야 할 것입니다.
$Include = "*.zip","*.rar","*.tar","*.7zip"
Get-ChildItem "C:\" -Include $Include -Recurse -Force -ErrorAction silentlycontinue |
? { $_.FullName -notmatch "^C:\\Windows" -and $_.FullName -notmatch "^C:\\Program" } |
Select-Object -ExpandProperty FullName
(그런데 는 -Filter
보다 훨씬, 훨씬 빠릅니다 -Include
. 단점은 을 사용하여 할 수 있는 것처럼 패턴 배열을 제공할 수 없다는 것입니다 -Include
. 하지만 4번 검색해야 해도 여전히 더 빠를 수 있습니다. 나는 할 수 없습니다. 속도가 중요하다면 테스트해 볼 가치가 있을 것입니다.)
답변2
-exclude가 예상대로 작동하지 않는다는 dangph의 의견에 동의합니다.
-notmatch를 사용하면 또는 를 사용하여 정규식 패턴을 작성할 수 있습니다 |
.
이는 수정된 $include와 함께 작동합니다.
$Include = @('*.zip','*.rar','*.tar','*.7zip')
$exclude = [RegEx]'^C:\\Windows|^C:\\Program Files'
Get-ChildItem "C:\" -Include $Include -Recurse -Force -EA 0|
Where FullName -notmatch $exclude|
Select-Object -ExpandProperty FullName
편집하다제외된 폴더는 첫 번째 수준이므로 전혀 반복하지 않는 것이 훨씬 빠르므로 2단계 접근 방식이 더 효율적입니다.
$Include = @('*.zip','*.rar','*.tar','*.7zip')
$exclude = [RegEx]'^C:\\Windows|^C:\\Program Files'
Get-ChildItem "C:\" -Directory |
Where FullName -notmatch $exclude|ForEach {
Get-ChildItem -Path $_.FullName -Include $Include -Recurse -Force -EA 0|
Select-Object -ExpandProperty FullName
}