2015-03-31 168 views
3

我用下面的命令來裁剪分裂JPEG,並在文件夾中生成兩個文件批量使用ImageMagick

convert page000.jpg -crop [email protected] +repage -colorspace gray^
     +dither -colors 4 page000_%d.jpg 

這兩部分將被命名爲page000_0.jpg和page000_1.jpg

拆分JPG名page000.jpg

它運行良好,但我想重寫此代碼以處理目錄中的每個JPEG。

我寫了這批代碼DOS(蝙蝠):

mkdir split 
FOR %%f IN (*.jpg) DO xcopy %%f split\ 
cd split 
FOR %%f IN (*.jpg) DO convert %%f -crop [email protected] +repage -colorspace gray^
           +dither -colors 4 %%f_%d.jpg 

但是,它無法工作。

+1

你應該更準確地究竟是什麼「無法工作描述」。沒有更多的細節,你的問題可能會被低估,最終甚至會被關閉和刪除。 – 2015-03-31 11:22:21

+0

謝謝,我會糾正這一點。 – menteith 2015-03-31 11:59:19

回答

2

您需要轉義的百分號不是由批解析器解釋,而是由轉換解析器解釋。

set "parameters=-crop [email protected] +repage -colorspace gray +dither -colors 4" 
FOR %%f IN (*.jpg) DO convert "%%f" %parameters% "%%~nf_%%d.jpg" 
                 ^^ the escaped percent sign 

但是,正如for命令不使用文件的靜態列表(該列表被檢索而for命令迭代),在這個過程中產生的文件也可以進行處理。爲了解決這個問題,你可以

1 - 使用一個靜態列表更改for命令爲for /f命令首先檢索使用dir命令

for /f "delims=" %%f in ('dir /b /a-d *.jpg') do ..... 

2文件列表 - 過程從原來的目錄輸入文件並將輸出放在split目錄中。這樣,由於生成的文件未放置在正在處理的相同文件夾中,因此未檢測到它們。

mkdir split 
set "parameters=-crop [email protected] +repage -colorspace gray +dither -colors 4" 
FOR %%f IN (*.jpg) DO convert "%%f" %parameters% "split\%%~nf_%%d.jpg" 
+0

它的作品,但是,我得到的是00314.jpg_0.jpg而不是00314_0.jpg – menteith 2015-03-31 12:15:23

+0

@menteith,請參閱更新的答案。我忘了包含'%〜nf',也就是隻有正在處理的文件的名稱(沒有擴展名) – 2015-03-31 12:16:19

+0

就是這樣。奇蹟般有效。 – menteith 2015-03-31 12:22:19

0

你並不需要將文件複製到split子目錄,你可以得到convert從閱讀他們,他們是:

for %f in (*.jpg) do convert %f -crop [email protected] +repage -colorspace gray +dither -colors 4 split/%~nf_%d.jpg