2015-01-09 7 views
0

모든 "* .exe"파일을 하나의 폴더에서 가져오고 싶습니다. 그것에는 3 개의 하위 폴더가 있습니다. 하지만 난 2 하위 폴더에서 파일을 얻을 싶어요. PowerShell에서 -Exclude을 사용하려고합니다. 단일 파일을 제외하려고하지만 폴더를 제외하려고하지는 않습니다. 아무도 그것을 해결하는 방법을 말할 수 있습니다.하위 폴더를 제외하는 방법

이것은 "HWEMNGR.EXE"등의 파일을 제외시키기 위해 아래 코드를 사용하고 있지만 하위 폴더를 기본 폴더에서 제외 할 수 없습니다.

$Files = Get-ChildItem -Path "D:\depot\main" -Recurse -Include "*.exe" -Exclude HWEMNGR.EXE,wmboot.exe,SDClientMobileEdition.exe | % { $_.FullName } 

감사

답변

0

-Exclude은 폴더 이름 \ 경로 배제를위한 좋은 실적이없는 그러나 파일 이름에 좋습니다. 이 문제를 해결하려면 Where-Object 절을 사용해야합니다.

$Files = Get-ChildItem -Path "D:\depot\main" -Recurse -Include "*.exe" -Exclude "HWEMNGR.EXE","wmboot.exe","SDClientMobileEdition.exe" | 
    Select-Object -ExpandProperty FullName | 
    Where-Object{$_ -notmatch "\\FolderName\\"} 

코드 조각 % { $_.FullName }이 같은 일을 Select-Object -ExpandProperty FullName로 대체했습니다. 그런 다음 Where-Object을 사용하여 FolderName이없는 경로를 제외합니다. regex 기반이므로 슬래시를 두 배로 늘립니다. 이것은 또한 우리가 폴더와 "FolderName.exe"

다른 방법 TheMadTechnician처럼

는 다른 방향에서이에 와서 바로 파일을 확인 할 수 지적 호출 할 수없는 파일을 제외 확인하는 데 도움이 당신이 정말로 신경을 쓰고있는 폴더는 두 개뿐입니다. Get-ChildItem은 경로를위한 배열을 취할 것이므로 이와 비슷한 것을 사용할 수도 있습니다.

$paths = "D:\depot\main\install","D:\depot\main\debug" 
$excludes = "HWEMNGR.EXE","wmboot.exe","SDClientMobileEdition.exe" 
$Files = Get-ChildItem $paths -Filter "*.exe" -Exclude $excludes | Select-Object -ExpandProperty FullName 

는 결과로 원하는 폴더 2 개입니다. 당신은 여전히 ​​당신이 원하지 않는 파일을 제외하고 그냥 전체 파일 경로를 반환합니다.

+0

. 그런 식으로 그는 세 번째 폴더의 내용을 가져 오지 않고 제외시킵니다. 이와 같은 작은 세트의 경우 약간의 추가 작업이 필요할 때가 있습니다. – TheMadTechnician

+0

@TheMadTechnician 귀하의 의견을 바탕으로 제안을 포함 시켰습니다. 내가 이해한다고 가정하면 ..... – Matt

+0

그래, 맞아. 경로에 'D : \ Depot \ Main'을 포함시킬 수 있습니다. – TheMadTechnician

0

내가 그것을 어떻게 설명하기 위해 다음 를 취할 것입니다 :

여기
Get-ChildItem C:\a -include "*.txt" -recurse | %{$_.fullname} 

C:\a\b\b1.txt 
C:\a\b\b2.txt 
C:\a\b\b3.txt 
C:\a\c\c1.txt 
C:\a\c\c2.txt 
C:\a\c\c3.txt 
C:\a\d\d1.txt 
C:\a\d\d2.txt 

C에서하십시오 \ 하위 폴더가 B, C 및 D

지금이다를 * .txt 파일을 b와 c에 나열하고 어떤 파일도 d 하위에서 제외하고 싶습니다. 는

Get-ChildItem C:\a -include "*.txt" -recurse | ?{$_.fullname -notlike "C:\a\d\*"} | %{$_.fullname} 

C:\a\b\b1.txt 
C:\a\b\b2.txt 
C:\a\b\b3.txt 
C:\a\c\c1.txt 
C:\a\c\c2.txt 
C:\a\c\c3.txt 

나는이 문제를 해결 희망을 다음과 같이 내가 조건 (또한 "?"로 사용)를 을 소개이를 달성합니다. 때문에 모든 것을 얻고 그것은 단지 그가 루트 폴더를 가져온 다음 그는 반복적으로 원하는이 개 하위 폴더를 얻기 위해 더 빠를 수 있습니다 원하는이 개 하위 폴더가있는 경우 다음 제외해야한다는 사실을

관련 문제