2017-02-16 4 views
2

У меня есть несколько каталогов, которые содержат по одному PDF в каждом. Я пытаюсь извлечь страницу 1 из каждого PDF-файла и сохранить его в каталоге, в котором был оригинал pdf, поэтому я заканчиваю работу с несколькими каталогами, которые теперь содержат два PDF-файла.Цитирование через каталоги для извлечения страниц из нескольких PDF-файлов

настоящее время у меня этот код, используя призрачные скрипты, работает, но только если PDFs находятся в том же каталоге, что и пакетный файл

echo on 
for %%I in ("D:\files\input\" *.pdf) do "C:\Program Files\gs\gs9.20\bin\gswin64c.exe" -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="%%~nI_p1.pdf" -dFirstPage=1 -dLastPage=1 "%%I" 

Я не могу понять, почему все каталоги в D: \ файлы \ вход \ не зацикливаются.

ответ

0

Ваше использование для цикла является проблемой. См. for /?
Magoo был быстрее, см. Это полное решение.

@Echo off 
Set "GS=C:\Program Files\gs\gs9.20\bin\gswin64c.exe" 
Set "Opt=-dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dFirstPage=1 -dLastPage=1" 
Pushd "D:\files\input\" 
for /f "delims=" %%I in (
    'Dir /B/S *.pdf ^|find /v "_p1.pdf" ' 
) do If not exist "%%~dpnI_p1.pdf" "%GS%" %Opt% -sOutputFile="%%~dpnI_p1.pdf" "%%~fI" 
Popd 
+0

Это сработало отлично в первый раз, спасибо вам большое! – 99ajohnson

+0

Использование подсказки Magoos, да. Добавлено это выше. – LotPings

+0

благодарю вас обоих @Magoo – 99ajohnson

1

Выполняется команда с двумя параметрами: "D:\files\input\" и *.pdf.

Вам необходимо найти каждый файл *.pdf. Принятым способом является

for /f "delims=" %%I in ('dir /b /s /a-d "D:\files\input\*.pdf" ') do ... 

директория, основной формат, с подкаталогами, но не имена каталогов.

Однако это выполнить команду против всех *.pdf включая *_p1.pdf с (то есть те, которые уже обработаны) так

for /f "delims=" %%I in ('dir /b /s /a-d "D:\files\input\*.pdf"^|findstr /v /i /e /L "_p1.pdf" ') do ... 

бы исключить эти файлы найти те имена, которые не делают (/ v) конец (/ e) с буквальным (/ L) "_p1.pdf" без учета случая (/ i). Тем не менее, он регенерирует _p1 с.

for /f "delims=" %%I in ('dir /b /s /a-d "D:\files\input\*.pdf" ') do if not exist "%%~dp*_p1.pdf" ... 

будет обрабатывать эти *.pdf S, которые еще не были обработаны.

(не проверено)

+0

Я бы предположил, что команда 'gswin64c.exe' может также потребовать настройки -' ~ dpn' должен предоставить полное имя пути + базовое имя. – Magoo

Смежные вопросы