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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:33:19