2015-10-14 51 views
1

我有一個腳本來合併PDF的,如果它們在同一個文件夾中。我正在嘗試將最終合併的PDF名稱更改爲它所在目錄的名稱,但我對PowerShell並不熟悉。任何人都可以協助保存輸出文件與它所在的目錄名稱相同

$PDFtk = "C:\pdktk\pdftk.exe" 
$inputfolder = "C:\pdftest" 
$outputfile = "combined_file.pdf" 

dir $inputfolder -r -include *.pdf -exclude $outputfile | sort-object | group DirectoryName | 
% {& $PDFtk $_.group CAT OUTPUT "$($_.Name)\$outputfile" verbose} 

最終結果是:

pdftest\ 
    Folder 1\ 
    1.pdf 
    2.pdf 
    3.pdf 
    Folder 1.pdf <--merged pdf 
    Folder 2\ 
    4.pdf 
    5.pdf 
    Folder 2.pdf <--merged pdf 
+0

確實pdftk.exe採取的輸入輸出arfuements '全名'? – Kiran

回答

0

您必須將$outputfile任務移動到您的%循環內。我也分開獲取文件夾,從獲取每個文件夾內的文件。現在有兩個 'GET-ChildItem' 命令(或dir):

$PDFtk = "C:\pdktk\pdftk.exe" 
$inputfolder = "C:\pdftest" 

Get-ChildItem $inputfolder -Recurse | ? {$_.PSIsContainer } | % { 
    $currentfolder = $_ 
    $outputfile = "$($currentfolder.Name -split '\\' | Select -Last 1).pdf" 
    Get-ChildItem $currentfolder.FullName -Exclude $outputfile | ? {$_.Extension -ieq ".pdf"} | % { 
     & $PDFtk "$($currentfolder.FullName)\$($_.Name)" CAT OUTPUT "$($currentfolder.FullName)\$outputfile" verbose 
    } 
} 
+0

$ inputfolder中的文件夾如何?我不想要$ inputfolder名稱,但是pdf文件夾所在的文件夾。 – techora

+0

嗯,當我運行更新後的代碼時,什麼都不會發生。我改變了輸入文件夾來指向我,但仍然沒有。 – techora

+0

我不確定爲什麼,但是'-Include'沒有工作,所以改變了。我也不確定程序pdftk的參數 - 假設它的「 CAT OUTPUT 詳細」? – xXhRQ8sD2L7Z

0

下面的代碼應該很好地工作:

$pdftk = 'C:\Program Files (x86)\PDFtk Server\bin\pdftk.exe' 
$root = 'E:\posh\test' 

gci $root -Include *.pdf -Recurse | 
group DirectoryName | 
% { 
    $dir = gi $_.Name 
    $al = $_.Group | % { $_.FullName } 
    $al += 'cat', 'output' 
    $al += Join-Path $dir.FullName "$($dir.BaseName).pdf" 
    $al += 'verbose' 
    saps $pdftk $al -Wait 
} 
+0

它似乎無法找到與此代碼的PDF,但我會繼續調查。 – techora

+0

我編輯了代碼,但沒有改變原來的行爲。我安裝了PDFtk並確認它按預期工作。在我以前的代碼中,「$ pdftk」被設置爲「C:\ pdftk \ pdftk.exe」,但在您的代碼中,「$ PDFtk」似乎設置爲「C:\ pdktk \ pdftk.exe」有一個錯字。這可能是爲什麼我的代碼不工作:) – 2015-10-15 00:35:46