通过使用.bat的几个程序来指导不同文件夹中的文件

时间:2014-09-04 17:02:50

标签: windows batch-file

基本上,我正在尝试批量压缩驻留在各种文件夹中的.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文件上,但只有第一个文件夹中的图像会通过,批处理文件会忽略后续文件夹中的图像。我该如何解决这个问题?感谢。

2 个答案:

答案 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}},以包含驱动器和路径