posts - 41,  comments - 40,  trackbacks - 0

          @ECHO OFF

          SETLOCAL EnableDelayedExpansion

          DEL /F /Q picture.txt 2>NUL


          ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          ::
          :: 原理:
          ::
          :: 一般情況下,有EXIF信息的照片,會有三處時間(當然還有特例),第一處格式為:
          ::
          :: 2001:01:01 02:04:18
          ::
          :: 第二、第三處是在一起的,中間有個NULL值,如下:
          ::
          :: 2001:01:01 02:04:18[NULL]2001:01:01 02:04:18
          ::
          :: 我通過WindowsXP和ACDSee8分析了很多張圖片,發現第一處的時間很可能有誤,
          ::
          :: 也就是說,WindowsXP和ACDSee8實際使用的應該是第二或第三處的時間,
          ::
          :: 使用第二處的時間。
          ::
          ::
          :: 注意:
          ::
          :: 1、有些人喜歡把一些秘密藏在圖片中,而秘密有可能包含時間,所以,可能有問題,
          ::
          ::??? 不過,這種情況好像很少?
          ::
          :: 2、由于FINDSTR.EXE命令的局限性(并非真正的正則表達式),錯誤是難免的。
          ::
          ::
          :: 另外:
          ::
          :: 1、開始我把*.jpeg也列入查找,但發現*.jpe可以搜索到*.jpeg,只好剔掉*.jpeg了
          ::
          :: 2、我討厭ACDSee8重命名時,把2001-01-01 02-01-19改成2001-01-01 2-1-19,不好看!
          ::
          :: 3、其實我寫這個的目的就是修改圖片名稱為照相時間,剩下的以后寫
          ::
          ::
          :: Author: NeedJava
          ::
          :: Modified: 2007-08-15/2007-08-24/2007-08-25
          ::
          ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          FOR /R %%a IN ( *.jpg *.jpe *.jfif *.tif ) DO (

          ?? CLS

          ?? ECHO 正在處理〔!%%a!〕

          ?? SET "final=NULL"

          ?? IF "!final!"=="NULL" (

          ????? SET /A times=0

          ????? FOR /F "delims=" %%i IN ( 'FINDSTR.EXE "200 199 201 202" "%%a" 2^>NUL ^| MORE 2^>NUL ^| FINDSTR.EXE /R "\<[1-2][0-9][0-9][0-9][:][0-1][0-9][:][0-3][0-9] [0-2][0-9][:][0-5][0-9][:][0-5][0-9]\>" 2^>NUL' ) DO (

          ????????? SET /A times+=1

          ????????? IF !times! EQU 2 (

          ???????????? SET "parse=%%i"

          ???????????? IF "!parse:~-3,1!"==":" IF "!parse:~-9,1!"==" " (

          ??????????????? SET "parse=!parse:~-19!"

          ??????????????? ECHO Found [!parse!]

          ??????????????? FOR /F "tokens=1,2,3,4,5,6 delims=: " %%A IN ( "!parse!" ) DO (

          ??????????????????? SET "final=%%A-%%B-%%C %%D-%%E-%%F"

          ??????????????? )

          ???????????? )

          ????????? )

          ????? )

          ?? )

          ?? IF "!final!"=="NULL" (

          ????? FOR /F "delims=" %%i IN ( 'FINDSTR.EXE /I "DateTimeOriginal" "%%a" 2^>NUL' ) DO (

          ????????? SET "parse=%%i"

          ????????? IF /I "!parse:~-24,7!"=="</exif:" IF "!parse:~-30,1!"=="+" (

          ???????????? SET "parse=!parse:~-49,19!"

          ???????????? ECHO Found [!parse!]

          ???????????? FOR /F "tokens=1,2,3,4,5,6 delims=-:T" %%A IN ( "!parse!" ) DO (

          ???????????????? SET "final=%%A-%%B-%%C %%D-%%E-%%F"

          ???????????? )

          ????????? )

          ????? )

          ?? )

          ?? IF NOT "!final!"=="NULL" (

          ????? ECHO Parse [!final!]

          ????? ECHO [%%~nxa]>>picture.txt

          ????? ECHO !final!>>picture.txt

          ????? ECHO;>>picture.txt

          ?? )

          )

          GOTO :EOF

          @ECHO ON

          剩下的就是改名了,由于要防備同名,也就是一秒內拍了兩三張這樣的情況,所以需要追加數字序列
          ?

          posted on 2007-08-14 19:42 NeedJava 閱讀(447) 評論(0)  編輯  收藏 所屬分類: DOS Windows
          主站蜘蛛池模板: 丰城市| 崇州市| 万全县| 莱芜市| 廉江市| 上林县| 乌苏市| 沙洋县| 庄浪县| 桂林市| 榆中县| 阿城市| 津市市| 深圳市| 新兴县| 台南县| 高邑县| 临猗县| 鄂伦春自治旗| 寿阳县| 二连浩特市| 密山市| 宣武区| 申扎县| 井冈山市| 达拉特旗| 宣化县| 于都县| 海原县| 柘城县| 九台市| 兰考县| 永靖县| 雷波县| 赞皇县| 尚志市| 德安县| 那坡县| 盐亭县| 普格县| 仲巴县|