Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 在合并到另一个文件夹时维护子文件夹结构[将存在重复的文件夹名]_Powershell_Batch File_Merge_Directory - Fatal编程技术网

Powershell 在合并到另一个文件夹时维护子文件夹结构[将存在重复的文件夹名]

Powershell 在合并到另一个文件夹时维护子文件夹结构[将存在重复的文件夹名],powershell,batch-file,merge,directory,Powershell,Batch File,Merge,Directory,我目前收到关于门票和回复的电子邮件。它们会自动以pdf格式发送到文件夹中。我为他们制作封面。因此,重要的3个部分最终将成为一个大的pdf(封面、门票和回复)。 票号是14位数字,通常电子邮件在主题行(即pdf标题)的某处包含该票号。因此,我使用BulkRenameUtibility和正则表达式将每张票证重命名为14位票号,后面加“-ticket”。然后,所有响应都会被命名为14位票号,前缀为2(以便pdftk最后合并它),如果有多个响应,则按顺序编号。所有封面都会自动生成“10A-”,然后是14

我目前收到关于门票和回复的电子邮件。它们会自动以pdf格式发送到文件夹中。我为他们制作封面。因此,重要的3个部分最终将成为一个大的pdf(封面、门票和回复)。 票号是14位数字,通常电子邮件在主题行(即pdf标题)的某处包含该票号。因此,我使用BulkRenameUtibility和正则表达式将每张票证重命名为14位票号,后面加“-ticket”。然后,所有响应都会被命名为14位票号,前缀为2(以便pdftk最后合并它),如果有多个响应,则按顺序编号。所有封面都会自动生成“10A-”,然后是14位票号,然后是工作编号。票号的格式为YYMMDDHHNN。这使得pdftk将它们编译为封面、票证,然后是响应。 但在pdftk将PDF合并为一个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
现在我正在剪切/粘贴文件夹,并在windows资源管理器中的“合并”弹出窗口上单击“确定”。 但是下周我必须把我的整个过程教给另一个人,我想把它简化一下。 合并所有文件夹后,我将使用PDFTK运行powershell脚本以合并pdf文件并将其保存在父文件夹中

我真的需要一些帮助,让封面、回复和票证的子文件夹移动到完整文件夹合并重复的FolderName,为每个票证号码创建一个包含我所有文件的文件夹,这样我就可以运行下面的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之前,所有文件夹都会重命名为作业名称。

我会继续使用更现代的脚本语言。 我在rama磁盘上创建了一个测试环境:

## 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

sub中的
%~dpnx0
表示sub的名称,而不是批次的名称。在一个过于宽泛的问题上还有其他错误。将此限制为单个问题。批处理脚本可以正常工作。我只是想展示我目前使用的流程。我需要的是将相同名称的文件夹从三个子文件夹“合并”到一个父文件夹。每次我尝试时,它都会覆盖文件夹,结果我只能得到“回复”或“票证”。是否有powershell或batch cmd通知Windows资源管理器合并文件夹(如果文件夹已存在且未覆盖)?