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


Todas las fotos y videos de mi dispositivo móvil están respaldados en la nube y sincronizados con mi computadora portátil usando 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 mover todo esto a mis carpetas de 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 Pictures carpeta. La foto debe estar en una carpeta llamada la fecha y esa carpeta debe estar en una carpeta llamada como el año. Por ejemplo, si una foto fue tomada el 4 de octubre de 2013, debe estar en My Pictures/2013/2013-10-04/

La foto en sí debe ser renombrada a la fecha y hora en que se tomó la foto y, opcionalmente, seguido del nombre del archivo original. Por ejemplo, si una foto se tomó a las 14:05:07 del 4 de octubre de 2013 y se llamó IMG003.jpg, estaría en My Pictures/2013/2013-10-04/2013-10-04 14.05.07 IMG003.jpg

Los videos funcionarían de la misma manera, pero se colocarían en el My Videos carpeta. Por ejemplo, un video tomado a las 17:03:01 del 1 de octubre de 2013 se moverá a My 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?


3


origen




Respuestas:


Suponiendo que usa 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)
Filtra para sus archivos deseados con $filter array, por ejemplo, solo imágenes o videos.

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

Cada línea está comentada y no he usado 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, prueba la secuencia de comandos con copy-item mando. Más tarde puedes reemplazar copy-item con move-item.


2



Gracias por esto. Lo he intentado pero no puedo hacerlo funcionar. El primer problema fue que Powershell no permitía el guión. Una vez que lo ordené, pareció funcionar pero no hizo nada. Lo intentaré más tarde una vez que tenga un poco más de tiempo. ¿Habría alguna razón por la cual el script parecería estar ejecutándose y no lanzaría ningún mensaje de error pero no haría nada? - iagdotme
Agregué dos líneas para una mejor depuración ($destSub y $destName) Mire con cuidado si están acumulados correctamente. Presta atención a [,] y \ personajes. Configure un caso de prueba simple en su escritorio con 2 o tres archivos - nixda