〔批处理〕从数码相片得到照相时间


@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


剩下的就是改名了,由于要防备同名,也就是一秒内拍了两三张这样的情况,所以需要追加数字序列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值