windows - 如何在多个文件上调用动词

标签 windows powershell printing windows-shell shell-verbs

使用 PowerShell 我想在多个文件上调用打印动词。在 Windows 资源管理器中,我可以进入一个文件夹,选择多个文件,右键单击并选择打印选项。这将打开“打印图片”对话框,其中包含所有选定的文件。我可以使用以下方法对一个文件执行此操作:

$path = "C:\person.jpg";
Start-Process -FilePath $path -Verb Print | Out-Null;
Start-Sleep -s 150;

但想知道如何对多个文件执行此操作。

最佳答案

您可以使用 COM 在一次操作中调用多个文件上的动词。

假设...

$folderPath = 'X:\Test'
$verbName = 'print'
$verbArguments = ''

...您可以使用...打印文件夹中的所有对象

$application = New-Object -ComObject 'Shell.Application'
$folder = $application.NameSpace($folderPath)
$folderItems = $folder.Items()
Write-Verbose "Folder ""$($folder.Self.Name)"" contains $($folderItems.Count) item(s)."
$folderItems.InvokeVerbEx($verbName, $verbArguments)

我说“对象”是因为 $folderItems 将包含文件和文件夹。默认值似乎是枚举子文件夹并忽略隐藏对象,而动词在不支持它们的对象上被忽略。

例如,如果您只想打印具有特定扩展名的直接子文件并包含隐藏文件,则可以使用 Filter() 方法来实现...

New-Variable -Name 'SHCONTF_NONFOLDERS'    -Option 'Constant' -Value 0x00040
New-Variable -Name 'SHCONTF_INCLUDEHIDDEN' -Option 'Constant' -Value 0x00080

$application = New-Object -ComObject 'Shell.Application'
$folder = $application.NameSpace($folderPath)
$folderItems = $folder.Items()
$folderItems.Filter($SHCONTF_NONFOLDERS -bor $SHCONTF_INCLUDEHIDDEN, '*.jpg')
Write-Verbose "Filtered folder ""$($folder.Self.Name)"" contains $($folderItems.Count) item(s)."
$folderItems.InvokeVerbEx($verbName, $verbArguments)

如果您想打印一些自定义文件集,但这些文件在扩展名、可见性等方面不能很好地对齐,那么我没有找到一种方法可以做到这一点。这似乎需要修改 $folderItems 或创建新的 FolderItems3 实例,但这两种方法似乎都不可行。我看到有一个ShellFolderView type支持item selection ,但这看起来像是用于与资源管理器(类似)窗口交互。

上面使用的类型和常量的文档:

关于windows - 如何在多个文件上调用动词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56814683/

相关文章:

c++ - OpenSSL SSL_read 失败(错误 :00000005:lib(0):func(0):DH lib)

powershell - 在 Powershell 中映射驱动器的 "better"方式是什么?

powershell - 在Powershell中删除关闭按钮$ host.ui.PromptForCredential

powershell - 来自 cs 的 Add-Type,需要引用程序集

android - 通用打印机驱动程序 - Android

windows - 使用 git 在 Windows 中推送到 code.google.com

c++ - 如何扫描另一个进程内存以查找特定字符串后面的内容?

android - 从本地蓝牙打印机上的 php 应用程序打印

windows - 是否可以从另一个进程捕获渲染 Audio Session ?

android - 将 wifi 打印机连接到 android 设备以使用打印机管理器以编程方式进行 PDF 打印