¿Cómo puedo mover y cambiar el nombre de imágenes/videos en masa en una carpeta?

¿Cómo puedo mover y cambiar el nombre de imágenes/videos en masa en una carpeta?

Todas las fotos y videos de mi dispositivo móvil tienen una copia de seguridad en la nube y se sincronizan con mi computadora portátil mediante la función "Carga de cámara" de Dropbox. Todas las fotos y videos se agregan a la carpeta "cargas de cámara" en la carpeta de Dropbox.

Quiero moverlos todos a mis carpetas Fotos y Videos dentro de mi carpeta de usuario. Estoy usando Windows 8 pero esta pregunta también podría ser para Windows 7.

Idealmente quiero que las fotos se muevan a la My Picturescarpeta. La foto debe estar en una carpeta llamada fecha y esa carpeta debe estar en una carpeta llamada año. Por ejemplo, si una foto fue tomada el 4 de octubre de 2013, debería estar enMy Pictures/2013/2013-10-04/

Se debe cambiar el nombre de la foto en sí a la fecha y hora en que se tomó y, opcionalmente, seguida del nombre del archivo original. Por ejemplo, si una foto fue tomada a las 14:05:07 del 4 de octubre de 2013 y se llamó IMG003.jpg, estaría enMy Pictures/2013/2013-10-04/2013-10-04 14.05.07 IMG003.jpg

Los videos funcionarían igual pero se colocarían en la My Videoscarpeta. Por ejemplo, un vídeo tomado a las 17:03:01 del 1 de octubre de 2013 se movería aMy Videos/2013/2013-10-01/2013-10-01 17.03.01 VIDEO003.mpg

¿Existe alguna aplicación que pueda usar para automatizar este proceso o podría hacerse usando un archivo por lotes?

Respuesta1

Suponiendo que utiliza Windows 7/8 donde Powershell está preinstalado.

Este script de Powershell copia archivos de una carpeta de origen ( $source) a una carpeta de destino ( $dest).
Usted filtra los archivos deseados con $filteruna matriz, por ejemplo, solo imágenes o videos.

  • La nueva carpeta se cambia a<destination_folder\old_subfolders\YYYY\YYYY-MM-DD>
  • El nuevo nombre del archivo se cambia a<YYYY-MM-DD hh.mm.ss oldfilename.extension>

Cada línea está comentada y no he utilizado alias a 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
    }

Primero, pruebe el script con copy-itemel comando. Luego puedes reemplazar copy-itemcon move-item.

información relacionada