我以为命令选项中有一个简单的开关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"
更多资源
答案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