Arquivo de lote renomeia script que troca substrings em nome de arquivo?

0

Eu tenho um grupo de arquivos chamado title_december_word1_word2.png e quero iterar pelo diretório e trocar word1 e word2 dentro de cada arquivo.

i.e. ir de "button_december_state_pressed.png" -> "button_december_pressed_state.png"

Alguma sugestão de como eu posso conseguir isso?

A maioria dos programas em lote que eu 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.

    
por user1911904 05.12.2013 / 15:45

4 respostas

0

Tente rename util. Usa a sintaxe sed para substituir os nomes

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

O comando será parecido com isto

 rename 's/$(.*december_)(.*)_(.*)(.png)^/_/' *.png
    
por 05.12.2013 / 16:04
0

experimente o pequeno rename-regex (sem instalação):

rr *_*_*_*.png "(.*)_(\w+)_(\w+).png" "$1_$3_$2.png"
    
por 05.12.2013 / 17:00
0

Edit: 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

Eu coloquei um echo antes do ren que você pode testar o código sem problemas. Se a saída for OK, remova o echo

    
por 05.12.2013 / 16:22
0

Não é bonito, mas acho que ele faz o que você quer 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 format e / ou for loop?

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]))
    
por 05.12.2013 / 16:53