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

[文件操作] [已解决]批处理调用ExifTool批量读取、输出、修改图片IPTC参数的功能

需要对一批jpg格式的图片,根据其【右键】-【属性】-【详细信息】中的【标记】里的内容进行读取,然后输出到文本,每个图片输出一行,每个参数用分号隔开,也要有批量修改图片此参数的功能。
图例如下

我在【第三方命令行】板块的帖子中
http://www.bathome.net/viewthrea ... amp;highlight=jhead
用jhead工具查到这些参数是在【IPTC data】下的【Keywords】显示,参照5楼大佬的代码,可以成功读取到了图片的这个参数,但是没找到修改这个参数的命令。

我提问GPT机器人,给我了两串代码,但是我跑不起来。因为不了解相关的第三方工具,也没有找到详尽的中文教程,所以不知道是哪里的问题,求大佬们指教。多谢!!
第一段
提问:如何使用bat 脚本实现批量修改JPG图片的IPTC参数
回答:要实现批量修改JPG图片的IPTC参数,可以使用exiftool.exe来完成。exiftool.exe是一个命令行工具,可以读取和修改图像的元数据。下面是一个示例脚本,可以批量修改指定文件夹下的所有JPG图片的IPTC参数:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "exiftool_path=C:\path\to\exiftool.exe"
  4. set "image_folder=C:\path\to\image\folder"
  5. for %%f in (%image_folder%\*.jpg) do (
  6.   set "file_path=%%~dpf%%~nf"
  7.   %exiftool_path% ^
  8.     -overwrite_original ^
  9.     -IPTC:ObjectName="New Object Name" ^
  10.     -IPTC:Caption-Abstract="New Caption" ^
  11.     -IPTC:Keywords="Keyword1;Keyword2" ^
  12.     "!file_path!.jpg"
  13. )
复制代码
在上面的脚本中,将exiftool.exe的路径设置为变量“exiftool_path”,将图像文件夹路径设置为变量“image_folder”。使用“for”循环遍历指定文件夹下的所有JPG图片,对于每个图片文件,使用exiftool.exe修改其IPTC参数(这里只修改了ObjectName、Caption-Abstract和Keywords),然后将原始文件覆盖保存。
需要注意的是,exiftool.exe的参数名是区分大小写的,不要将参数名写错。另外,这里使用了“setlocal enabledelayedexpansion”来启用延迟扩展变量,否则在循环中使用“!file_path!”时会出现问题。(1/10)


第二段:
提问: 如何使用bat脚本实现批量读取图片的IPTC参数并输出到文本,然后通过文本批量修改图片的IPTC参数
回答:这是一个基本的bat脚本的框架,用于读取图片的IPTC参数并将其输出到文本。前提是需要安装ExifTool并在系统环境变量中设置其路径。
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set "folder=C:\path\to\folder\with\images"
  4. set "outfile=C:\path\to\output\file.txt"
  5. echo "File, Creator, Title, Description" > %outfile%
  6. for %%f in (%folder%\*.jpg) do (
  7.     set "filename=%%~nxf"
  8.     set "creator="
  9.     set "title="
  10.     set "description="
  11.     for /f "tokens=1,2 delims=:" %%a in ('exiftool -s3 -iptc:Creator -iptc:ObjectName -iptc:Caption-Abstract "%%~f"') do (
  12.         if "%%a"=="Creator" set "creator=%%b"
  13.         if "%%a"=="ObjectName" set "title=%%b"
  14.         if "%%a"=="Caption-Abstract" set "description=%%b"
  15.     )
  16.     echo "!filename!,!creator!,!title!,!description!" >> %outfile%
  17. )
  18. echo "Done."
  19. pause
复制代码
这个脚本会将指定文件夹中的所有`.jpg`文件的IPTC参数读取到一个文本文件中。你可以使用文本编辑器或Excel等工具将其打开和编辑。在这个基础之上,你可以编写另一个bat脚本,以读取此文件并使用ExifTool将修改后的IPTC参数应用于相应的图片。(1/10)

图片没附成功,我把两个示例图链接放这里,辛苦大佬们看一下
https://gd-hbimg.huaban.com/7fbf335f50d9916a0c982ccef6766b27452d74264788-MjW35x_fw1200webp
https://gd-hbimg.huaban.com/3669afb81fae4c6e5070902061730972fcb57fe867d3-Hfq7YD_fw1200webp

TOP

回复 3# czjt1234


    请教大佬,这个是vbs代码么,看着不太像bat,保存文本后缀需要改成vbs么还是其它后缀,请原谅我太菜

TOP

回复 5# czjt1234


    大佬,我运行了不显示标记的具体内容(截图如链接),如果能正常显示,那输出到文档应该不成问题。另外,修改这个参数的功能可以实现么?
https://gd-hbimg.huaban.com/e0c5ae379accee1cb51c11a332c299eccdeabc522800-ltFmVV_fw1200webp

TOP

回复 7# czjt1234


    win 7 专业版,64位

TOP

回复 9# 77七


    测试了一下读取和写入都很好用,太感谢了,多谢大佬,谢谢!!

TOP

回复 11# Batcher


    好的,多谢大佬

TOP

本帖最后由 52hz 于 2023-5-18 08:26 编辑

回复 9# 77七


    大佬,在使用过程中发现一个问题,当输入参数过长的时候会提示:
    Waring:【Minor】IPTC:Keywords exceeds length limit  <truncated> - 图片名称.jpg
    运行窗口截图:https://imgse.com/i/p9Wvq61
    我翻译了一下,说是超过长度限制,被截断。修改后的图片标记只截取了输入参数的前60个字符。
    请问这个有解决办法么,或者有没有其它不限制长度的命令行工具可以代替?

TOP

好的,多谢各位大佬帮忙,已经成功解决,再次拜谢,谢谢!!

TOP

返回列表