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

标签 powershell pdf

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

  • 浏览脚本所在目录中的所有 PDF 文件
  • 检查这些 PDF 文件的前几个字节
  • 如果这些字节表示类似“PK”的内容,请将它们移动到其他位置
  • 如果字节表示其他内容(例如:PDF1.4),请完全不要移动它们并转到下一个。

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

我知道我应该提供一个代码示例,但事实是我完全迷失了。我之前写过一些powershell脚本,但我不知道如何做这样的事情。

所以,如果有人能指出我正确的方向或给我一个有用的功能,我将非常感激。

最佳答案

您可以使用 Get-Content 按照您的要求获取前 6 个字节。 然后,我们可以将其绑定(bind)到所有文档的循环中,并配置一个简单的 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 显然将是新目录!

您仍然需要更改 式的“%PDF-1.5*” 以适合您的搜索!

它应该为你完成剩下的事情,试一试

再次编辑

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

关于Powershell:浏览目录中的所有文件(PDF)并根据前 6 个字节中写入的内容移动它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57723615/

相关文章:

python - 将 SVG 转换为 PDF(svglib + reportlab 不够好)

regex - 使用从正则表达式捕获的字符串来格式化日期时间

powershell,写入主机文件的所有文件名

c++ - 从模板创建用于在 Qt 中打印的 PDF 文档

php - PDF 中的工具提示 : are they possible?

c# - PDF 将零件编号转换为链接

powershell - 将负数设置为零Powershell

powershell - 如果可以运行包含选项的命令,如何使用Powershell进行验证?

powershell - 作为管理员的Start-Process -WorkingDirectory未设置位置

android - 下载 PDF 时 InputStream 返回空文件