Batch renomeia arquivos usando o PowerShell ou outro

1

Eu tenho uma pasta de imagens tiradas em dois telefones celulares diferentes. Os dois telefones usam formatos de nome de arquivo ligeiramente diferentes. Eu quero mudar um deles para combinar com o outro, então eu tenho um bom álbum de fotos.

Como posso alterar um nome de arquivo de 20110809_121158.jpg para 2011-08-09 12.11.58.jpg ?

Será ótimo se a solução vier usando o Powershell, mas qualquer outra opção também é bem vinda!

    
por user166463 26.03.2013 / 15:29

1 resposta

1

Aqui está uma maneira de fazer isso, usando SubString:

function getNewFileName($fname)
{
    $year = $fname.SubString(0,4)
    $month = $fname.SubString(4,2)
    $day = $fname.SubString(6,2)
    $hours = $fname.SubString(9,2)
    $minutes = $fname.SubString(11,2)
    $seconds = $fname.SubString(13,2)
    $new_fname = [string]::Format( "{0}-{1}-{2} {3}.{4}.{5}.jpg", $year,$month,$day,$hours,$minutes,$seconds) 
    return $new_fname;
}

Para usar isso para renomear uma seleção de entradas de arquivo em uma pasta, você pode usar algo assim:

$fileEntries = Get-ChildItem *_* -name 

foreach($fileName in $fileEntries) 
{ 
    $newFileName = getNewFileName($fileName)
    Write-Host -NoNewLine Rename-Item $filename $newFileName 
    Write-Host
}         

Como escrito, este script não vai realmente mudar nada - ele permite que você visualize o que mudaria, enviando o comando rename proposto para o console. Para realmente renomear os arquivos, você teria que remover as instruções "Write-Host". Este script assume que tudo o que você tem na pasta são os dois tipos de nomes de arquivos que você mencionou.

    $fileEntries = Get-ChildItem *_* -name 

Seleciona apenas os arquivos que contêm um sublinhado, para que não tentemos renomear o outro tipo de arquivo. Este script deve ser executado na pasta de assunto; executá-lo em outro lugar pode fazer coisas estranhas nos arquivos errados.

    
por 26.03.2013 / 16:43