【问题标题】:PDF Printing ScriptPDF打印脚本
【发布时间】:2018-12-17 04:21:06
【问题描述】:

我需要打印许多文档,我不想逐个选择并打印所有文档。这些文档有修订版,都在同一个文件夹中。我想打印这些文件的最新版本。这些文件的格式是

630-0-110
9A-0-9 
44-0-190
44-0-191

在这四个 pdf 文件中,44-0-191 是比44-0-190 更新的版本,所以我想打印630-0-1109A-0-944-0-191

我需要打印从6-0-(revision no.) 到699A-0-(revision no.) 的数字,其中一些数字的开头也有 A、B、C。

有没有办法创建一个外壳来自动打印这些?还是我必须手动 ctrl+click 全部打印?

如果我可以创建一个外壳,我该怎么做?

【问题讨论】:

  • bash、cmd 和 powershell 是 3 个不同的东西。我想说,如果你在 Windows 上,bash 是不可能的。
  • 请查看stackoverflow.com/help/how-to-ask。请将您尝试使用的代码粘贴到问题中。如果您没有任何代码并且需要聘请程序员,您可以尝试stackoverflowbusiness.com/talent
  • 我在 Windows 上。最好用什么
  • 搜索机器。或者你雇一个程序员。 StackOverflow 不是免费的代码/脚本编写服务,它也不会接管您的研究。所以你必须尝试自己实现你的任务,当卡住时,回到这里,提供minimal reproducible example!另请阅读tour!
  • 是的,可以做到。我会使用 powershell,但比 2.0 更新的版本。从 Microsoft 获取 5.1 或从 github.com/PowerShell/PowerShell 获取 6。

标签: windows cmd powershell-2.0


【解决方案1】:

您的任务需要几个步骤

  • 列出文档,使用正则表达式将名称与修订分开,
  • 按名称对文档进行分组,
  • 每组按修订数字排序,
  • 只获得最高转速。 (最后一个)

  • 选择打印机/或使用定义的/默认标准打印机

由于您的修订号有不同的地方,您需要对数字进行排序, 这是通过$ToNatural实现的

为了测试排序,我使用了扩展样本(要打印的修订标记为 **)

44-0-19.pdf      
44-0-190.pdf
44-0-191.pdf    **
44-0-2.pdf
630-0-110.pdf   **
630-0-90.pdf
9A-0-10.pdf     **
9A-0-9.pdf

## Q:\Test\2018\07\09\SO_51246286.ps1
#Requires -Version 3

## To sort numbers with a different places count use:
## $ToNatural from Roman Kuzmin source https://stackoverflow.com/a/5429048/6811411
$ToNatural = { [regex]::Replace($_, '\d+', { $args[0].Value.PadLeft(20,"0") }) }

Push-Location "X:\start\folder"

$PDFsToPrint = (Get-ChildItem *.pdf -File |
  Where-Object BaseName -match '^([0-9]+[A-C]?-\d+)-(\d+)$'|
    Group-Object {$Matches[1]} |
      Foreach-Object {
        $_.Group | Sort-Object $ToNatural | Select-Object -Last 1
      } ).FullName
# $PDFsToPrint

Pop-Location

$Printer = Get-Printer | Select-Object Name,Drivername,PortName |
   Out-GridView -Title "Select the printer for output" -OutputMode Single

#Adobe SDK: http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/Acrobat_SDK_developer_faq.pdf
$Acrobat = 'C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe'

ForEach($Pdf in $PDFsToPrint) {
    $ArgList=' /S /T "{0}" "{1}" "{2}" {3}' -f `
        $Pdf,
        $Printer.Name,
        $Printer.DriverName,
        $Printer.PortName

    Start-Process $Acrobat -ArgumentList $ArgList
    #Start-Sleep -Seconds 60  #optional delay    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多