Сохранение структуры SubSubFolder при объединении в другую папку [Duplicate FolderNames Will Exist] - PullRequest
0 голосов
/ 18 мая 2018

Я в настоящее время получаю электронные письма для билетов и ответов.Они автоматически отправляются в папки в формате PDF.Я создаю обложки для них.Так важно три раздела, которые в конечном итоге станут одним большим pdf (обложка, тикет и ответ).Номера билетов состоят из 14 цифр, и обычно электронные письма содержат этот номер билета где-то в строке темы (который является заголовком в формате pdf).Поэтому я использую BulkRenameUtility и Regex, чтобы переименовать каждый билет в 14-значный номер билета, с «-Ticket» после него.Все ответы затем получают имена с 14-значным номером билета, с префиксом 2 (так что pdftk объединяет его последним), и, если есть несколько ответов, последовательно нумеруются.Все обложки автоматически генерируются с помощью «10A-», затем 14-значный номер билета, затем номер задания.Номера билетов имеют формат YYMMDDHHNN ####.Так что pdftk компилирует их как Cover, ticket, затем response.Но прежде чем pdftk может объединить PDF-файлы в один.Мне нужно, чтобы они были в одной папке.Я использую пакетный скрипт для сортировки всех обложек в папку с 14-значным именем заявки в качестве названия папки, то же самое для ответов и заявок.Таким образом, я получаю (в зависимости от количества билетов, сейчас у меня 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

Прямо сейчася обрезал / вставил папки и нажал OK во всплывающем окне слияния в проводнике Windows.Но я должен научить весь процесс другому человеку на следующей неделе, и я хотел бы упростить его.После слияния всех моих папок я запускаю скрипт powershell с PDFTK, чтобы объединить файлы pdf и сохранить их в родительской папке.

Я действительно мог бы использовать некоторую помощь для получения подпапок Обложки, Ответы и Билеты наПерейдите в папку Complete, объединив повторяющиеся имена папок, чтобы создать одну папку со всеми моими файлами для каждого номера заявки, чтобы я мог запустить следующий скрипт 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.

1 Ответ

0 голосов
/ 21 мая 2018

Я бы остановился на более современном скриптовом языке.Я создал тестовую среду на своем виртуальном диске 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...