0)
카메라앱을 자주 사용하다보니,
나온 파일들을 일단, 시간순서대로 엮어야 할 필요성이 있더라구요.

1)
문제는, 앱마다 파일 고유(?)의 날짜 특성이 있어서요,
그런 문제를 해결하기 위해 만들어봤습니다.



..

2)


<textarea id=x1_131209_1 style=width:300px;height:300px;overflow:auto; >

 C 드라이브의 볼륨: Windows
 볼륨 일련 번호: 2CFB-52A7

 C:\Documents and Settings\xxxx\바탕 화면\사본 - 130509_1 (3) 디렉터리

2013-09-23  오후 07:16    <DIR>          .
2013-09-23  오후 07:16    <DIR>          ..
2013-05-09  오후 11:52           386,438 09-05-2013 11.12.47.jpg
2013-05-09  오후 11:48         1,367,483 2013-05-09_18-56-47_HDR.jpg
2013-05-09  오후 11:48         1,105,082 2013-05-09_18-58-00_HDR.jpg
2013-05-09  오후 11:48           421,363 2013-05-09_19-14-40_Night.jpg
2013-05-09  오후 11:48         1,009,763 2013-05-09_19-38-40_HDR.jpg
2013-05-09  오후 11:48           547,616 2013-05-09_19-39-49_Night.jpg
2013-05-09  오후 11:48         1,031,007 2013-05-09_19-51-38_HDR.jpg
2013-05-13  오후 03:18         1,408,516 2013-05-10_16-21-48_HDR.jpg
2013-09-23  오후 07:16                 0 d.txt
2013-05-09  오후 11:48           293,980 PANO_20130509_200953.jpg
2013-05-09  오후 11:48           246,804 PANO_20130509_201102.jpg
              11개 파일           7,818,052 바이트
               2개 디렉터리  30,259,392,512 바이트 남음

</textarea>
<textarea id=x2_131209_1 style=width:300px;height:300px;overflow:auto; onclick="execCommand('selectAll');execCommand('copy');" ></textarea>
<script>

(function(){
  function $(v) {
    var ov=document.getElementById(v);

    return ov?ov:document.getElementByName(v);
    }

  var
    x1=$('x1_131209_1')
    , x2=$('x2_131209_1')
    , lineGetter=/[^\n\r]+/g
    , lv, nlv
    , nameOther=/(\d{4})-(\d\d)-(\d\d)\s\s오(전|후)\s(\d\d):(\d\d)\s+([\d,]+)\s+(?!\d{8}-\d{6}_)([^\s][^\n\r]*)/i
    , nameGetters=[
      /^(\d{4})-(\d\d)-(\d\d)_(\d\d)-(\d\d)-(\d\d)_HDR\.jpg$/i
      , /^(\d{4})-(\d\d)-(\d\d)_(\d\d)-(\d\d)-(\d\d)_Night\.jpg$/i
      , /^PANO_(\d{8})_(\d{6})\.jpg$/i
      ]
    , otherGetter=
      /^(\d\d)-(\d\d)-(\d{4})\s(\d\d)\.(\d\d)\.(\d\d)\.jpg$/i
//       '$3$2$1-$4$5$6_'
    , nameDates=[
      '$1$2$3-$4$5$6_'
      , '$1$2$3-$4$5$6_'
      , '$1-$2_'
      ]
    , nv, np, hv, nf
    , sc=/\s/

    , ddv=new Date()
    ;

  function two(v) {
    v+='';
    while (v.length<2) v='0'+v;

    return v;
    }

  String.prototype.replaceAll=function() {
    var ar=arguments, arl=ar.length, ov=this;

    for (i=0; i<arl; i+=2) {
      ov=ov.replace(ar[i], ar[i+1]);
      }

    return ov;
    }

  x1.onclick=function(evt){
    var
      ev=evt?evt:window.event
      , v=ev.srcElement.innerText;
      ;

var ov='';

    while (lv=lineGetter.exec(v)) {
      nf='';

      nlv=lv[0];
      if (nv=nameOther.exec(lv[0])) {
        hv=((nv[4]=='전'?0:12)+(nv[5]%12))+'';
        if (hv.length<2) hv='0'+hv;
        if (nv[8]!='.')
          if (nv[8]!='..')
            if (nv[8]!='d.txt')
              nf=nv[1]+nv[2]+nv[3]+'-'+hv+nv[6]+'00_'+nv[8];
        nlv=nv[8];
        }

      for (np=0; np<nameGetters.length; np++) {
        if (nv=nameGetters[np].exec(nlv)) {
          nf=nv[0].replace(nameGetters[np], nameDates[np])+nv[0];
          break;
          }
        }
      if (np==nameGetters.length) { // UTC 파일 기준..
        if (nv=otherGetter.exec(nlv)) {
          ddv.setUTCFullYear(nv[3]);
          ddv.setUTCMonth(nv[2]-1);
          ddv.setUTCDate(nv[1]);
          ddv.setUTCHours(nv[4]);
          ddv.setUTCMinutes(nv[5]);
          ddv.setUTCSeconds(nv[6]);
          ddv.setUTCMilliseconds(0);

          nf='{y}{m}{d}-{H}{M}{S}_'.replaceAll(
            /{y}/, ddv.getFullYear()
            , /{m}/, two(ddv.getMonth()+1)
            , /{d}/, ddv.getDate()
            , /{H}/, ddv.getHours()
            , /{M}/, ddv.getMinutes()
            , /{S}/, ddv.getSeconds()
            )+nlv;
         
          }
        }

      if (nf) {

        if (sc.exec(nlv)) nlv='"'+nlv+'"';
        if (sc.exec(nf)) nf='"'+nf+'"';

        ov+=nf?'ren '+nlv+' '+nf+'\r\n':'';
        }
      }

    x2.innerText=ov;

    };

})();
</script>


-- 새 창에 샘플 보여주기.. --

..

3)






..

4)
디렉토리 리스트를 dir로 뽑은 내용을 첫번째 textarea 에 넣고 클릭하면,

해당 내용들에서 촬영시각정보를 추출해서
이름변환용 MS-DOS batch 파일 내용을 만들어

두번째 textarea 에 출력한다..는 내용입니다.

..

5)
lv 는 라인입력기이고, ( from lineGetter )
nf 는 변환될 파일명, 
nameOther 는 해당 파일의 날짜프로필 추출용이고,

nameGetter 는 특정파일(?)들의 파일명프로필,
nameDates 는 특정파일(?)들의 출력용 파일명앞 프로필입니다.

파일명의 날짜를 처리하던 과정에서,
특정 파일은 날짜가 UTC (세계표준시.. 아마도..) 로 맞춰져 있는 경우가 보여서요..

처리방법을 번호로 매겨놓지 않고, 따로 처리했습니다. ( from otherGetter )

..

6)
lineGetter 에 /.../g 가 왜 붙어있나..싶더니,
떼놓고 하면 프로그램 멈추더라구요.. v 처리를 따로 하지 않은 까닭이겠죠.

..

wantHate killofki@.




Posted by killofki
,