web-dev-qa-db-ja.com

フォルダ内の画像/ビデオを一括移動して名前を変更するにはどうすればよいですか?

私のモバイルデバイスの写真とビデオはすべてクラウドにバックアップされ、Dropboxの「カメラアップロード」機能を使用してラップトップに同期されます。すべての写真とビデオは、Dropboxフォルダーの「カメラアップロード」フォルダーに追加されます。

これらすべてをユーザーフォルダ内の写真とビデオのフォルダに移動したいと思います。私はWindows8を使用していますが、この質問はWindows7にも当てはまる可能性があります。

理想的には、写真をMy Picturesフォルダーに移動します。写真はdateという名前のフォルダーにあり、そのフォルダーはyearという名前のフォルダーにある必要があります。たとえば、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に移動されます。

このプロセスを自動化するために使用できるアプリはありますか、それともバッチファイルを使用して実行できますか?

3
iagdotme

PowershellがプリインストールされているWindows7/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に置き換えることができます。

2
nixda