폴더의 이미지/비디오를 대량으로 이동하고 이름을 바꾸려면 어떻게 해야 합니까?

폴더의 이미지/비디오를 대량으로 이동하고 이름을 바꾸려면 어떻게 해야 합니까?

내 모바일 장치의 모든 사진과 비디오는 클라우드에 백업되고 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.

관련 정보