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



使用powerShell我想在多个文件上调用print动词。在Windows Explorer中,我可以进入文件夹,选择许多文件,右键单击并选择"打印"选项。这将打开使用所有选定文件的打印图片对话框。我可以使用:

对一个文件执行此操作。
$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类型,但看起来它是与Explorer(-like(窗口进行交互的。

用于上述类型和常数的文档:

  • Shell.Application属性
  • Shell.NameSpace方法
  • Folder对象
  • FolderItems3对象
  • FolderItems2.InvokeVerbEx方法
  • FolderItems3.Filter方法
  • _SHCONTF枚举

据我所知,您可以使用foreach迭代一系列项目(您要打印的文件(中的所有项目,并在每个项目上执行操作print如下:

Get-ChildItem "C:" -Include "*.jpg" | ForEach-Object {start-process $_.FullName –Verb Print}
Start-Sleep -s 150

这将:

  • 获取C

  • 中的所有文件(JPG文件(
  • 在每个文件上应用动词print

注意您可以将-wait参数用于Start-Process而不是Start-Sleep -s 150;这要等待指定的过程及其后代在接受更多输入之前完成。

最新更新