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

[其他] 批处理如何提取文件夹中图片的名称及拍摄时间?

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

回复 1# jzmaker


试试这个代码
http://bbs.bathome.net/thread-69-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

网络搜索+自己修改...连接符号我不会改了,试试时间对不对
  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
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 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();
复制代码

TOP

非常感谢各位的指导与帮助

TOP

其实也可以用批处理直接读取文件头字节解析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
复制代码

TOP

TOP

返回列表