【发布时间】:2018-04-30 21:53:34
【问题描述】:
我一直在使用以下代码将每个子目录中的所有 .pdf 文件合并为一个 pdf。它将新组合的 pdf 作为子文件夹名称保存在子文件夹中。这很好,但是我必须手动将所有这些新创建的文件移到父文件夹中。这是当前代码:
$pdftk = "C:\SymLinks\Combine\pdftk.exe"
$inputFolder = "I:\Fort Gibson-DONE"
gci $inputfolder -r -include *.pdf | sort-object | group DirectoryName | % {& $PDFtk $_.group CAT OUTPUT "$($_.Name)\$($_.Name | Split-Path -Leaf).pdf" verbose}
我已经尝试通过以下方式将管道输出到 Move-Item:
$pdftk = "C:\SymLinks\Combine\pdftk.exe"
$inputFolder = "I:\Fort Gibson-DONE"
gci $inputfolder -r -include *.pdf | sort-object | group DirectoryName | % {& $PDFtk $_.group CAT OUTPUT "$($_.Name)\$($_.Name | Split-Path -Leaf).pdf" verbose} | % {mv $_.FullName $_.Directory.Parent.FullName }
但它不起作用。它是这样说的:
Move-Item : Cannot bind argument to parameter 'Path' because it is null.
At I:\CombineFortGibson.ps1:3 char:170
+ ... rbose} | % {mv $_.FullName $_.Directory.Parent.FullName }
+ ~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Move-Item], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.MoveItemCommand
我不确定如何将新创建的 PDF 移出到父文件夹。
我觉得我需要将 $.FullName 和 $.Directory.Parent.FullName 存储到一个变量中,然后将这些变量提供给移动项目。但我不知道该怎么做。变量似乎不适用于 pdftk。
我今天使用的是 Powershell 4.0,之前我在尝试使用变量的 PDFTK 时使用的是 Powershell 2.0。
【问题讨论】:
-
@TessellatingHeckler 我之前曾尝试过使用 $_.Directory.Parent) 并没有用,但你的方法有效!非常感谢!
-
酷 :) 我已将我的评论移至完整答案,如果您想用勾号将其标记为“已回答”,我将进一步解释原因。
-
@AmandaKay10 如果答案适合您,您应该通过勾选标记和/或投票来接受。
标签: powershell powershell-4.0 pdftk