Eu tenho um grupo de arquivos chamado comotitle_december_word1_word2.pnge deseja iterar pelo diretório e trocar word1
e word2
dentro de cada arquivo.
ou seja, vou de"button_december_state_pressed.png" -> "button_december_pressed_state.png"
Alguma sugestão sobre como posso conseguir isso?
A maioria dos programas em lote que encontrei para o OS X não pode especificar um caractere para dividir as palavras e eu esperava que alguém pudesse me ajudar com um script rápido para resolver isso.
Responder1
Tente rename
utilitário. Ele usa sed
sintaxe para substituir nomes
rename 's/old-name/new-name/' files
O comando será parecido com isto
rename 's/$(.*december_)(.*)_(.*)(.png)^/\1\3_\2\4/' *.png
Responder2
experimente o pequenorenomear-regex(sem instalação):
rr *_*_*_*.png "(.*)_(\w+)_(\w+).png" "$1_$3_$2.png"
Responder3
Editar: aqui está um código de lote para fazer isso. Copie este código e coloque-o em um arquivo "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
Coloquei um echo
antes do ren
que você pode testar o código sem problema. Se a saída estiver OK, remova oecho
Responder4
Não é bonito, mas acho que faz o que você deseja se todos os seus arquivos estiverem na mesma pasta
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']
ou você pode usar formato e/ou um loop 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]))