Board logo

标题: [其他] 批处理如何提取文件夹中图片的名称及拍摄时间? [打印本页]

作者: jzmaker    时间: 2024-7-23 20:17     标题: 批处理如何提取文件夹中图片的名称及拍摄时间?

如何提取文件夹中所有图片的名称及拍摄时间,并将名称及拍摄时间用"-"连接起来,保存为txt文件格式在当前文件夹内,采用bat文件
作者: Batcher    时间: 2024-7-23 21:27

回复 1# jzmaker


试试这个代码
http://bbs.bathome.net/thread-69-1-1.html
作者: 77七    时间: 2024-7-24 16:39

网络搜索+自己修改...连接符号我不会改了,试试时间对不对
  1. @echo off
  2. rem 下载并添加到环境变量 (https://exiftool.org/)
  3. chcp 65001 >nul
  4. cd /d "%~dp0"
  5. exiftool -Filename -DateTimeOriginal -T "*.jpg" >>out.txt
  6. pause
复制代码

作者: aloha20200628    时间: 2024-7-24 21:08

本帖最后由 aloha20200628 于 2024-7-24 22:47 编辑

回复 1# jzmaker

给两个不用下载第三方工具的批处版本
代码存为test.bat,置于图片文件 *.jpg 所在的目录中运行即可,运行后生成 "结果.txt" 文件,其中自动排除未包含 ‘拍摄时间’ 属性数据的图片文件...
  1. @set @x=1 /* &echo off
  2. (for %%F in (*.jpg) do for /f "delims=" %%v in (
  3. 'cscript /nologo /e:jscript "%~f0" "%%~fF" ') do set/p="%%~nxF - %%v"<nul&echo,)>"结果.txt"
  4. pause&exit/b */
  5. v=WSH.arguments, img=WSH.createObject('WIA.imageFile'), img.loadFile(v(0));
  6. if (img.properties.count>0 && img.properties.exists('306')) {WSH.echo(img.properties.item('306').value);}
复制代码
如果被处理的图片文件较多,可改用以下可明显提速的版本...
  1. @set @x=1 // &(dir /b/a-d *.jpg|cscript /nologo /e:jscript "%~f0") &pause&exit/b
  2. img=WSH.createObject('WIA.imageFile'), ws=WSH.stdin, lines='';
  3. while (!ws.atendofstream) {
  4. pF=ws.readline(); img.loadFile(pF);
  5. if (img.properties.count>0 && img.properties.exists('306'))
  6. lines+=pF+' - '+img.properties.item('306').value+'\n';
  7. }
  8. if (lines=='') WSH.quit();
  9. fso=WSH.createObject('Scripting.FileSystemObject');
  10. fp=fso.OpenTextFile('结果.txt',2,true), fp.write(lines.slice(0,-1)), fp.close(), WSH.quit();
复制代码

作者: jzmaker    时间: 2024-7-24 23:03

非常感谢各位的指导与帮助
作者: buyiyang    时间: 2024-7-25 20:11

其实也可以用批处理直接读取文件头字节解析DE获取拍摄时间。写一个例子,适用于大端模式和jpg:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a size=2048
  3. for %%i in (*.jpg) do (
  4.     copy /y "%%i" $.temp >nul
  5.     fsutil file seteof $.temp %size% >nul
  6.     certutil -encodehex -f $.temp $.temp >nul
  7.     set /a n=tag=len=end=0&set "offset="
  8.     (for /f "tokens=1*" %%a in ($.temp) do (
  9.         set "str=%%b"
  10.         for /f "delims=。" %%s in ("!str:   =。!") do for %%h in (%%s) do (
  11.             if !end! lss 19 (
  12.                 set /a n+=1,tag+=1
  13.                 if /i "%%h"=="4d" if "!pre!"=="4d" set /a n=2
  14.                 if /i "%%h"=="03" if "!pre!"=="90" set /a tag=1009003
  15.                 if !tag! gtr 1009009 if !tag! leq 1009013 set "offset=!offset!%%h"&set /a len+=1
  16.                 if !len! equ 4 if !n! gtr 0x!offset! echo,%%h&set /a end+=1
  17.                 set "pre=%%h"
  18.                 )
  19.             )
  20.         )) > $.time
  21.     certutil -decodehex -f $.time $.time >nul
  22.     for /f "tokens=* delims=" %%t in ($.time) do echo,%%t--------%%i
  23.     )
  24. del /q $.temp $.time
  25. pause
复制代码

作者: WHY    时间: 2024-7-27 09:29

http://www.bathome.net/thread-48990-1-1.html




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2