Como posso mover e renomear em massa imagens / vídeos em uma pasta

3

Todas as fotos e vídeos do meu dispositivo móvel são copiados para a nuvem e sincronizados com o meu laptop usando o recurso "Camera Upload" do Dropbox. Todas as fotos e vídeos são adicionados à pasta "uploads de câmeras" na pasta Dropbox.

Eu estou querendo mover todos estes para minhas pastas de fotos e vídeos dentro da minha pasta de usuário. Eu estou usando o Windows 8, mas esta questão também poderia ser para o Windows 7.

Idealmente, eu quero fotos movidas para o My Pictures pasta. A foto deve estar em uma pasta chamada data e essa pasta deve estar em uma pasta nomeada como o ano. Por exemplo, se uma foto foi tirada em 4 de outubro de 2013, ela deve estar em My Pictures/2013/2013-10-04/

A foto em si deve ser renomeada para a data e hora em que a foto foi tirada e, opcionalmente, seguida pelo nome do arquivo original. Por exemplo, se uma foto foi tirada às 14:05:07 de 4 de outubro de 2013 e foi chamada de IMG003.jpg ela estaria em My Pictures/2013/2013-10-04/2013-10-04 14.05.07 IMG003.jpg

Os vídeos funcionariam da mesma forma, mas seriam colocados no My Videos pasta. Por exemplo, um vídeo feito às 17:03:01 de 1º de outubro de 2013 seria movido para My Videos/2013/2013-10-01/2013-10-01 17.03.01 VIDEO003.mpg

Existe um aplicativo que eu poderia usar para automatizar esse processo ou poderia ser feito usando um arquivo em lotes?

iagdotme
fonte

Respostas:

2

Supondo que você use o Windows 7/8, onde o Powershell é pré-instalado.

Este script Powershell copia arquivos de uma pasta de origem ( $source ) para uma pasta de destino ( $dest ).
Você filtra os arquivos desejados com $filter array, por exemplo, apenas fotos ou vídeos.

  • Nova pasta é alterada para <destination_folder\old_subfolders\YYYY\YYYY-MM-DD>
  • O novo nome do arquivo é alterado para <YYYY-MM-DD hh.mm.ss oldfilename.extension>

Cada linha é comentada e eu não usei alias de propósito.

### set input folder
$source = "C:\My Dropbox\Camera Uploads"      

### set output folder
$dest = "C:\Users\<USERNAME>\My Pictures"

### set which file types to include/copy
$filter = @("*.png", "*.jpg", "*.jpeg")

### retrieve all files from source folder and pipe them to copy 
Get-ChildItem $source -include $filter -recurse | foreach {         

    ### build new destination folder string (syntax: destination folder + old subfolders + year + year-month-day)
    $destSub = $_.directoryname.Replace($source, $dest +'\'+ $_.CreationTime.Year +'\'+ $_.CreationTime.ToString("yyyy-MM-dd"))        
    $destSub

    ### check if new destination folder exists, otherwiese create new subfolder(s)
    if (-not (Test-Path -literalpath $destSub)) { New-Item $destSub -Type Directory }    

    ### build new file name string (syntax: new destination folder + year-month-date hours.minutes.seconds + oldname.extension)
    $destName = $destSub +'\'+ $_.CreationTime.ToString("yyyy-MM-dd hh.mm.ss") + ' ' + $_.name    
    $destName

    ### copy source file to new file name
    copy-item -literalpath $_.Fullname -destination $destName
    }

Primeiro, teste o script com copy-item comando. Mais tarde você pode substituir copy-item com move-item.

nixda
fonte
Obrigado por isso. Eu tentei isso, mas não consigo fazê-lo funcionar. A primeira questão foi que Powershell não estava permitindo o roteiro. Uma vez que eu classifiquei, parecia correr, mas não fez nada. Vou tentar novamente mais tarde, quando tiver mais tempo. Haveria algum motivo para o script parecer estar funcionando e não lançar nenhuma mensagem de erro, mas não fazer nada de verdade?
iagdotme
Eu adicionei duas linhas para melhor depuração ( $destSub e $destName ). Observe atentamente se eles estão sendo construídos corretamente. Preste atenção em [,] e \ caracteres. Configure um caso de teste simples em sua área de trabalho com 2 ou três arquivos
nixda