如何在Windows中使用JpegTran递归处理目录中的所有图像,并覆盖它们?

3

目前我有以下批处理文件用于处理我的图片:

@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

正如您所看到的,这并不理想,但我的技能最多只能让人发笑,所以我需要一些帮助 :)

我想要实现的是在一个目录中运行此批处理文件,并递归地处理所有图像并覆盖它们。

提前感谢, Arky


Windows 的哪个版本? - Endoro
哦,抱歉没有提到。Windows 8 Pro x64。 - Arkymedes
“Recursively” 一词是什么意思?是否包括子文件夹? - Endoro
是的,现在我需要在每个文件夹上执行bat。理想情况下,我希望从根文件夹运行一次,并让脚本递归解析所有内容,用优化版本覆盖文件。 - Arkymedes
1
哦,是的,我明白了。你可以用 for /r 循环轻松地完成这个任务。 - Endoro
1个回答

8

根据您的命令行,这应该处理当前文件夹及其子文件夹中的所有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"”。 - user136036

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接