:job
@for /F "tokens=1,* delims= " %%p in ('dir /b/a-d /s "Y:\*.pdf"') do (
echo Printing file: "%%p" on %date%
::prints the pdf document with adobe reader
"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /p /h "%%p"
::move file to destination
echo wait 10 seconds
::wait 10 seconds then continue
ping 127.0.0.1 -n 10 > nul
echo move file: "%%p" to "C:\PDF"
::move file to destination
move "%%p" "C:\PDF"
echo moved successfully!
echo proceeding next file
)
echo waiting for files to print...
echo wait 7 seconds
ping 127.0.0.1 -n 7 > nul
::clear console
cls
::repeat with job (endless loop)
goto job
脚本正在按预期工作。由于更新脚本经常挂起或速度很慢。 这个剧本或多或少都没用了。
因为adobe reader可能不是最小的,我们也考虑使用像sumatrapdf或foxitreader这样的轻量级替代品。这将是开始使用其中一种替代方案的重点。
所以我想用sumatrapdf尝试一下。 他们的文件说:http://blog.kowalczyk.info/software/sumatrapdf/manual.html
=> -print-to-default $ file.pdf在默认打印机上打印PDF文件
:job
@for /F "tokens=1,* delims= " %%p in ('dir /b/a-d /s "Y:\*.pdf"') do (
call "C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe" -print-to-default "%%p"
start "" "C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe" -print-to-default "%%p"
"C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe" -print-to-default "%%p"
... the rest
但没有任何作用。如果还尝试过: “C:\ Program Files(x86)\ SumatraPDF \ SumatraPDF.exe -print-to-default”“%% p”用于呼叫,启动等等......
anyboy是否知道如何使用sumatrapdf进行打印?我也不会厌恶与狐狸读者合作。
很高兴得到一些建议:) 也许有人有类似的问题要解决。
答案 0 :(得分:3)
根据How do I use the Windows command line with Acrobat and Adobe Reader?(适用于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应用程序。
我不确定SumatraPDF Manual是否是最新的,因为它在底部链接到带有Command Line Arguments页面的Sumatra PDF的Wiki文档。此Wiki页面最近更新,包含有关打印选项的不同信息。
- -print到默认
将此命令行上指示的所有文件打印到系统默认打印机。打印后,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
循环的代码时出现错误,因为您将空格字符指定为分隔符,这对于内部有空格的文件路径/名称不利。此外,空格字符默认为命令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"
)
使用"delims="
时,分隔符列表仅更改为换行符。因此%%p
始终具有文件的整个路径和名称,即使命令dir
输出的行上存在1个或多个空格。
2^>nul
会抑制命令dir
的错误消息:将错误消息重定向到设备NUL。