我目前正在尝试编写执行以下操作的Powershell脚本:
上下文:我们大约有70k无法打开的PDF文件。使用某种工具检查它们后,似乎其中99%的文件已损坏,其余1%是zip文件。 压缩的PDF文件的第一字节以“ PK”开头,损坏的PDF文件的第一字节以PDF1.4开头。 我需要解压缩所有zip文件并重新定位它们。手动处理70k PDF文件有点痛苦,所以我正在寻找一种自动化的方法。
我知道我应该提供代码示例,但事实是我绝对迷路了。我之前已经写了一些powershell脚本,但是我不知道该怎么做。
因此,如果有人能指出我正确的方向或给我有用的功能,我将非常感谢。
答案 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
}
}