PDF打印脚本

时间:2018-07-09 13:04:18

标签: windows cmd powershell-v2.0

我需要打印许多文档,并且我不想转到每个文档中选择并打印所有文档。这些文档具有修订版本,并且都位于同一文件夹中。我想打印这些文档的最新修订版。这些文档的格式为

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-(修订版号)开始到699A-0-(修订版号)的数字,其中一些开头也有A,B,C。

有没有一种方法可以创建一个外壳来自动打印这些外壳?还是我必须手动按住ctrl键并单击所有这些以打印它们?

如果可以创建外壳,该怎么办?

1 个答案:

答案 0 :(得分:0)

您的任务需要几个步骤

  • 列出文档,使用RegEx从版本中拆分名称,
  • 按名称分组文档,
  • 每个组按修订号进行数字排序
  • 仅获得最高转速。 (最后一个)

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

由于您的修订号包含的地方数量有所不同,因此您需要对数字进行排序, 这是通过$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    
}