배치 파일 이름 바꾸기 스크립트가 파일 이름의 하위 문자열을 교환합니까?

배치 파일 이름 바꾸기 스크립트가 파일 이름의 하위 문자열을 교환합니까?

다음과 같은 이름의 파일 그룹이 있습니다.title_december_word1_word2.png디렉토리와 스왑 word1word2각 파일 내에서 반복하고 싶습니다.

즉, 에서 가다"button_december_state_pressed.png" -> "button_december_pressed_state.png"

이 작업을 수행하는 방법에 대한 제안이 있으십니까?

내가 찾은 OS X용 배치 프로그램 대부분은 단어를 분해하기 위해 문자를 지정할 수 없으며 누군가가 이 문제를 해결하기 위한 빠른 스크립트로 나를 도울 수 있기를 바랐습니다.

답변1

유틸리티를 사용해 보세요 rename. sed이름을 바꾸기 위해 구문을 사용합니다.

rename 's/old-name/new-name/' files

명령은 다음과 같습니다

 rename 's/$(.*december_)(.*)_(.*)(.png)^/\1\3_\2\4/' *.png

답변2

작은 것을 시도해 보세요이름 바꾸기 정규식(설치 없음):

rr *_*_*_*.png "(.*)_(\w+)_(\w+).png" "$1_$3_$2.png"

답변3

편집 : 이를 수행하는 배치 코드는 다음과 같습니다. 이 코드를 복사하여 "Swap.bat" 파일에 넣습니다.

@ECHO OFF

for %%a in (*.png) do (
     for /f "tokens=1,2,3,4 delims=_" %%b in ('echo %%~na') do (
        echo ren "%%a" "%%b_%%c_%%e_%%d%%~xa"))
Pause

문제 없이 코드를 테스트할 수 있다는 점을 echo앞에 붙였습니다 . ren출력이 정상이면 제거하십시오.echo

답변4

예쁘지는 않지만 모든 파일이 같은 폴더에 있으면 원하는 대로 작동한다고 생각합니다.

import os

files = os.listdir(os.getcwd())

[os.rename(i,
    '_'.join([i.split('_')[0],
        i.split('_')[1],
        i.split('_')[3][:-4],
        i.split('_')[2]+
        '.png'])) for i in files if len(i.split('_')) == 4 and i[-3:] == 'png']

아니면 형식 및/또는 for 루프를 사용할 수 있나요?

for fileName in files:
    if fileName[-4:] == '.png':
        words = fileName[:-4].split('_')
        os.rename(fileName,
            '{0}_{1}_{2}_{3}.png'.format(words[0],
                words[1],
                words[3],
                words[2]))

관련 정보