You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本调用PDFTK批量加密PDF时文件名含[]异常如何修复

问题修复方案

问题原因

PowerShell 中 [] 属于通配符保留字符,默认传递路径时会被当作通配符规则解析,而非普通文件名的一部分,因此无法匹配到文件名包含[]的实际文件,最终导致文件被跳过。

修复要点

  • 避免重复调用Get-Item,直接使用Get-ChildItem返回的FileInfo对象自带的属性(FullName、Basename),不需要额外查询文件信息
  • 调用外部程序pdftk时,使用--%停止PowerShell的参数解析,避免特殊字符被错误解析
  • 移除冗余的临时密码文件读写逻辑,直接使用生成的密码变量即可,同时避免可能的编码问题
  • 补充:你当前输出的是逗号分隔的文本文件,后缀用.xlsx是错误的,实际无法用Excel正常打开,建议修改后缀为.csv,如果需要生成标准xlsx文件可以额外调用ImportExcel等PowerShell模块实现

修复后完整代码

# 建议将后缀改为csv,符合逗号分隔文本的格式规范
$password_file = "output\passwords.csv"
Remove-Item $password_file -ErrorAction Ignore

# 遍历input目录下所有pdf文件,-LiteralPath参数避免路径中通配符被解析
Get-ChildItem -LiteralPath "input\*.pdf" | ForEach-Object {
    $inp_file = $_.FullName
    $out_file = "output\" + $_.Basename + ".pdf"

    # 生成16位随机密码
    $password = -join ("!?@#$%^&0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".ToCharArray() | Get-Random -Count 16)

    # 调用pdftk加密,--% 让后续参数原样传给外部程序,避免特殊字符解析问题
    pdftk --% "$inp_file" output "$out_file" user_pw $password

    # 写入文件名和密码到记录文件
    $record = $_.Basename + "," + $password
    Add-Content -Path $password_file -Value $record
}

内容的提问来源于stack exchange,提问作者Akshay KB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:09:03