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 閱讀(442) 評論(0)  編輯  收藏 所屬分類: DOS Windows
          主站蜘蛛池模板: 化德县| 卢湾区| 新巴尔虎右旗| 清徐县| 桃园市| 屯留县| 兴和县| 巴彦淖尔市| 峡江县| 禹城市| 招远市| 永和县| 合作市| 田东县| 宣城市| 扎鲁特旗| 依安县| 嘉义县| 漯河市| 江门市| 巴彦县| 任丘市| 新化县| 磐安县| 府谷县| 安庆市| 南丹县| 视频| 江山市| 凤庆县| 连山| 五原县| 休宁县| 荥阳市| 阳新县| 灌阳县| 金堂县| 光山县| 邯郸市| 伽师县| 眉山市|