Как можно массово переместить и переименовать изображения/видео в папке?

Как можно массово переместить и переименовать изображения/видео в папке?

Все фотографии и видео моего мобильного устройства сохраняются в облаке и синхронизируются с моим ноутбуком с помощью функции Dropbox "Camera Upload". Все фотографии и видео добавляются в папку "camera uploads" в папке Dropbox.

Я хочу переместить все это в папки Photos и Videos в папке пользователя. Я использую Windows 8, но этот вопрос может быть и для Windows 7.

В идеале я хочу переместить фотографии в My Picturesпапку. Фотография должна быть в папке с именем даты, а эта папка должна быть в папке с именем года. Например, если фотография была сделана 4 октября 2013 года, она должна быть вMy Pictures/2013/2013-10-04/

Сама фотография должна быть переименована в дату и время, когда она была сделана, и, по желанию, за ней должно следовать оригинальное имя файла. Например, если фотография была сделана в 14:05:07 4 октября 2013 года и называлась IMG003.jpg, она будет вMy Pictures/2013/2013-10-04/2013-10-04 14.05.07 IMG003.jpg

Видео будут работать так же, но будут помещены в My Videosпапку. Например, видео, снятое в 17:03:01 1 октября 2013 года, будет перемещено вMy Videos/2013/2013-10-01/2013-10-01 17.03.01 VIDEO003.mpg

Есть ли приложение, которое можно использовать для автоматизации этого процесса, или это можно сделать с помощью пакетного файла?

решение1

Предположим, вы используете Windows 7/8, где Powershell предустановлен.

Этот скрипт Powershell копирует файлы из исходной папки ( $source) в папку назначения ( $dest).
Вы фильтруете нужные файлы с помощью $filterмассива, например, только изображения или видео.

  • Новая папка изменена на<destination_folder\old_subfolders\YYYY\YYYY-MM-DD>
  • Новое имя файла изменено на<YYYY-MM-DD hh.mm.ss oldfilename.extension>

Каждая строка прокомментирована, и я намеренно не использовал псевдонимы.

### 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
    }

Сначала протестируйте скрипт с помощью copy-itemкоманды. Позже вы можете заменить copy-itemее на move-item.

Связанный контент