如何批量移動和重命名資料夾中的圖像/視頻

如何批量移動和重命名資料夾中的圖像/視頻

我的所有行動裝置的照片和影片都備份到雲端,並使用 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-itemmove-item.

相關內容