Powershell:浏览目录中的所有文件(PDF)并根据前6个字节中的内容移动它们

时间:2019-08-30 08:58:55

标签: powershell pdf

我目前正在尝试编写执行以下操作的Powershell脚本:

  • 浏览脚本所在目录中的所有PDF文件
  • 检查这些PDF文件的前几个字节
  • 如果这些字节沿“ PK”的方向说了一些话,请将其移至其他位置
  • 如果字节有其他说明(例如:PDF1.4),请不要移动它们,然后转到下一个。

上下文:我们大约有70k无法打开的PDF文件。使用某种工具检查它们后,似乎其中99%的文件已损坏,其余1%是zip文件。 压缩的PDF文件的第一字节以“ PK”开头,损坏的PDF文件的第一字节以PDF1.4开头。 我需要解压缩所有zip文件并重新定位它们。手动处理70k PDF文件有点痛苦,所以我正在寻找一种自动化的方法。

我知道我应该提供代码示例,但事实是我绝对迷路了。我之前已经写了一些powershell脚本,但是我不知道该怎么做。

因此,如果有人能指出我正确的方向或给我有用的功能,我将非常感谢。

2 个答案:

答案 0 :(得分:2)

您可以根据需要使用Get-Content来获取前6个字节。 然后,我们可以将其绑定到所有文档的循环中,并配置简单的if语句来决定下一步要执行的操作,例如将文件移到另一个目录

根据您的评论进行编辑:

$pdfDirectory = 'C:\Temp\struktur_id_1225\ext_dok'
$newLocation = 'C:\Path\To\New\Folder'

Get-ChildItem "$pdfDirectory" -Filter "*.pdf" | foreach { 
    if((Get-Content $_.FullName | select -first 1 ) -like "%PDF-1.5*"){
        $HL7 = $_.FullName.replace("ext_dok","MDM")
        $HL7 = $HL7.replace(".pdf",".hl7")
        move $_.FullName $newLocation;
        move $HL7 $newLocation
    }
}

尝试使用上面的方法,这也更容易编辑。

$pdfDirectory将需要设置为包含PDF文件的文件夹

$newLocation显然将是新目录!

您仍然需要更改-like "%PDF-1.5*"以适合您的搜索!

它应该为您做剩下的事,试试吧

另一个编辑

我在计算机上模仿了您的文件夹结构,并放置了一些PDF文件和匹配的HL7文件,脚本运行良好。

答案 1 :(得分:0)

Get-Content不适合PDF,您想使用iTextSharp来阅读PDF。

下载iTextSharp(位于releases中)并将itextsharp.dll放置在易于查找的位置(即脚本所在的文件夹)。

您可以使用.nupkg来安装Install-Package,也可以仅使用存档工具来提取.nupkg文件(基本上是.zip文件)的内容< / p>

下面的代码将第1页上每个用空格分隔的PDF的每个单词添加到数组中。然后,您可以测试数组是否包含关键字

Add-Type -Path  "C:\path\to\itextsharp.dll"
$pdfs = Get-ChildItem "C:\path\to\pdfs"  *.pdf

foreach ($pdf in $pdfs) {
    $reader = New-Object itextsharp.text.pdf.pdfreader -ArgumentList $pdf.Fullname

        $text = [iTextSharp.text.pdf.parser.PdfTextExtractor]::GetTextFromPage($reader,1).Split("")
        foreach($line in $text) {
           # do your test here
        }
    }