标题: [文件操作] 批处理如何获取照片拍摄日期重命名? [打印本页]
作者: pan528 时间: 2013-10-25 11:34 标题: 批处理如何获取照片拍摄日期重命名?
批处理如何获取照片拍摄日期重命名?
通常一个照片图像文件会生成三个日期:
拍摄日期 2013/8/8
创建日期 2013/10/25
修改日期 2013/8/14
%~tI 获取的是修改日期,如何才能获取“拍摄日期”?请高手们指点。
一、示例材料
链接:http://pan.baidu.com/share/link? ... 0&uk=2248425695 密码:adz6
二、要求
请用DOS批处理完成,不要使用第三方软件。
作者: terse 时间: 2013-10-25 13:05
问题是要足够的信息匹配
有时图像的eif信息不够就出错的- @echo off
- set "n=[1-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9]"
- for /f "tokens=1* delims=:" %%i in ('findstr /i "%n%" "*.jpg" ^|more^|findstr /i "\.jpg:%n%"') do (
- echo 文件 %%i 拍摄日期 %%j
- )
- pause
复制代码
作者: pan528 时间: 2013-10-25 22:05
果真水平高,能获取照片拍摄日期,重命名就容易了。谢谢!
作者: xxpinqz 时间: 2013-10-26 11:37
话说,这个思路厉害。。
作者: batman 时间: 2013-10-26 12:32
本帖最后由 batman 于 2013-10-26 12:43 编辑
来个VBS的,生成的列表在photo_list.txt中:- Dim objSHELL, objFSO
- Set objSHELL = CreateObject("Shell.Application")
- Set objFSO = CreateObject("Scripting.FileSystemObject")
- Dim Path, File, objPath, objFile, Name, vbStr
- Path = objFSO.GetFile(WScript.ScriptFullName).ParentFolder
- Set objPath = objSHELL.NameSpace(Path)
- For Each File In objFSO.GetFolder(Path).Files
- If LCase(objFSO.GetExtensionName(File)) = "jpg" Then
- Name = File.ShortName
- Set objFile = objPath.ParseName(Name)
- For i = 0 To 50
- If objPath.GetDetailsOf(,i) = "相片拍照日期" Then _
- vbStr = vbStr & Name & vbTab & objPath.GetDetailsOf(objFile, i) & vbCrLf
- Next
- End If
- Next
- Set objFile = Nothing
- Set objPath = Nothing
- Set objSHELL = Nothing
- objFSO.OpenTextFile("photo_list.txt", 2, True).Write vbStr
- Set objFSO = Nothing
- WScript.Echo "OK"
复制代码
作者: pan528 时间: 2013-10-29 07:50
本帖最后由 pan528 于 2013-10-29 07:52 编辑
回复 5# batman
试了一下,运行后只生成了一个空白的 photo_list.txt 文本,不知道哪里有错?!
作者: pan528 时间: 2013-10-29 11:35
回复 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- :: 适用条件:二层目录下的JPG照片
-
- @echo off
- title 获取照片的eif信息和目录信息重命名
-
- :: 1、首先获取照片的eif信息重命名
- set "n=[1-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9]"
- for /f "delims=" %%a in ('dir /b /o /s /ad') do (
- for /f "tokens=1-10* delims=:" %%i in ('findstr /i "%n%" "%%a\*.jpg" ^|more^|findstr /i "\.jpg:%n%"') do (
- ren "%%i:%%j" "%%k-%%l-%%m-%%n%%~xj"
- ))
-
- :: 2、再获取照片的目录信息加入重命名
- setlocal enabledelayedexpansion
- for /f "tokens=1-6* delims=\" %%a in ('dir /b /o /s') do (
- set "m=%%d_%%e_%%~nxf"
- if /i "!m:~-3!" == "jpg" ren "%%~dpf%%d\%%e\%%f" "%%d_%%e_%%f"
- set "n=%%d_%%~nxe"
- if /i "!n:~-3!" == "jpg" ren "%%~dpe%%d\%%e" "%%d_%%e"
- )
-
- pause
复制代码
作者: terse 时间: 2013-10-29 13:09
回复 7# pan528
觉得tokens=1-10* 这样用还不如 tokens=1-3* 这样可以照顾后面目录多或少的问题
下面判断后缀 换直接dir *.jpg不行吗?
另感觉所有的改名可一次在第一FOR完成
作者: DAIC 时间: 2013-10-29 16:50
用PowerShell试试吧
http://bbs.bathome.net/thread-27022-1-1.html
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |