Renomeando vários arquivos dentro de uma pasta usando comandos de lote do Windows

2

Isso está levando o post aqui e girando as coisas um pouco. Como típico, estou tentando renomear várias imagens dentro de uma pasta para ser o nome da pasta em que estão e depois adicionar o sufixo "photo1", "photo2" etc.

Em outras palavras, estou tentando sair daqui:

Folder1
  IMG_001.jpg
  IMG_001.jpg
  IMG_003.jpg

Para cá:

Folder1
  Folder1_photo1.jpg
  Folder1_photo2.jpg
  Folder1_photo3.jpg

Existem várias centenas dessas pastas "Pasta", e cada uma delas precisará ter as fotos dentro dela renomeadas.

Eu sei que existem softwares de terceiros que podem fazer isso, mas estou procurando uma maneira de executar isso como um .bat do Windows.

Se alguém tiver uma ideia, por favor, compartilhe. Obrigado pelo seu tempo.

    
por user3413088 13.03.2014 / 00:49

5 respostas

4

Supondo que todas as pastas estejam na mesma pasta raiz e todas as imagens correspondam ao modelo IMG_n.jpg, o seguinte liner deverá funcionar na linha de comando:

for /d %A in ("yourRootPath\*") do @for %B in ("%A\img_*.jpg") do @for /f "tokens=1* delims=_0" %C in ("%~nB") do ren "%B" "%~nxA_photo%D.jpg"

Não se esqueça de duplicar as porcentagens se você usar o comando em um script em lote.

    
por 13.03.2014 / 01:17
2

Vejo que você pediu Batch , mas outros podem achar o PowerShell útil

Get-Childitem "C:\my\folder\" -Recurse -Include *.jpg | ForEach {             
    Rename-Item $_ "$($_.Directory.Name)_$($_.Name -ireplace "img_(0+)", "photo").jpg
}
    
por 13.03.2014 / 01:46
1

Quão perto você precisa chegar?

Isso deve ser feito, mas manterá o 0 nos números, por exemplo, folder1_photo001.jpg em vez de folder1_photo1.jpg :

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

for /d %%d in (*) do (

    for %%f in ("%%d/img_*.jpg") do (
        set fname=%%f
        set fname=!fname:IMG_=photo!
        echo ren "%%d/%%f" "%%d/%%d_!fname!"
    )
)

(Isso imprimirá os comandos de renomeação que serão executados. Remova echo para que eles sejam executados. Faça um backup primeiro, verifique se você está satisfeito com isso, se não há desfazer, etc.).

Eu não consigo pensar em uma boa alternativa se você precisar de 1 em vez de 001. Substituir o 00 iria arriscar a mudança de nomes onde há um número no nome também, e a contagem se quebraria se os números não fossem contíguo.

[editar: pinçada de outra resposta, eu estava assumindo que as imagens são as únicas coisas nas pastas. Agora olha apenas para o padrão img_*.jpg ].

    
por 13.03.2014 / 01:25
0

Veja alguns softwares chamados Irfanview. Ele possui muitos utilitários sofisticados de renomeação, redimensionamento, conversão, etc. incorporados. Eu acho que vai fazer o que você quiser.

    
por 13.03.2014 / 00:58
0

Uma abordagem muito mais simples. Não tenho certeza se isso funciona, mas experimente.

cd "path of the folder that contains the photos"

for /L %%n in (1 1 %random%) do (

    for %%f in (*.jpg) do (

        rename "%%f" "photo_%%n.jpg"

    )

)
    
por 03.05.2014 / 06:40