Everything is pointless from a certain perspective.

utena.egloos.com

포토로그




파일날짜를 파일명에 맞추어 수정하는 스크립트 나중에 다시 찾아볼 것들

만든 이유
폰카로 찍은 사진들을 이리저리 백업/이동하고 나니 날짜가 2800년으로 되거나하는 멍멍같은 일이 생겨서 최종적으로 날짜를 제대로 바꿔주기 위함.

-=-=-=-=-=-=-=-=-=- 코드 시작 -=-=-=-=-=-=-=-=-=-
' 사용상 주의점
' 1. 파일명에 날짜와 숫자가 들어있으면 그에 맞춰 파일 날짜를 바꿔줌
' 2. read only로 되어있으면 풀고 바꾼 담에 다시 read only로 바꿈
' 3. 지원하는 파일명 형식은 (저게 다 날짜 시각이라는 전제)
' 20160510_131556.jpg
' 20161016_135046_어쩌구.jpg
' KakaoTalk_20130320_091441915.jpg
' Screenshot_20150325-122304.png
' 4. 날짜바꾸는 파일은
' jpg, png 등등등
' 5. 이미 세팅되어있으면 넘어감
' locale 무관하게 만들어봤으나 테스트 안 해봄
' 6. 끝나면 2초간 끝났다고 알려줌

Const ReadOnly = 1

'뻐킹 윈도그에는 ISO 8601로 세팅하는게 없음
'currentLocale = GetLocale()
'SetLocale 8601

Set WshShell = CreateObject("WScript.Shell")
strCurDir = WshShell.CurrentDirectory

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(strCurDir)

Set oFSO = CreateObject("Scripting.FileSystemObject")
For Each oFile In oFSO.GetFolder(strCurDir).Files
select case UCase(oFSO.GetExtensionName(oFile.Name))
case "JPG", "PNG", "GIF", "TIF", "TIFF"
'그림파일이면 걍 제목 넘김
ProcessFiles oFile.Name
case else
End select
Next

'date time 원상복구
'SetLocale currentLocale

Set oFSO = Nothing
set objFolder=nothing
'끝낫다고 알림
intResult = WshShell.Popup("All Done", 2,"" ,1)
Set WshShell = Nothing
'main 끗


'서브 시작
'----------------------------------------------------------------------
Sub ProcessFiles(Filename)

NotADate=true
SetItToRO=false

'왼쪽 4자리가 20으로 시작하는 숫자면
if isnumeric(left(Filename,4)) and left(Filename,2)="20" then
datestart=1
NotADate=false
fileyear=mid(Filename,datestart,4)
filemonth=mid(filename,datestart+4,2)
fileday=mid(filename,datestart+4+2,2)
filehour=mid(filename,datestart+4+2+2+1,2)
filemin=mid(filename,datestart+4+2+2+1+2,2)
filesec=mid(filename,datestart+4+2+2+1+2+2,2)
end if
'KakaoTalk_20130320_091441915.jpg
if left(Filename,10)="KakaoTalk_" then
datestart=11
NotADate=false
fileyear=mid(Filename,datestart,4)
if isnumeric(fileyear) then
else
exit sub
end if
filemonth=mid(filename,datestart+4,2)
fileday=mid(filename,datestart+4+2,2)
filehour=mid(filename,datestart+4+2+2+1,2)
filemin=mid(filename,datestart+4+2+2+1+2,2)
filesec=mid(filename,datestart+4+2+2+1+2+2,2)
end if
'Screenshot_20150325-122304.png
if left(Filename,11)="Screenshot_" then
datestart=12
NotADate=false
fileyear=mid(Filename,datestart,4)
if isnumeric(fileyear) then
else
exit sub
end if
filemonth=mid(filename,datestart+4,2)
fileday=mid(filename,datestart+4+2,2)
filehour=mid(filename,datestart+4+2+2+1,2)
filemin=mid(filename,datestart+4+2+2+1+2,2)
filesec=mid(filename,datestart+4+2+2+1+2+2,2)
end if

'파일명이 날짜모양이 아니면 패스
if NotADate then exit sub

'set objFile=oFSO.getfile(Filename)
Set objFolderItem = objFolder.ParseName(Filename)

'파일명 날짜가 파일날짜와 같으면 exit-------------------
'파일날짜
filedate=year(objFolderItem.ModifyDate) & right("0" & month(objFolderItem.ModifyDate),2) & right("0" & day(objFolderItem.ModifyDate),2) & right("0" & hour(objFolderItem.ModifyDate),2) & right("0" & minute(objFolderItem.ModifyDate),2) & right("0" & second(objFolderItem.ModifyDate),2)
'파일명 날짜
filenamedate= fileyear & filemonth & fileday & filehour & filemin & filesec
if filedate=filenamedate then exit sub
'파일명 날짜가 파일날짜와 같으면 exit 끗-----------------


'readonly면 풀고
If oFile.Attributes AND ReadOnly Then
SetItToRO=true
oFile.Attributes = oFile.Attributes XOR ReadOnly
end if

'실제 파일 날짜 바꾸는 부분. cdate쓰기 싫어서 걍 일케 함
objFolderItem.ModifyDate = filemonth & "/" & fileday & "/" & fileyear & " " & filehour & ":" & filemin & ":" & filesec

'readonly였으면 다시 셋
If SetItToRO Then
oFile.Attributes = oFile.Attributes XOR ReadOnly
end if

end sub

덧글

  • 2018/04/22 18:50 # 삭제 비공개

    비공개 덧글입니다.
  • 민환 2018/04/22 18:58 # 삭제

    exif 정보로 바꿔주는건가요
    "?
  • utena 2018/04/28 15:23 #

    저게 그냥 텍스트 붙여넣고 .vbs로 extension만 바꿔서 실행시키면 되는데요, exif가아니라 파일명만 바꾸는 겁니다. exif를 바꿀 필요까진 없어서 생각안해봤네요
  • utena 2018/04/29 19:14 #

    아 생각해보니 파일명바꾸는게 아니라 파일 property바꾸는 거네요 ㅋ
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.