Adobe阅读器
根据如何将 Windows 命令行与 Acrobat 和 Adobe Reader 结合使用? http://help.adobe.com/livedocs/acrobat_sdk/10/Acrobat10_HTMLHelp/DevFAQ_UnderstandingSDK.22.31.html(适用于 Adobe Acrobat/Reader 10,不适用于 XI)用于打印并显示对话框的命令是:
start "Print PDF" /wait "%ProgramFiles(x86)%\Adobe\Reader 11.0\Reader\AcroRd32.exe" /p "%%p"
我认为,使用选项没有用/h
如果应显示打印对话框,则以最小化窗口启动 Adobe Reader。
要打印到特定打印机,要使用的命令行类似于
start "Print PDF" /wait /min "%ProgramFiles(x86)%\Adobe\Reader 11.0\Reader\AcroRd32.exe" /t "%%p" "printername" "drivername" "portname"
/wait
停止执行批处理作业,直到 Adobe Reader 自行终止。和选项/min
如果应用程序不覆盖它,则会导致使用最小化窗口执行 GUI 应用程序,并且仍然显示最大化或恢复模式的窗口。
苏门答腊PDF
我不确定是否苏门答腊岛PDF手册 http://blog.kowalczyk.info/software/sumatrapdf/manual.html是最新的,因为它在底部链接到苏门答腊岛 PDF 的 Wiki 文档命令行参数 https://code.google.com/p/sumatrapdf/wiki/CommandLineArguments页。此 Wiki 页面最近更新,包含有关打印选项的不同信息。
- -打印到默认值
将此命令行上指示的所有文件打印到系统默认打印机。打印完成后,SumatraPDF立即退出(检查错误代码是否失败)。
因此,应该可以通过调用 SumatraPDF 来打印命令行上指定的多个文件,这将使您的批处理文件更加高效。
由于我还没有安装 SumatraPDF,我建议先尝试只包含 3 行的批处理文件
"%ProgramFiles(x86)%\SumatraPDF\SumatraPDF.exe" -print-to-default "Full Path and Name of a PDF file"
echo Exit code of SumatraPDF is: %ERRORLEVEL%
pause
接下来查看批处理文件的输出。是否显示错误或 PDF 文件是否按预期打印?
打印完成之前控制台窗口中的第二行输出是否完成?
如果是这种情况,SumatraPDF 将作为单独的进程启动,并且退出代码评估实际上是不可能的。否则你已经有了要使用的命令。
但是,如果 SumatraPDF 作为单独的(GUI)进程启动,则很可能需要使用命令start
有选项/wait
也许还有/min
如上所示(适用于 Adobe Reader)。
注:没有@echo off
在小批处理文件的顶部进行测试,还可以查看执行批处理文件的命令。
FOR loop
查看您的代码FOR
循环有问题,因为您指定空格字符作为分隔符,这对于内部带有空格的文件路径/名称不利。另外,空格字符默认是命令的分隔符FOR
因此,如果确实需要的话,没有必要将其显式定义为分隔符。
因此我建议使用
@for /F "delims=" %%p in ('dir "Y:\*.pdf" /b /a-d /s' 2^>nul) do (
"%ProgramFiles(x86)%\SumatraPDF\SumatraPDF.exe" -print-to-default "%%p"
)
With "delims="
分隔符列表仅更改为换行符。%%p
因此,即使命令输出的行上存在 1 个或多个空格,也始终具有文件的完整路径和名称dir
.
2^>nul
抑制命令的错误消息dir
如果在整个驱动器 Y 上根本找不到 PDF 文件:将错误消息重定向到设备 NUL。