基本上,我正在尝试批量压缩驻留在各种文件夹中的.png
图像。为此,我使用pngquant和pngout。每张图片都应该通过以下方式浏览这些应用:
pngquant.exe --force --speed 1 --verbose image.png -o step1.png
pngout.exe step1.png step2.png
我希望一次压缩所有图像。要收集文件夹中所有图像的列表,我在根文件夹中使用*.png
查询进行搜索。目的是将所有图像抛出到批处理文件中并等待结果。
我环顾四周,想出了这个
for %%i in (*.png) do (
"...\pngquant.exe" --force --speed 1 --verbose "%%~ni.png" -o "%%~ni2.png"
"...\pngout.exe" "%%~ni2.png" "%%~ni3.png" )
所以我将图像拖到.bat文件上,但只有第一个文件夹中的图像会通过,批处理文件会忽略后续文件夹中的图像。我该如何解决这个问题?感谢。
答案 0 :(得分:1)
for /f "tokens=*" %%i in ('dir *.png /s /b') do (
"pngquant.exe" --force --speed 1 --verbose "%%i" -o "%%~di%%~pi%%~ni2.png"
"pngout.exe" "%%~di%%~pi%%~ni2.png" "%%~di%%~pi%%~ni3.png" )
试试这个。但请注意,PNG将在相同的文件夹中创建。但不知道这是不是你的意图。
答案 1 :(得分:0)
删除批处理文件上的文件与在命令行上提供它们作为参数相同。您的脚本会忽略其参数并仅处理其工作目录。
将for
参数(*.png)
替换为(%*)
,其中包含所有参数的列表。
此外,如果文件与脚本不在同一文件夹中,则需要说%%~ni
,而不是%%~dpni
,而不是{{1}},以包含驱动器和路径