我使用以下命令在生成两个文件的文件夹中裁剪和分割jpg名称page000.jpg
convert page000.jpg -crop 2x1@ +repage -colorspace gray ^
+dither -colors 4 page000_%d.jpg
这两部分将命名为page000_0.jpg和page000_1.jpg
它运行良好,但我想重写此代码以处理目录中的每个JPEG。
我为DOS(.bat)编写了这个批处理代码:
mkdir split
FOR %%f IN (*.jpg) DO xcopy %%f split\
cd split
FOR %%f IN (*.jpg) DO convert %%f -crop 2x1@ +repage -colorspace gray ^
+dither -colors 4 %%f_%d.jpg
然而,它无法正常工作。
答案 0 :(得分:2)
您需要转义需要解释的百分号,而不是批量解析器,而是转换解析器。
set "parameters=-crop 2x1@ +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 2x1@ +repage -colorspace gray +dither -colors 4"
FOR %%f IN (*.jpg) DO convert "%%f" %parameters% "split\%%~nf_%%d.jpg"
答案 1 :(得分:0)
您无需将文件复制到split
子目录,您可以convert
从它们所在的位置读取它们:
for %f in (*.jpg) do convert %f -crop 2x1@ +repage -colorspace gray +dither -colors 4 split/%~nf_%d.jpg