2016-02-05 2 views
0

Мне нужно объединить сотни PDF-файлов в новый большой. В этом коде я пытаюсь просмотреть список файлов и добавить их в новый файл pdf. Но результат не в том, что мне нужно, потому что только последний файл PDF в цикле будет скопирован в output.pdf. Что не так в моем коде?Использование Ghostscript in for loop

for /F "tokens=*" %%A in (fileorder.txt) do (
echo +++++ %%A ++++++ 
D:\GS\gs9.02\bin\gswin32c.exe^
    -o output.pdf^
    -sDEVICE=pdfwrite^
    -dColorConversionStrategy=/LeaveColorUnchanged^
    -dEncodeColorImages=false^
    -dEncodeGrayImages=false^
    -dEncodeMonoImages=false^
    output.pdf^
    %%A^
    -dFIXEDRESOLUTION 
pause 
) 
+1

Ваш код не ** добавление/Добавление/слияния ** что-нибудь, он просто создает новый выходной файл, всегда одно и то же имя для каждого входного файла. Вам нужна командная строка, например 'gswin32c.exe ... file1.pdf file2.pdf file3.pdf file4.pdf', т. Е. Вы запускаете' gswin32c' один раз только с большим количеством файлов, а не один раз для каждого файла, как у вас. –

+0

@MarkSetchell Ошибка в том, что при вызове GhostScript он очищает output.pdf, и поэтому текущий файл %% A копируется в чистый pdf-файл – ZerOne

+1

@ZerOne: вы знаете, консоль cmd имеет ограничение на длину 8191 для длины команды. Если объединенная длина всех ваших файлов PDF-файлов + ключи командной строки ghostscript превышает этот предел, команда будет усечена. Было бы безопаснее использовать переключатель ['@ fileorder.txt'] (http://ghostscript.com/doc/7.07/Use.htm#Switches), и пусть ghostscript получит свой список файлов из файла file.txt. Это также избавит вас от необходимости определять, как создать список файлов в пакетной переменной. – rojo

ответ

0

Таким образом, я нашел решение моей собственной: С помощью этого кода я создаю пустую temp.pdf, что мне нужно, чтобы сохранить результаты последнего цикла к моему входному файлу.

copy NUL EmptyFile.txt 
ren EmptyFile.txt temp.pdf 
for /F "tokens=*" %%A in (fileorder.txt) do (

D:\GS\gs9.02\bin\gswin32c.exe^
-o output.pdf^
-sDEVICE=pdfwrite^
-dColorConversionStrategy=/LeaveColorUnchanged^
-dEncodeColorImages=false^
-dEncodeGrayImages=false^
-dEncodeMonoImages=false^
temp.pdf^
%%A^
-dFIXEDRESOLUTION 

copy /b/v/y output.pdf temp.pdf 

) 

del temp.pdf 

Но Rojo отметил: это лучшее решение:

D:\GS\gs9.02\bin\gswin32c.exe^
-o output.pdf^
-sDEVICE=pdfwrite^
-dColorConversionStrategy=/LeaveColorUnchanged^
-dEncodeColorImages=false^
-dEncodeGrayImages=false^
-dEncodeMonoImages=false^
@fileorder.txt^
-dFIXEDRESOLUTION