우리 가족은 수년에 걸쳐 아이들의 학교 공연과 과외 활동에 대한 녹음을 기본 .avi
및 .mp4
파일로 보관하고 있습니다. 저는 이 모든 파일(100개가 훨씬 넘음)을 가져와 The
or 라는 단어로 시작하는 모든 비디오에 레이블을 다시 지정 A
하고 끝으로 이동하라는 요청을 받았습니다 .
예를 들어, 제목이 붙은 비디오 The Kids Performances (2020).mp4
는 로 변경됩니다 Kids Performances, The (2020).mp4
. 왜 그들이 The
제목에 단어와 'A'를 유지하고 싶어하는지 전혀 모르겠지만 그들은 그렇습니다.
Windows를 사용하고 있는데 이 사이트의 게시판에서 The
제목 시작 부분의 를 제거하는 데 사용할 수 있는 비교적 간단한 방법을 찾았지만 이전에 제목의 뒤로 이동하는 방법을 찾을 수 없습니다. 기록된 연도는 항상 (연도)로 표시됩니다.
내가 말하는 내용은 다음과 같습니다.
for %%i in ("*.mp4") do (set fname=%%i) & call :rename
goto :eof
:rename
::Cuts off 1st four chars, then appends prefix
ren "%fname%" "%fname:~4%"
goto :eof
이렇게 하면 제목에서 처음 4자를 일괄 형식으로 제거할 수 있지만 연도가 되기 전에 처음 4자를 제목 끝으로 이동하는 데 문제가 있습니다. 저는 가족들에게 제목에서 이 단어를 모두 빼달라고 간청했지만 설득할 수 없습니다.
이 목표를 달성하기 위한 더 쉬운 방법을 제공할 수 있도록 PC에도 Python을 설치했습니다. 도움을 주실 수 있는 분께 미리 감사드립니다!
답변1
파워셸쉽게 확장 가능한 기사 목록 및 확장 목록(우리는-whatIf
테스트용으로 사용하고 나중에 삭제하여 변경 사항을 실행합니다.)
$ArticleList = @( 'A' , 'The' )
$ExtList = @( '*.avi' , '*.mp4' )
# From folder with files
# Remove "-WhatIf" to execute after testing
gci $ExtList |
? { $_.BaseName -match ( '^({0})\s(\.+)\s(\(\d+\))' -f ( $ArticleList -join '|' )) } |
ReName-Item -NewName { '{0}, {1} {3}{4}' -f $matches[2] , $matches[1] , $matches[3] , $_.Extension -WhatIf }
'^({0})\s(\.+)\s(\(\d+\))' -f ( $ArticleList -join '|' )
정규식을 생성합니다
'^(Article[0]|Article[1]{|...})\s(\.+)\s(\(\d+\))'
세 개의 일치하는 그룹이 있는 경우:
Article : ({0})
TitleTExt: \s(\.+)
(Year) : (\(\d+\))
새 이름을 구성하는 데 사용됩니다.
답변2
Keith Miller가 게시한 것과 같은 자동화된 솔루션은 아니지만 다른 스크립트를 작성하고 싶지 않을 만큼 충분한 cmd 스크립트를 작성한 사람으로서 Excel을 사용합니다.
- cmd 프롬프트를 열고 이름을 바꿀 파일이 있는 폴더로 이동합니다.
dir /b | clip
를 사용하여 (또는dir /b /s | clip
파일이 하위 디렉터리에 저장된 경우) 파일 이름 목록을 클립보드에 복사 하고 이를 Excel에 붙여넣습니다.- 필요한 수식을 사용하여 새 파일 이름을 다른 열에 저장하십시오. 완전히 자동으로 수행할 수 없는 경우 필요한 경우 언제든지 수동으로 결과를 조정할 수 있습니다.
- 새 파일 이름이 만족스러우면 파일 이름을 하나씩 바꾸는 Excel 공식을 만드세요. 이 단계에서 시트는 다음과 유사하게 보일 수 있습니다.
ㅏ | 비 | 씨 | 디 | 이자형 | 에프 | G | |
---|---|---|---|---|---|---|---|
1 | 방식: | ||||||
2 | 원본 파일 이름 | 접두사 | 년도 | 확대 | 파일 이름의 나머지 부분 | 새 파일 이름 | 명령 |
삼 | 키즈 퍼포먼스 (2018).avi | =IF(OR(UPPER(LEFT(A3;2))="A ";UPPER(LEFT(A3;4))="THE ");LEFT(A3;FIND(" ";A3)-1);" ") | =MID(A3;FIND("(";A3)+1;4) | =오른쪽(A3;3) | =MID(A3;IF(B3="";1;LEN(B3)+2);LEN(A3)-LEN(B3)-LEN(C3)-LEN(D3)-IF(B3="";4 ;5)) | =E3&IF(B3="";"";", "&B3)&" ("&C3&")."&D3 | ="ren """&A3&""" """&F3&"""" |
4 | 썸키즈퍼포먼스(2019).mkv | =IF(OR(UPPER(LEFT(A4;2))="A ";UPPER(LEFT(A4;4))="THE ");LEFT(A4;FIND(" ";A4)-1);" ") | =MID(A4;FIND("(";A4)+1;4) | =오른쪽(A4;3) | =MID(A4;IF(B4="";1;LEN(B4)+2);LEN(A4)-LEN(B4)-LEN(C4)-LEN(D4)-IF(B4="";4 ;5)) | =E4&IF(B4="";"";", "&B4)&" ("&C4&")."&D4 | ="ren """&A4&""" """&F4&"""" |
5 | 더 키즈 퍼포먼스(2020).mp4 | =IF(OR(UPPER(LEFT(A5;2))="A ";UPPER(LEFT(A5;4))="THE ");LEFT(A5;FIND(" ";A5)-1);" ") | =MID(A5;FIND("(";A5)+1;4) | =오른쪽(A5;3) | =MID(A5;IF(B5="";1;LEN(B5)+2);LEN(A5)-LEN(B5)-LEN(C5)-LEN(D5)-IF(B5="";4 ;5)) | =E5&IF(B5="";"";", "&B5)&" ("&C5&")."&D5 | ="ren """&A5&""" """&F5&"""" |
1 | 값: | ||||||
2 | 원본 파일 이름 | 접두사 | 년도 | 확대 | 파일 이름의 나머지 부분 | 새 파일 이름 | 명령 |
삼 | 키즈 퍼포먼스 (2018).avi | ㅏ | 2018 | avi | 어린이 공연 | 키즈 퍼포먼스, A (2018).avi | ren "A Kids Performance (2018).avi" "키즈 퍼포먼스, A (2018).avi" |
4 | 썸키즈퍼포먼스(2019).mkv | 2019 | mkv | 썸 키즈 퍼포먼스 | 썸키즈퍼포먼스(2019).mkv | ren "썸 키즈 퍼포먼스(2019).mkv" "썸 키즈 퍼포먼스(2019).mkv" | |
5 | 더 키즈 퍼포먼스(2020).mp4 | 그만큼 | 2020 | mp4 | 어린이 공연 | 키즈 퍼포먼스, The (2020).mp4 | ren "키즈 퍼포먼스(2020).mp4" "키즈 퍼포먼스, 더(2020).mp4" |
- 계산된 명령(위의 예에서는 G3:G5)이 있는 셀을 선택하고 복사하여 클립보드에 넣은 다음 명령 프롬프트 창에서 마우스 오른쪽 버튼을 클릭하거나(마지막 줄에서 Enter를 눌러야 할 수도 있음) 클립보드를 붙여넣습니다. 빈 *.cmd 또는 *.bat 파일에 있는 내용을 이름 변경하려는 파일이 있는 폴더에 저장한 후 실행하세요.