2013-10-14 5 views
0

powershell에서 regex를 사용하여 파일 이름을 기반으로 폴더의 이름을 지정하려고합니다.powershell에서 regex를 사용하여 파일 이름을 기반으로 한 이름 폴더

이름은 tester2-2013-14-10.txt과 비슷합니다.

그 파일 이름은 tester2이라는 폴더를 만들고 싶습니다. 디렉토리의 모든 파일에 대해이 작업을 수행합니다. 기본적으로 정규 표현식은 처음 '-'까지 읽을 필요가 있습니다. 그 후에는 다른 모든 문자를 무시하십시오. 그것

내가 시도하는 모든 정규식은 그런 일을하기 위해 노력하지 않았습니다.

다음은 (\w+)\.txt을 사용하려고하는 정규식입니다. 일의이 유형의 다른 변화와 함께

Get-ChildItem | Where{$_.Name -match '(\w+)\.txt'} | ForEach-Object{ 
    md $matches[1]} 

을 : 나는 시도하고 그것을 구현할 때

그리고 여기가입니다.

이 정규식에 대해 파일 이름을 실행할 때 문자열의 끝을 사용하는 것처럼 보입니다. tester2-2013-14-10.txt의 경우와 같이. 만들어지는 폴더 이름은 Tester2 대신 10입니다.

감사합니다. 정규식

^(\w+)-.*\.txt 

다음

+0

파일이 현재 폴더에 없으면 어떻게됩니까? – Belun

답변

2

봅니다 검증 및 설명 regex101 demo를 참조하십시오.

짧은 설명

^ 경기는 라인 또는 문자열로 시작합니다. 일치가 라인 시작시에 있어야합니다.

따라서 ^(\w+)은 파일 이름의 첫 번째 단어와 일치합니다. 그 다음에는 -과 어떤 문자가 나올 때까지 .txt

정규식에 어떤 문제가 있습니까?

(\w+)\.txt.txt 다음 단어 (\w+)즉시 일치합니다.

따라서 첫 단어 대신 마지막 단어가 표시됩니다.

+0

당신은 선생님입니다. 감사합니다. 나는 내가 뭘 잘못하고 있는지, 그리고 네가 어떻게 잘못하고 있는지에 대해 설명해 달라. '\ w +'가 단어가 아닌 문자까지 읽을 것이라고 가정하기 때문에 정규 표현식의 끝에 '-'를 포함하지 않았습니다. – Johnrad

+1

@JohnnyWhisman이 내 편집을 확인합니다. 제공된 정규 표현식 데모에서도 잘 설명됩니다. 그 곳에서 놀고 더 많이 탐험 할 수 있습니다. – jkshah

+0

@JohnnyWhisman'\ w'는 단어 문자와 일치하고 단어 문자는 A부터 Z (a에서 z까지), 0-9와 밑줄 문자 _로 광범위하게 정의됩니다. 따라서'\ w'는 하이픈/대시 인'-'와 일치하지 않습니다. – Jerry

관련 문제