Script de renomeação de arquivo em lote trocando substrings no nome do arquivo?

Script de renomeação de arquivo em lote trocando substrings no nome do arquivo?

Eu tenho um grupo de arquivos chamado comotitle_december_word1_word2.pnge deseja iterar pelo diretório e trocar word1e word2dentro 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 renameutilitário. Ele usa sedsintaxe 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 echoantes do renque 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]))

informação relacionada