我需要打印许多文档,并且我不想转到每个文档中选择并打印所有文档。这些文档具有修订版本,并且都位于同一文件夹中。我想打印这些文档的最新修订版。这些文档的格式为
630-0-110
9A-0-9
44-0-190
44-0-191
在这四个pdf文件中,44-0-191
是一个比44-0-190
更高的修订版,因此我想打印630-0-110
,9A-0-9
,44-0-191
我需要打印从6-0-
(修订版号)开始到699A-0-
(修订版号)的数字,其中一些开头也有A,B,C。
有没有一种方法可以创建一个外壳来自动打印这些外壳?还是我必须手动按住ctrl键并单击所有这些以打印它们?
如果可以创建外壳,该怎么办?
答案 0 :(得分:0)
您的任务需要几个步骤
由于您的修订号包含的地方数量有所不同,因此您需要对数字进行排序, 这是通过$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
}