我正在尝试使用在此处找到的Powershell脚本将PDF文件转换为TIFF文件。我大部分的脚本都在工作,但是我似乎无法弄清楚如何将TIFF文件保存在PDF所在的原始文件夹中。
#Path to your Ghostscript EXE
$tool = 'C:\Program Files\gs\gs9.25\bin\gswin64c.exe'
#Directory containing the PDF files that will be converted
$inputDir = 'C:\Temp\Test_ED_Data\1\'
#Output path where converted PDF files will be stored
$outputDirPDF = 'C:\Temp\PDF_Out\'
#Output path where the TIFF files will be saved
$outputDir = $inputDir
$pdfs = get-childitem $inputDir -recurse | where {$_.Extension -match "pdf"}
foreach($pdf in $pdfs)
{
$tif = $outputDir + $pdf.BaseName + ".tiff"
if(test-path $tif)
{
"tif file already exists " + $tif
}
else
{
'Processing ' + $pdf.Name
$param = "-sOutputFile=$tif"
& $tool -q -dNOPAUSE -sDEVICE=tiffg4 $param -r300 $pdf.FullName -c quit
}
Move-Item $pdf $outputDirPDF
}
脚本运行后,所有PDF都显示在原始输入目录中,而不显示在任何子目录中。
因此,例如,如果C:\ Temp \ Test_ED_Data \ 1 \中包含1个PDF,它将转换为TIFF并保存在C:\ Temp \ Test_ED_Data \ 1 \中,但是子目录(如C:\ Temp \ Test_ED_Data \ 1 \ Progress \也保存在C:\ Temp \ Test_ED_Data \ 1的原始子目录中。
如何获取此脚本,以确保将转换后的文件保存在从中检索到的目录中?当Powershell引用节$outputDir = $inputDir
时,好像不记得递归的路径。我该怎么做才能纠正这个问题?
谢谢。
答案 0 :(得分:2)
因此快速浏览一下脚本显示
$outputDir = $inputDir
而且
$pdfs = get-childitem $inputDir -recurse | where {$_.Extension -match "pdf"}
这基本上意味着在$ inputDir中找到所有带有PDF扩展名的文件,并搜索$ inputDir中的所有其他文件夹。但是您保存的是$ inputDir
的静态位置试一下
function CovertPDF-TIFF($InputDirectory, $OutputPDFLocation){
$tool = 'C:\Program Files\gs\gs9.25\bin\gswin64c.exe'
get-childitem $InputDirectory -include "*.pdf" -recurse | %{
$tiff = "$($_.Directory)\$($_.BaseName).tiff"
if(test-path $tiff)
{
"tiff file already exists " + $tiff
}
else
{
'Processing ' + $_.Name
$param = "-sOutputFile=$tiff"
& $tool -q -dNOPAUSE -sDEVICE=tiffg4 $param -r300 $_.FullName -c quit
}
Move-Item $pdf $OutputPDFLocation
}
}
CovertPDF-TIFF -InputDirectory C:\Temp\Test_ED_Data\1\ -OutputPDFLocation C:\Temp\PDF_Out\
这里发生的是管道。基本上,管道是您获取输出并将其推送到另一个命令的地方,管道的符号为 | 。
在 Get-ChildItem 中,我们将包括所有以 *。pdf
结尾的文件我们将 | 每个项目通过管道传送到每个对象,也称为% 在那里,我们创建了一个变量 $ Tiff ,用于根据找到的PDF存储调用tiff的位置和名称。在管道中, $ _ 是用于管道传输的信息的变量(在这种情况下,其为“子项信息”,也称为PDF文件信息)。在powershell中, $()可让您向字符串或另一个称为表达式的命令添加单独的命令,其专有名称为 Sub Expression 。因此, $ Tiff 保留子项目录的字符串,然后添加子项文件名,然后在末尾添加.tiff。 然后,它使用命令 Test-Path 检查该项目是否存在。 如果是,则返回一条消息。如果没有,它将创建参数并运行gswin64c.exe可执行文件。在其中一个参数中,您将看到 -sOutputFile = $ tiff 。在这里,我们定义了保存新Tiff文件的位置。最后,通过 Move-Item
将PDF文件移动到新位置答案 1 :(得分:0)
您需要做的就是交换此行:
$tif = $outputDir + $pdf.BaseName + ".tiff"
与此:
$tif = $pdf.FullName -Replace $pdf.Extension,".tiff"