mogrify - 如何在 Windows 中递归遍历子文件夹

mogrify - 如何在 Windows 中递归遍历子文件夹

我以为命令选项中有一个简单的开关mogrify,可以告诉它同时检查子文件夹。但我没有找到。在Linux," find"命令似乎可以解决问题,你如何在视窗

magick mogrify -resample 72 -resize 700x700 -format png -path "C:\ImageMagick-7.0.8-Q16\dest" *.*

可以,但我也需要它递归遍历子文件夹。最简单的方法是什么?

理想情况下,我希望在目标中保留源目录结构,但仅包含处理过的图像。

答案1

ImageMagick 以递归方式 Mogrify 文件 - Windows

您可以使用支持/R循环从文件所在的根目录开始迭代文件,然后根据下面的示例针对每个文件运行相应的命令。

如果省略该-path参数,它似乎将针对原始文件所在的位置运行。因此,要找到一个简单的解决方案来保留原始源的原始结构,请考虑将源文件的原始根文件夹复制到新位置,然后重命名该文件夹。


示例命令

笔记: 确保替换C:\Source\Folder\Root为文件或文件子文件夹所在的确切文件夹,它将递归对这些文件运行命令操作。

for /r "C:\Source\Folder\Root" %a in (*.*) do mogrify -resample 72 -resize 700x700 -format png "%~a"

示例命令(带删除)

for /r "C:\Source\Folder\Root" %a in (*.*) do mogrify -resample 72 -resize 700x700 -format png "%~a" && IF NOT [%~Xa]==[.png] DEL /Q /F "%~a"

更多资源

  • 支持/R
  • 批量替换 (FOR /?)

    此外,FOR 变量引用的替换功能也得到了增强。现在您可以使用以下可选语法:

    %~xI        - expands %I to a file extension only
    
  • 莫格里菲

  • 德尔

答案2

dir -recurse -path "D:\DOWNLOAD" -include *.jpg | %{magick $_.FullName -quality 95% -interlace Plane -sampling-factor 4:2:0 -strip "$($_.Directory)\$($_.Basename).webp"}

Powershell 解决方案,根据需要更改因素。

输入所有这些因素非常麻烦,对于 powershell,您可以设置一个“格式化”命令的函数:

    function magickrec($tpath, $quality,$sformat ,$tformat)
{
    dir -recurse -path $tpath -include *.$sformat | %{magick $_.FullName -quality $quality -interlace Plane -sampling-factor 4:2:0 -strip "$($_.Directory)\$($_.Basename).$tformat"}
}

将其保存在您的默认 powershell 文件夹 ( eg.D:\DOCUMENT\WindowsPowerShell)中Microsoft.PowerShell_profile.ps1,并将您的“ExecutionPolicy”设置为“RemoteSign”。 (为此,您需要以管理员身份运行 ps,然后set-ExecutionPolicy RemoteSigned)

通过输入,magickrec "yourpath" 76% jpg heic您可以将该文件夹中的所有 jpg 图像递归转换为 heic。与之前一样,您可以根据需要更改因子。

答案3

现有的 Windows 答案每次只提供一个文件mogrify,这可能会减慢速度,因为它不能以相同的方式与 OpenMP 进行多线程处理。

以下是我为批处理脚本格式化的答案。它会对当前目录中的所有匹配文件进行 mogrifying,然后还会对所有子目录中的文件进行 mogrifying(递归)。将批处理脚本保存在所需的目录中,然后双击执行它。

@echo off
echo MOGRIFY CURRENT DIRECTORY:
@echo on
magick mogrify -transparent white -trim +repage *.png
@echo off
echo:
echo MOGRIFY SUBDIRECTORIES:
@echo on
FOR /D /R %%A IN (*) DO magick mogrify -transparent white -trim +repage "%%A\*.png"
@echo off
echo:
echo SCRIPT COMPLETE
pause

相关内容