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


3

モバイルデバイスの写真とビデオはすべてクラウドにバックアップされ、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

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

回答:


2

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


これをありがとう。私はこれを試しましたが、動作させることができません。最初の問題は、Powershellがスクリプトを許可していなかったことです。並べ替えると、実行されているように見えたが何もしなかった。もう少し時間があればもう一度やり直します。スクリプトが実行されているように見え、エラーメッセージをスローしないが実際には何もしない理由はありますか?
iagdotme

デバッグのために2行追加しました($destSubおよび$destName)。それらが正しく構築されている場合は慎重に見てください。[、]、および\文字に注意してください。2または3のファイルをデスクトップに簡単なテストケースを設定
nixda
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.