Windows 使用 FOR 循环为当前文件夹中具有 EXIF 值的文件名批量添加后缀

Windows batch add suffixes to filenames with EXIF values in current folder with FOR loop

我正在尝试将一些 EXIF 数据添加到文件夹中的文件名中。到目前为止,我已经能够让较小的部分工作,但我无法将名称和扩展名分开,因此可以通过 FOR 循环将它们与 EXIF 值组合。

我看到我需要使用 ! 来描述循环中的变量,但我不能让它与文件名一起使用。

SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=* delims=" %%a in ('dir /b *') do (
    set file=%%~a
    set _fname=%~n1
    set _ext=%~x1
    for /f %%i in ('exiftool.exe -s -S -SourceImageWidth %file%') do set WIDTH=%%i
    for /f %%i in ('exiftool.exe -s -S -SourceImageHeight %file%') do set HEIGHT=%%i
    for /f %%i in ('exiftool.exe -s -S -CompressorID %file%') do set CODEC=%%i
    rename %file% "%_fname% [%WIDTH%x%HEIGHT% %CODEC%]%_ext%"
)

过程是:获取文件名 -> 仅获取名称 -> 获取扩展名 -> 获取 EXIF 值 -> 使用添加到名称的值重命名文件并重新使用扩展名 -> 重复当前目录中的下一个文件

对于草率的批处理语法,我深表歉意,因为我确信有更优化的编码方式。

谢谢!

您正在制作 Exiftool Common Mistake #3。 Exiftool 最大的性能损失是它的启动时间,在这样的循环中使用它会花费更长的时间,特别是因为 exiftool 本身具有非常强大的批处理和重命名功能。

尝试将此作为单个命令
exiftool "-Filename<%f [${SourceImageWidth}x$SourceImageHeight $CompressorID].%e" /path/to/files

如果在 .BAT 文件中使用,请添加 -r to recurse into subdirectories. Remember to double any percent signs

%f 标记代表没有扩展名的基本文件名。通过在标签名称前面添加美元符号来插入标签名称。因为 SourceImageWidthx 直接相邻,所以使用大括号将两者分开,所以 exiftool 不会去寻找名为 "SourceImageWidthx" 的标签。 %e 代表文件扩展名。