2015-03-31 30 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