如何批量移动和重命名文件夹中的图像/视频

如何批量移动和重命名文件夹中的图像/视频

我的所有移动设备照片和视频都备份到云端,并使用 Dropbox 的“相机上传”功能同步到我的笔记本电脑。所有照片和视频都添加到 Dropbox 文件夹中的“相机上传”文件夹中。

我想将所有这些移动到我的用户文件夹中的照片和视频文件夹中。我使用的是 Windows 8,但这个问题也可能适用于 Windows 7。

理想情况下,我希望将照片移动到My Pictures文件夹中。照片应位于名为日期的文件夹中,而该文件夹应位于名为年份的文件夹中。例如,如果照片拍摄于 2013 年 10 月 4 日,则应位于My Pictures/2013/2013-10-04/

照片本身应重命名为拍摄日期和时间,并可选择在后面加上原始文件名。例如,如果一张照片拍摄于 2013 年 10 月 4 日 14:05:07,名为 IMG003.jpg,则它将位于My Pictures/2013/2013-10-04/2013-10-04 14.05.07 IMG003.jpg

视频的工作方式相同,但会放在My Videos文件夹中。例如,2013 年 10 月 1 日 17:03:01 拍摄的视频将移动到My Videos/2013/2013-10-01/2013-10-01 17.03.01 VIDEO003.mpg

是否有一个应用程序可以用来自动执行此过程,或者可以使用批处理文件来完成?

答案1

假设您使用预装了 Powershell 的 Windows 7/8。

此 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

相关内容