【问题标题】:How to use JpegTran to recursively process all images, overwriting them, in a directory using Windows?如何使用 JpegTran 递归处理所有图像,覆盖它们,在使用 Windows 的目录中?
【发布时间】:2013-04-24 08:18:28
【问题描述】:

现在我有以下用于处理图像的批处理文件:

@echo none 
cd %1 
md "%~1\ProcessedJPEGS"
for %%i in (*.jpg) do "C:\Program Files\Image Optimization\jpegtran.exe" -optimize -progressive -copy none "%%i" "%~1\ProcessedJPEGS\%%i" 
move /Y "%~1\ProcessedJPEGS\*.*" "%~1" 
rd "%~1\ProcessedJPEGS" 
pause

如您所见,这并不理想,但我的技能充其量是可笑的,所以我需要一些帮助:)

我想要完成的是在一个目录中运行这个批处理并递归处理所有图像并覆盖它们。

提前致谢, 方舟

【问题讨论】:

  • 什么版本的 Windows?
  • 哦,不好意思没提。 Windows 8 专业版 x64
  • recursively 是什么意思?有子文件夹吗?
  • 是的,现在我需要对每个文件夹执行 bat。理想情况下,我想从根文件夹运行一次,让脚本递归解析所有内容,用优化版本覆盖文件。
  • 哦,是的,我明白了。您可以使用for /r 循环轻松完成此操作。

标签: windows image-processing command-line batch-file


【解决方案1】:

根据您的命令行,这应该处理当前文件夹及以下文件夹中的所有 JPG 文件。在一组示例文件/文件夹上对其进行测试,以确保它适合您。

@echo none 
for /f "delims=" %%a in ('dir "*.jpg" /b /s /a-d') do (
echo processing "%%a"
"C:\Program Files\Image Optimization\jpegtran.exe" -optimize -progressive -copy none "%%a" "%%a.tmp"
move /Y "%%a.tmp" "%%a" >nul
)
pause

【讨论】:

  • 根据使用的 jpegtran 版本(如果您看到控制台充斥着文本,例如使用 libjpeg-turbo),您必须将 "%%a" "%%a.tmp" 替换为 "%%a" > "%%a.tmp"
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多