【发布时间】:2020-06-22 01:15:28
【问题描述】:
我正在尝试从 webp 图像中获取尺寸宽度/高度,通过批处理文件使用 exiftool 并将这些值保存为变量。我可以让 bat 文件输出尺寸(在此示例中,它在 exiftool 窗口中输出“400x222”),但是我不太确定如何将这些值成功地重定向回 bat 文件控制台窗口中作为变量。
下面的代码给了我我想要的,但是在 exiftool 窗口中:
@echo off
setlocal EnableDelayedExpansion
echo =============== WEBP EXIF ===============
echo.
for %%f in ("C:\ffmpegConvert\*.webp") do (
exiftool -k -s -s -s -ImageSize %%f
)
endlocal
pause
exit
以下是我尝试过的,但我无法在我的初始 bat 文件控制台窗口中回显这些值(我得到“回显关闭,每次失败回显一次”)
@echo off
setlocal EnableDelayedExpansion
echo =============== WEBP EXIF ===============
echo.
for %%f in ("C:\ffmpegConvert\*.webp") do (
for /f "tokens=1,2 delims=x" %%a in ('exiftool -s -s -s -ImageSize %%f') do (
set sW=%%a
set sH=%%b
)
@echo !sW! >CON:
@echo !sH! >CON:
)
endlocal
pause
exit
【问题讨论】:
-
此处无法复制。您应该在
exiftool命令行上将%%f替换为"%%~f",以涵盖带有空格的路径的情况,但除此之外它对我有用。 -
@GeneralKnox 在第二个批处理文件中
exiftool选项-k发生了什么?为什么-s指定了三次?你看,我没有安装exiftool也没有阅读它的文档。可能是exiftool输出数据来处理 STDERR 而不是 STDOUT ,因此需要'exiftool.exe -k -s -s -s -ImageSize "%%f" 2^>^&1'来获得正确捕获的输出并由内部for处理.我建议阅读this answer 中的issue 7 并使用I和J(和K)作为循环变量,而不是f、a(和b) )。 -
好的,谢谢大家,我也做了您建议的更改(dixv + Mofi)。我为您的链接添加了书签 Mofi,谢谢!我真的很喜欢学习一般的脚本,非常有趣!
-
@Mofi
-s被列出三遍的原因是它只打印标签的值,而没有任何额外的数据,例如标签名称。也可以将其列为-s3以达到相同的效果。请参阅-s(-short) option 上的文档。
标签: batch-file exiftool