标题: [其他] 批处理如何提取文件夹中图片的名称及拍摄时间? [打印本页]
作者: 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
网络搜索+自己修改...连接符号我不会改了,试试时间对不对- @echo off
- rem 下载并添加到环境变量 (https://exiftool.org/)
- chcp 65001 >nul
- cd /d "%~dp0"
- exiftool -Filename -DateTimeOriginal -T "*.jpg" >>out.txt
- pause
复制代码
作者: aloha20200628 时间: 2024-7-24 21:08
本帖最后由 aloha20200628 于 2024-7-24 22:47 编辑
回复 1# jzmaker
给两个不用下载第三方工具的批处版本
代码存为test.bat,置于图片文件 *.jpg 所在的目录中运行即可,运行后生成 "结果.txt" 文件,其中自动排除未包含 ‘拍摄时间’ 属性数据的图片文件...- @set @x=1 /* &echo off
- (for %%F in (*.jpg) do for /f "delims=" %%v in (
- 'cscript /nologo /e:jscript "%~f0" "%%~fF" ') do set/p="%%~nxF - %%v"<nul&echo,)>"结果.txt"
- pause&exit/b */
- v=WSH.arguments, img=WSH.createObject('WIA.imageFile'), img.loadFile(v(0));
- if (img.properties.count>0 && img.properties.exists('306')) {WSH.echo(img.properties.item('306').value);}
复制代码
如果被处理的图片文件较多,可改用以下可明显提速的版本...- @set @x=1 // &(dir /b/a-d *.jpg|cscript /nologo /e:jscript "%~f0") &pause&exit/b
- img=WSH.createObject('WIA.imageFile'), ws=WSH.stdin, lines='';
- while (!ws.atendofstream) {
- pF=ws.readline(); img.loadFile(pF);
- if (img.properties.count>0 && img.properties.exists('306'))
- lines+=pF+' - '+img.properties.item('306').value+'\n';
- }
- if (lines=='') WSH.quit();
- fso=WSH.createObject('Scripting.FileSystemObject');
- 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:- @echo off&setlocal enabledelayedexpansion
- set /a size=2048
- for %%i in (*.jpg) do (
- copy /y "%%i" $.temp >nul
- fsutil file seteof $.temp %size% >nul
- certutil -encodehex -f $.temp $.temp >nul
- set /a n=tag=len=end=0&set "offset="
- (for /f "tokens=1*" %%a in ($.temp) do (
- set "str=%%b"
- for /f "delims=。" %%s in ("!str: =。!") do for %%h in (%%s) do (
- if !end! lss 19 (
- set /a n+=1,tag+=1
- if /i "%%h"=="4d" if "!pre!"=="4d" set /a n=2
- if /i "%%h"=="03" if "!pre!"=="90" set /a tag=1009003
- if !tag! gtr 1009009 if !tag! leq 1009013 set "offset=!offset!%%h"&set /a len+=1
- if !len! equ 4 if !n! gtr 0x!offset! echo,%%h&set /a end+=1
- set "pre=%%h"
- )
- )
- )) > $.time
- certutil -decodehex -f $.time $.time >nul
- for /f "tokens=* delims=" %%t in ($.time) do echo,%%t--------%%i
- )
- del /q $.temp $.time
- 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 |