Windows 通过带有.bat的耦合程序定向不同文件夹中的文件

Windows 通过带有.bat的耦合程序定向不同文件夹中的文件,windows,batch-file,Windows,Batch File,基本上,我正在尝试批量压缩驻留在不同文件夹中的.png图像。为此,我使用pngquant和pngout。每个图像都应通过以下方式通过这些应用程序: pngquant.exe --force --speed 1 --verbose image.png -o step1.png pngout.exe step1.png step2.png 我希望所有的图像一次压缩。为了收集文件夹中所有图像的列表,我在根文件夹中使用*.png查询进行搜索。其目的是将所有图像放入批处理文件并等待结果 我环顾四周,想出

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

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将在相同的文件夹中创建。但是,不知道这是否是您的意图。

在批处理文件中删除文件与在命令行中提供作为参数的文件是一样的。脚本忽略其参数,只处理其工作目录

参数
(*.png)
替换为
(*)
,其中包含所有参数的列表。
另外,如果文件与脚本不在同一个文件夹中,则需要说
%%~dpni
,而不是只返回文件名的
%%~ni
,以包含驱动器和路径。

+1您还可以使用
“%%~dpni2%%~xi”
“%%~dpni3%%~xi”
等术语替换
“%%~di%%~pi%%~ni2.png”
etc