【问题标题】:Looping through directories to extract pages from multiple pdfs循环遍历目录以从多个 pdf 中提取页面
【发布时间】:2017-07-05 08:29:16
【问题描述】:

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

我目前有这个代码使用幽灵脚本,它有效,但前提是 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\ 中的所有目录都没有被循环遍历。

【问题讨论】:

    标签: batch-file pdf pdf-generation ghostscript


    【解决方案1】:

    您正在执行带有两个参数的命令,"D:\files\input\"*.pdf

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

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

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

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

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

    将通过查找不 (/v) 以文字 (/L) "_p1.pdf" 结尾 (/e) 的名称来排除这些文件,而不考虑大小写 (/i)。但是它会重新生成_p1s。

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

    将处理那些尚未处理的*.pdfs。

    (未测试)

    【讨论】:

    • 我建议 gswin64c.exe 命令也可能需要调整 - ~dpn 应该提供完整的路径名 + 基本名。
    【解决方案2】:

    您对 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
    

    【讨论】:

    • 第一次完美运行,非常感谢!
    • 使用 Magoos 提示,是的。在上面添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 2019-04-08
    • 2022-10-04
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多