如何使用PowerShell对多个文件调用Print动词
实现PowerShell批量调用「打印图片」对话框(多文件统一打印)
我明白你想要的效果——就像在Windows资源管理器里多选文件后右键点击“打印”那样,一次性弹出包含所有选中文件的「打印图片」对话框,而不是逐个文件弹出单独的对话框。你之前的单文件方法确实只能处理单个文件,这里给你推荐一个和资源管理器行为完全一致的方案:
使用Shell.Application的PrintItems方法
这个方法直接调用系统原生的打印逻辑,完美复刻资源管理器多选打印的体验,会弹出统一的对话框让你设置打印参数(比如份数、纸张规格等),所有选中文件都会在同一个对话里处理。
示例代码
# 第一步:定义要打印的文件路径数组(可以是同一文件夹的多个文件) $filesToPrint = @( "C:\Images\person.jpg", "C:\Images\vacation.png", "C:\Images\family.jpeg" ) # 第二步:创建Shell.Application COM对象 $shell = New-Object -ComObject Shell.Application # 第三步:获取文件所在的父文件夹对象(确保所有文件在同一文件夹下) $parentFolder = $shell.Namespace((Split-Path -Path $filesToPrint[0] -Parent)) # 第四步:收集要打印的文件项 $printItems = @() foreach ($filePath in $filesToPrint) { # 解析出文件夹中的文件项 $fileItem = $parentFolder.ParseName((Split-Path -Path $filePath -Leaf)) if ($fileItem) { $printItems += $fileItem } } # 第五步:调用PrintItems,弹出统一的打印对话框 if ($printItems.Count -gt 0) { $parentFolder.PrintItems($printItems) } else { Write-Host "没有找到有效的文件" }
注意事项
- 如果你的文件分散在不同文件夹里,需要按文件夹分组处理,因为
PrintItems只能处理同一文件夹下的文件。可以用Group-Object先按文件夹分组,再循环处理每组文件。 - 这个方法依赖Windows的Shell COM对象,需要在有桌面环境的Windows系统中运行(服务器核心版可能不支持)。
为什么不直接循环调用Start-Process?
你之前的单文件方法如果直接循环,会逐个弹出「打印图片」对话框,每次都需要手动确认,这显然不是你想要的体验。而上面的方案能实现和资源管理器完全一致的批量打印对话框,效率更高。
内容的提问来源于stack exchange,提问作者daibatzu
相关产品推荐
相关产品推荐

