我看到了这些帖子:
- mogrify - 如何在 Windows 中递归遍历子文件夹
- 使用 imagemagick 识别多个子文件夹中的所有文件
- https://stackoverflow.com/questions/30414346/batch-command-for-imagemagick-to-convert-all-files-in-a-directory-and-sub-direct
- https://stackoverflow.com/questions/784057/run-a-simple-command-using-powershell-recursively-on-a-directory
但其中的所有命令都会导致错误。例如:
PS D:\> find . -name '*.png' -exec mogrify -format jpg {} +
FIND: Parameter format not correct
PS D:\> for /r . %a in (*.png) do mogrify -resample 90 -format jpg "%~a"
At line:1 char:4
+ for /r . %a in (*.png) do mogrify -resample 90 -format jpg "%~a"
+ ~
Missing opening '(' after keyword 'for'.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingOpenParenthesisAfterKeyword
PS D:\> for(/r . %a) in (*.png) do mogrify -resample 90 -format jpg "%~a"
At line:1 char:13
+ for(/r . %a) in (*.png) do mogrify -resample 90 -format jpg "%~a"
+ ~
Missing statement body in for loop.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingLoopStatement
PS D:\> for(/r . %a) {in (*.png) do mogrify -resample 90 -format jpg "%~a"}
/r : The term '/r' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:5
+ for(/r . %a) {in (*.png) do mogrify -resample 90 -format jpg "%~a"}
+ ~~
+ CategoryInfo : ObjectNotFound: (/r:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
PS D:\> magickrec . 90% png jpg
magickrec : The term 'magickrec' is not recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ magickrec . 90% png jpg
+ ~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (magickrec:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
PS D:\>
我没有足够的声誉来对超级用户的任何问题发表评论/等等,所以我无法回复任何内容。另外,我想普遍这样做,所以不要给我像“D:”这样的静态路径。我希望它在当前目录中,这样我就可以在任何地方使用该命令。此外,执行的 ImageMagick 命令应该是 mogrify 而不是 convert。
答案1
我需要运行的命令如下:
dir -Filter *.png -Recurse | %{mogrify -format jpg $_.FullName}
在您想要的文件夹中执行此操作将使当前目录及其任何目录中的所有文件都 mogrify。如果您想删除之后留下的所有 PNG,您应该使用...
dir -Filter *.png -Recurse | del
答案2
我宁愿能够在我想要执行此操作的任何目录中Shift+并打开 PowerShell。
Right Click
如果文件夹在资源管理器中打开,您只需键入cmd
通常给出的文件路径,然后按Enter即可在该文件夹中打开命令窗口(即不是 PowerShell)。执行您要查找的操作的批处理命令例如:
for /r . %a in (*.jpg) do (magick mogrify -resample 90 -format png "%~a")
正如您在问题中提到的那样。
(此答案跳过了 PowerShell 解决方案,因为在自我回答中已经提供了一个解决方案。)