2014-09-04 65 views
0

基本上,我試圖批量壓縮存在於各種文件夾中的圖像.png。爲此,我使用pngquant和pngout。每一個形象,應該通過這些應用程序是這樣的:通過幾個程序使用.bat導向不同文件夾中的文件

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文件,但只有第一個文件夾中的圖片都過不去,批處理文件忽略來自後續文件夾的圖像。我該如何解決這個問題?謝謝。

回答

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

+1您也可以使用像「」%%〜dpni2 %%〜xi「'和'」%%〜dpni3 %%〜xi「'來代替'」%%〜di %%〜pi %% 〜ni2.png「等 – foxidrive 2014-09-07 03:38:21

0

刪除批處理文件上的文件與將它們作爲參數在命令行中提供相同。你的腳本忽略它的參數,並且只處理它的工作目錄。

for參數(*.png)替換爲(%*),其中包含所有參數的列表。 而不是%%~ni,它只返回文件的名稱,如果文件與腳本不在同一文件夾中,則需要說%%~dpni以包含驅動器和路徑。

相關問題