2015-01-02 2 views
0

У меня есть несколько (много) многостраничных PDF-файлов, которые я пытаюсь преобразовать в файлы JPEG (один файл для каждой страницы каждого PDF) с помощью Ghostscript. У меня есть следующий пакетный файл, но я не могу заставить его работать правильно.Проблема с преобразованием нескольких файлов PDF в файлы JPEG с использованием Ghostscript из командного файла

for %%f in (*.pdf) do (
    gswin64.exe -dNOPAUSE -dBATCH -sDEVICE=jpeg -r144 -sOutputFile=p%03d.jpg %%f 
) 

Петля, похоже, работает нормально в том смысле, что она открывает файлы. Это неправильно в «p% 03d.jpg» - я предполагаю, что цикл видит «% 0» и по какой-то причине вставляет имя командного файла. Я получаю следующее сообщение об ошибке:

**** Could not open the file pC:\Users\bmjones\Downloads\convert.bat3d.jpg 

(«convert.bat» это имя пакетного файла)

Я предполагаю, что даже если бы я получил эту работу, я бы еще одна проблема. Когда я запускаю вручную:

gswin64.exe -dNOPAUSE -dBATCH -sDEVICE=jpeg -r144 -sOutputFile=p%03d.jpg [file name].pdf 

Он отлично работает. Я получаю набор имен файлов 001.jpg, 002.jpg и т. Д. Но я хотел бы, чтобы они были пронумерованы по-разному. Так что, если мои первые два файла имеют 3 и 2 страницы, соответственно, я хотел бы иметь что-то вроде этого:

f1_pg1.jpg, f1_pg2.jpg, f1_pg3.jpg, f2_pg1.jpg, f2_pg2.jpg

+0

Значит, 'gswi64.exe' использует знак процента в качестве шаблона в параметре' -sOutputFile'? Если вы делаете это из сценария '.bat', вам, вероятно, придется дважды нажимать'% ', поэтому он будет рассматриваться как знак буквального процента, а не аргумент или переменная сценария. Попробуйте '-sOutputFile = p %% 03d.jpg' – rojo

+0

@rojo Это отлично работает, спасибо! Мне все еще нужно найти способ изменить заголовок файла в каждой итерации цикла, чтобы я не писал файлы, но это отличный первый шаг. – user2488818

ответ

1

Вместо того, чтобы использовать счетчик для уникальных имен файлов, можно задать имя выходного файла на основе имен файлов PDF.

@echo off 
setlocal 

for %%I in (*.pdf) do (
    gswin64 -dNOPAUSE -dBATCH -sDEVICE=jpeg -r144 -sOutputFile="%%~nI_p%%02d.jpg" "%%~I" 
) 

%%~nI получает базовое имя без расширения каждого PDF. "%%~I" просто гарантирует, что имена файлов, содержащие пробелы, не нарушают. Введите help for в окне консоли и просмотрите последние два страницы для получения дополнительной информации об этом синтаксисе.

0

Alright, с небольшой помощью @rojo, я думаю, что у меня есть это (я «м, безусловно, открыт для лучших решений)

set /a c=0 
setlocal ENABLEDELAYEDEXPANSION 
for %%f in (*.pdf) do (
    set /a c=c+1 
    set FNAME=f_!c!_p%%02d.jpg 
    gswin64.exe -dNOPAUSE -dBATCH -sDEVICE=jpeg -r144 -sOutputFile=!FNAME! %%f 
)