循环遍历目录以从多个pdf中提取页面

时间:2017-02-16 09:51:48

标签: batch-file pdf pdf-generation ghostscript

我有多个目录,每个目录中包含一个pdf。我试图从每个pdf中提取第1页并将其保存在原始pdf所在的目录中,因此我最终得到了包含两个pdf的多个目录。

我目前有使用ghost脚本的代码,但只有当pdf与批处理文件位于同一目录时

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:\ files \ input \中的所有目录都没有循环播放。

2 个答案:

答案 0 :(得分:1)

您正在使用两个参数"D:\files\input\"*.pdf执行命令。

您需要查找每个*.pdf文件。接受的方式是

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

目录,基本格式,带子目录,但没有目录名。

但是,这会针对每个*.pdf执行命令,包括*_p1.pdf s(即那些已经处理过的),所以

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 s。

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

将处理那些尚未处理的*.pdf

(未经测试)

答案 1 :(得分:0)

您对for循环的使用是个问题。见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