@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 閱讀(436)
評論(0) 編輯 收藏 所屬分類:
DOS Windows