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 阅读(327) 评论(0)  编辑  收藏 所属分类: DOS Windows

只有注册用户登录后才能发表评论。


网站导航: