[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

批处理如何获取照片拍摄日期重命名?

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

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

一、示例材料
链接:http://pan.baidu.com/share/link? ... 0&uk=2248425695 密码:adz6
二、要求
请用DOS批处理完成,不要使用第三方软件。

TOP

回复 7# pan528
觉得tokens=1-10* 这样用还不如 tokens=1-3* 这样可以照顾后面目录多或少的问题
下面判断后缀 换直接dir *.jpg不行吗?
另感觉所有的改名可一次在第一FOR完成

TOP

回复 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
复制代码

TOP

本帖最后由 pan528 于 2013-10-29 07:52 编辑

回复 5# batman

试了一下,运行后只生成了一个空白的 photo_list.txt 文本,不知道哪里有错?!

TOP

本帖最后由 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"
复制代码
***共同提高***

TOP

话说,这个思路厉害。。
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

果真水平高,能获取照片拍摄日期,重命名就容易了。谢谢!

TOP

问题是要足够的信息匹配
有时图像的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

评分人数

TOP

返回列表