다음과 같은 이름의 파일 그룹이 있습니다.title_december_word1_word2.png디렉토리와 스왑 word1
및 word2
각 파일 내에서 반복하고 싶습니다.
즉, 에서 가다"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]))