找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 34518|回复: 8

[文件操作] 批处理如何获取照片拍摄日期重命名?

[复制链接]
发表于 2013-10-25 11:34:10 | 显示全部楼层 |阅读模式
批处理如何获取照片拍摄日期重命名?

通常一个照片图像文件会生成三个日期:
拍摄日期 2013/8/8
创建日期 2013/10/25
修改日期 2013/8/14

%~tI 获取的是修改日期,如何才能获取“拍摄日期”?请高手们指点。

一、示例材料
链接:http://pan.baidu.com/share/link? ... 0&uk=2248425695 密码:adz6
二、要求
请用DOS批处理完成,不要使用第三方软件。
发表于 2013-10-25 13:05:37 | 显示全部楼层
问题是要足够的信息匹配
有时图像的eif信息不够就出错的
  1. @echo off
  2. set "n=[1-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9]"
  3. for /f "tokens=1* delims=:" %%i in ('findstr /i "%n%" "*.jpg" ^|more^|findstr /i "\.jpg:%n%"') do (
  4.     echo 文件 %%i 拍摄日期 %%j
  5. )
  6. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
非常感谢 + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-10-25 22:05:16 | 显示全部楼层
果真水平高,能获取照片拍摄日期,重命名就容易了。谢谢!
发表于 2013-10-26 11:37:47 | 显示全部楼层
话说,这个思路厉害。。
发表于 2013-10-26 12:32:27 | 显示全部楼层
本帖最后由 batman 于 2013-10-26 12:43 编辑

来个VBS的,生成的列表在photo_list.txt中:

  1. Dim objSHELL, objFSO
  2. Set objSHELL = CreateObject("Shell.Application")
  3. Set objFSO = CreateObject("Scripting.FileSystemObject")
  4. Dim Path, File, objPath, objFile, Name, vbStr
  5. Path = objFSO.GetFile(WScript.ScriptFullName).ParentFolder
  6. Set objPath = objSHELL.NameSpace(Path)
  7. For Each File In objFSO.GetFolder(Path).Files
  8.   If LCase(objFSO.GetExtensionName(File)) = "jpg" Then
  9.     Name = File.ShortName
  10.     Set objFile = objPath.ParseName(Name)
  11.     For i = 0 To 50
  12.       If objPath.GetDetailsOf(,i) = "相片拍照日期" Then _
  13.         vbStr = vbStr & Name & vbTab & objPath.GetDetailsOf(objFile, i) & vbCrLf
  14.     Next
  15.   End If
  16. Next
  17. Set objFile = Nothing
  18. Set objPath = Nothing
  19. Set objSHELL = Nothing
  20. objFSO.OpenTextFile("photo_list.txt", 2, True).Write vbStr
  21. Set objFSO = Nothing
  22. WScript.Echo "OK"
复制代码
 楼主| 发表于 2013-10-29 07:50:06 | 显示全部楼层
本帖最后由 pan528 于 2013-10-29 07:52 编辑

回复 5# batman

试了一下,运行后只生成了一个空白的 photo_list.txt 文本,不知道哪里有错?!
 楼主| 发表于 2013-10-29 11:35:14 | 显示全部楼层
回复 2# terse

根据terse的代码,套写了一个获取二层目录下照片的目录名(“国家和地区信息”)+“拍摄日期”的重命名命令(有点烦锁):

命令放在ok目录下。
如:
C:\111\ok\俄罗斯\e.JPG
C:\111\ok\俄罗斯\伏尔加河\b.JPG
C:\111\ok\俄罗斯\伏尔加河\c.JPG
C:\111\ok\俄罗斯\莫斯科\a.JPG

改名后:
C:\111\ok\俄罗斯\俄罗斯_2013-08-12 01-03.JPG
C:\111\ok\俄罗斯\伏尔加河\俄罗斯_伏尔加河_2013-08-11 01-18.JPG
C:\111\ok\俄罗斯\伏尔加河\俄罗斯_伏尔加河_2013-08-12 01-03.JPG
C:\111\ok\俄罗斯\莫斯科\俄罗斯_莫斯科_2013-08-08 16-26.JPG
  1. :: 适用条件:二层目录下的JPG照片

  2. @echo off
  3. title 获取照片的eif信息和目录信息重命名

  4. :: 1、首先获取照片的eif信息重命名
  5. set "n=[1-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9]"
  6. for /f "delims=" %%a in ('dir /b /o /s /ad') do (
  7. for /f "tokens=1-10* delims=:" %%i in ('findstr /i "%n%" "%%a\*.jpg" ^|more^|findstr /i "\.jpg:%n%"') do (
  8.     ren "%%i:%%j" "%%k-%%l-%%m-%%n%%~xj"
  9. ))

  10. :: 2、再获取照片的目录信息加入重命名
  11. setlocal enabledelayedexpansion
  12. for /f "tokens=1-6* delims=" %%a in ('dir /b /o /s') do (
  13. set "m=%%d_%%e_%%~nxf"
  14. if /i "!m:~-3!" == "jpg" ren "%%~dpf%%d\%%e\%%f" "%%d_%%e_%%f"
  15. set "n=%%d_%%~nxe"
  16. if /i "!n:~-3!" == "jpg" ren "%%~dpe%%d\%%e" "%%d_%%e"
  17. )

  18. pause
复制代码
发表于 2013-10-29 13:09:26 | 显示全部楼层
回复 7# pan528
觉得tokens=1-10* 这样用还不如 tokens=1-3* 这样可以照顾后面目录多或少的问题
下面判断后缀 换直接dir *.jpg不行吗?
另感觉所有的改名可一次在第一FOR完成
发表于 2013-10-29 16:50:02 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 22:58 , Processed in 0.029880 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表