
Все фотографии и видео моего мобильного устройства сохраняются в облаке и синхронизируются с моим ноутбуком с помощью функции 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
.