PowerShell调用img2pdf报‘文件名或扩展名过长’错误求助
解决img2pdf合并大量图片时命令行过长的问题
问题核心
当传递700张图片路径作为命令行参数时,总长度超出了Windows的命令行参数限制——LongPathsEnabled注册表项仅解决单个文件路径的长度问题,无法覆盖整个命令行参数的总长度限制。
可行解决方案
方法1:通过文件列表传递图片路径
利用img2pdf支持从文本文件读取路径列表的特性,彻底避开命令行长度限制:
- 生成包含所有图片完整路径的文本文件:
$images = Get-ChildItem -Path 'C:\Users\ralf\Documents\raw scans\volume 39\chapter 1' | Sort-Object CreationTime $images.FullName | Out-File -FilePath 'image_list.txt' -Encoding UTF8
- 让img2pdf读取该列表文件执行合并:
img2pdf --input-list image_list.txt -o "chapter1.pdf"
方法2:通过管道直接传递路径
无需生成中间文件,直接通过管道将图片路径传递给img2pdf:
Get-ChildItem -Path 'C:\Users\ralf\Documents\raw scans\volume 39\chapter 1' | Sort-Object CreationTime | Select-Object -ExpandProperty FullName | img2pdf -o "chapter1.pdf"
方法3:用符号链接缩短目录路径
创建短路径的符号链接替代原长路径目录,减少参数总长度:
# 创建指向目标目录的符号链接 New-Item -ItemType SymbolicLink -Path "C:\temp\scan39ch1" -Target "C:\Users\ralf\Documents\raw scans\volume 39\chapter 1" # 切换到链接目录执行命令 Set-Location "C:\temp\scan39ch1" $images = Get-ChildItem | Sort-Object CreationTime img2pdf $images -o "C:\Users\ralf\Documents\raw scans\volume 39\chapter1.pdf" # 清理符号链接 Remove-Item "C:\temp\scan39ch1"
优先级建议
优先使用方法1,它不受图片数量限制,是最稳定的解决方案;方法2依赖img2pdf对管道输入的支持,部分版本可能存在兼容问题。
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

