PowerShell에서 이름 바꾸기 스크립트를 만드는 데 많은 어려움을 겪고 있습니다. 상황 : "네 자리 숫자 - 텍스트 - 정크" 내가 에 이름을 변경하려는 "텍스트 (네 자리 숫자)"지금 내가 만든PowerShell regex grouping
: 나는 다음과 같은 형식으로 명명 된 폴더가있는 디렉토리에서 일부 샘플 이름을 가진 디렉토리와 주위에 재생하려면 : - 흥미로운 - 엉터리 뭔가
2006 -
1996이 복사 - 에코 스크립트를 설정 내가 해봤
무시하고 자신의 이름은 시작하지만 정규 표현식이 마음에 들지 않습니다. 다음 코드는 인쇄 "1996 - 무엇인가"와 "2006 - 복사"
Get-ChildItem | Foreach-Object { if ($_.BaseName -match "(\d{4} - \w+ -*)") { echo $matches[0]}}
및 인쇄 할이 하나의 "1996 - 흥미로운 - 뭔가 엉터리 \ n을()"와 "2006 -이 복사 - 무시 \ n() "
Get-ChildItem | Foreach-Object { echo ($_.BaseName -replace "(\d{4} - \w+ - *)"), "$2 ($1)"}
어도비의 접근법이 리터럴 문자열"- "을 경계로 삼는 이유를 누가 말해 줄 수 있습니까? 이 전에 후행 공백을 트림하는 것입니다 -
Get-ChildItem | Foreach-Object {
if ($_.BaseName -match "(\d{4} - [^-]*)") {
echo $matches[0].TrimEnd()
}
}
참고 TrimEnd :
는 * 수정 * 감사 zespri, 내 문제를 해결 코드는
Get-ChildItem | Foreach-Object {
if ($_.BaseName -match "(\d{4} - [^-]*)") {
Rename-Item $_ ($_.BaseName -replace "(\d{4}) - (.+)(?= -).*" ,'$2 ($1)')
}
}
그것은 예 일치하는 사람의 이름을 메아리를, 그 한 단계입니다 올바른 방향. 지금 그것으로 무언가를하십시오 : "뭔가 재미있는 (숫자)"로 다시 포맷하십시오. 나는 괄호 안에 추출하고 $ matches [0] .Groups [] la http://stackoverflow.com/questions/614651/how-do-you-extract-the를 통해 추출하려는 두 부분을 래핑하려고했습니다. - 값 - 중 - regex - 역 참조 - 일치하는 - powershell하지만 그것은 유효한 연산자가 아닙니다.또한 이름이 지정된 그룹과 이름이없는 그룹을 시도했지만 텍스트 전체가 아닌 다른 것을 얻을 수 없으며 빈 괄호 쌍이 정크가 따라옵니다. – Glader
@Glader : 저는 올바른 방향으로 부드러운 전환이 충분할 것으로 기대했습니다. 이름을 다시 포맷하는 코드를 추가하기위한 답을 수정했습니다. –
그래서 내가했지만 나는 내 인생을 위해 올바른 방법을 알아낼 수 없습니다. 첫 번째 정규식에 여러 or'ed 숯 요구 등을 추가하여 시도했지만 항상 뭔가 엉덩이에 날 물고있어. ^^ 고맙습니다. 원본 코드와 함께 작성한 코드를 업데이트했습니다. – Glader