我目前收到门票和回复的电子邮件。它们会自动以pdf格式发送到文件夹。我为他们创建封面。所以必不可少的3个部分最终将成为一个大的pdf(封面,票证和响应)。 票号是14位数,通常电子邮件在主题行的某处包含该票号(这是pdf标题)。所以我使用BulkRenameUtility和Regex将每张票重命名为14位票号,后面加“-Ticket”。然后,所有响应都被命名为14位票号,前缀为2(以便pdftk将其最后组合),并且如果有多个响应按顺序编号。所有封面都会自动生成“10A-”,然后是14位票号,然后是作业号。票号的格式为YYMMDDHHNN ####。这使得pdftk将这些编译为Cover,ticket,然后响应。 但是在pdftk可以将pdf合并为一个之前。我需要他们在同一个文件夹中。我使用批处理脚本将所有封面分类到一个文件夹中,其中14位票证名称为foldername,响应和票证相同。所以我最终得到(根据门票的数量,现在我有96个)像这样的许多子文件夹。
.....OpenLocates
..........Current
...............Complete
....................[EMPTY]
...............Covers #There will be one cover per job.
....................18051400000001
.........................10A-18051400000001_218001.pdf
....................18051400000002
.........................10A-18051400000002_217022.pdf
...............Responses #There will be multiple responses per ticket.
....................18051400000001
.........................218051400000001.pdf
.........................218051400000001_1.pdf
.........................218051400000001_2.pdf
....................18051400000002
.........................218051400000002.pdf
.........................218051400000002_1.pdf
.........................218051400000002_2.pdf
...............Tickets #There *can* be multiple tickets per job.
....................18051400000001
.........................18051400000001-Ticket.pdf
....................18051400000002
.........................18051400000002-Ticket.pdf
我需要的是将所有这些子文件夹合并为一个。不应该有重复的文件名,因为BRU在首次重命名pdf文件时会按顺序编号重复。
.....OpenLocates
..........Current
...............Complete
....................18051400000001
.........................10A-18051400000001_218001.pdf
.........................18051400000001-Ticket.pdf
.........................218051400000001.pdf
.........................218051400000001_1.pdf
.........................218051400000001_2.pdf
....................18051400000002
.........................10A-18051400000002_217022.pdf
.........................18051400000002-Ticket.pdf
.........................218051400000002.pdf
.........................218051400000002_1.pdf
.........................218051400000002_2.pdf
批处理脚本是:
@echo on
::CALLALL
Call :SortCovers
Call :SortResponses
Call :SortTickets
goto :EOF
:SortCovers
cd L:\OpenLocates\Current\Covers
for /f %%a in ('dir /a-d /b') do (
if not "%%~dpnxa"=="%~dpnx0" call :SortCoversFunction "%%~a"
)
goto :EOF
:SortCoversFunction
set file=%~1
set dir=%file:~4,14%
md "%dir%" 2>nul
move "%file%" "%dir%"
goto :EOF
:SortResponses
cd L:\OpenLocates\Current\Responses
for /f %%a in ('dir /a-d /b') do (
if not "%%~dpnxa"=="%~dpnx0" call :SortResponsesFunction "%%~a"
)
goto :EOF
:SortResponsesFunction
set file=%~1
set dir=%file:~1,14%
md "%dir%" 2>nul
move "%file%" "%dir%"
goto :EOF
:SortTickets
cd L:\OpenLocates\Current\Tickets
for /f %%a in ('dir /a-d /b') do (
if not "%%~dpnxa"=="%~dpnx0" call :SortTicketsFunction "%%~a"
)
goto :EOF
:SortTicketsFunction
set file=%~1
set dir=%file:~0,14%
md "%dir%" 2>nul
move "%file%" "%dir%"
goto :EOF
现在我剪切/粘贴文件夹,然后在Windows资源管理器中的合并弹出窗口中单击“确定”。 但我必须在下周将我的整个过程教给另一个人,我想简化它。 合并完所有文件夹后,我运行一个带有PDFTK的PowerShell脚本来合并pdf文件并将它们保存在父文件夹中。
我真的可以使用一些帮助来获取Covers,Responses和Tickets的子文件夹以移动到Complete文件夹,合并重复的foldernames以创建一个文件夹,其中包含每个票号的所有文件,因此我可以运行以下powershell脚本它确实以正确的顺序成功地将它们组合在一起。
$pdftk = "C:\SymLinks\Combine\pdftk.exe"
$inputFolder = "L:\OpenLocates\Current\Complete"
gci $inputfolder -r -include *.pdf | sort-object | group DirectoryName | % {& $PDFtk $_.group CAT OUTPUT "$($_.Name | Split-Path -Parent)\$($_.Name | Split-Path -Leaf).pdf" verbose}
非常感谢任何帮助。我已经尝试了几个不同的批处理和PowerShell脚本,似乎没有一个适合我。
编辑:在合并PDF之前,我会将一个作业的所有票号组合到一个文件夹中。在组合最终PDF之前,所有文件夹也会重命名为作业名称。
答案 0 :(得分:0)
我会留在更现代的脚本langugage。 我在我的ramdisk A:
上创建了一个测试环境## Q:\Test\2018\05\19\SO_50419164.ps1
$Sources = ("A:\OpenLocates\Current\Covers\",
"A:\OpenLocates\Current\Responses\",
"A:\OpenLocates\Current\Tickets\")
$Target = "A:\OpenLocates\Current\Complete\"
ForEach ($Source in $Sources){
Get-ChildItem $Source -Directory | ForEach-Object {
$TargetSub = Join-Path $Target $_.Name
If (!(Test-Path $TargetSub)){ MD $TargetSub |Out-Null}
Get-ChildItem $_.FullName -File | Move -Dest $TargetSub
Remove-Item $_.FullName
}
}
树a:/ F之前
A:\
└───OpenLocates
└───Current
├───Complete
├───Covers
│ ├───18051400000001
│ │ 10A-18051400000001_218001.pdf
│ │
│ └───18051400000002
│ 10A-18051400000002_217022.pdf
│
├───Responses
│ ├───18051400000001
│ │ 218051400000001.pdf
│ │ 218051400000001_1.pdf
│ │ 218051400000001_2.pdf
│ │
│ └───18051400000002
│ 218051400000002.pdf
│ 218051400000002_1.pdf
│ 218051400000002_2.pdf
│
└───Tickets
├───18051400000001
│ 18051400000001-Ticket.pdf
│
└───18051400000002
18051400000002-Ticket.pdf
运行脚本后:
A:\
└───OpenLocates
└───Current
├───Complete
│ ├───18051400000001
│ │ 10A-18051400000001_218001.pdf
│ │ 18051400000001-Ticket.pdf
│ │ 218051400000001.pdf
│ │ 218051400000001_1.pdf
│ │ 218051400000001_2.pdf
│ │
│ └───18051400000002
│ 10A-18051400000002_217022.pdf
│ 18051400000002-Ticket.pdf
│ 218051400000002.pdf
│ 218051400000002_1.pdf
│ 218051400000002_2.pdf
│
├───Covers
├───Responses
└───Tickets