首页 > 解决方案 > 如何在 CLI 界面 (PowerShell) 中选择多个文件

问题描述

我正在尝试将一些 gif 文件批量转换为动画 png 文件,但是,我的问题很清楚。如何将目录中的多个文件输入到 CLI 终端(我正在使用 PowerShell)?

我是一个初学者,所以我 99% 确定我在做一些愚蠢的事情。

我正在使用 gif 动画 png 程序(gif2apng)当我放类似的东西时它可以完美地工作

gif2apng -i file.gif -o output.png

我在那个目录中有多个 GIF,所以我使用了通配符

gif2apng -i *.gif

但是,我得到一个错误

Error: can't open the file '*.gif'

当我尝试选择多个图像(使用 Google 的程序 img2webp)时,我得到了这个确切的错误,而不是像这样写所有名称

img2webp -lossy 1.png 2.png 3.png 4.png 5.png 6.png -o output.png

而且只要写

img2webp -lossy *.png

请指导我

谢谢,哈西特

标签: powershellcommand-line-interface

解决方案


与 POSIX 兼容的 shell(例如bash在类 Unix 平台上)不同,Windows [1]上的 PowerShell不执行 globbing - 也就是说,它不会自动扩展为当前目录中具有扩展名的文件的名称*.gif.gif

因此,通配符模式逐字*.gif传递给,这似乎需要文字文件名,因此失败。gif2apng

解决方案是让 PowerShell使用cmdlet显式执行 globbing:Get-ChildItem

gif2apng -i (Get-ChildItem *.gif).Name -o output.png
  • Get-ChildItem *.gif检索当前目录中所有带有扩展名.gif的项目(如果您明确想要从匹配中排除目录-File,您可以添加开关),作为System.IO.FileInfo实例。

  • (...).Name返回它们的名称并将它们作为单独的参数传递给gif2apng.


[1] 但是,在类 Unix 平台(macOS、Linux)上,PowerShell(Core} 7+确实为外部程序执行此自动通配符。


推荐阅读