특정 폴더 아래에 하나 이상의 대문자가 포함된 모든 폴더를 찾고 싶습니다.
나는 지금까지 이 Power Shell을 가지고 놀았습니다.
Get-ChildItem -Recurse
| ?{ $_.PSIsContainer }
| Where-Object {$_.FullName -match "^.*?refs\\.*[A-Z]+.*$"}
| Select-Object FullName
그러나 이름에 대문자가 포함된 모든 폴더를 나열한다는 점에서 실패합니다. 하위 폴더만 refs
나열되기를 원합니다 .
내 오류는 어디에 있습니까? 정규식 테스트 엔진에서 정규식을 시도하면 refs
. 분명히 파워 쉘 엔진이 다르게 작동합니까?
답변1
참으로 이상합니다. -Match
연산자는 정규 표현식의 내용(또는 다른 설명이 있을 수 있음)에 관계없이 대소문자를 신경 쓰지 않는 것 같습니다 .
그럼에도 불구하고 (대소문자 구분 일치) -Match
로 변경하면 -CMatch
ma 샘플 디렉토리에서 작동하는 것 같습니다.
Get-ChildItem -Recurse -Directory | Where-Object FullName -CMatch "^.*?refs\\.*[A-Z]+.*$" | select Fullname
더 큰 제어를 위해 유형 가속기를 사용할 수도 있습니다 [regex]
.
$regex = [regex]"^.*?refs\\.*[A-Z]+.*$"
$match = $regex.Match('C:\Users\user\refs\whatever\test1\test2\test3')