我有一个包含多个子文件夹的文件夹,其中包含我想要从PNG转换为JPEG的图像。
我试过了:
cd d:\images
mogrify -format jpg \*\*.png
我尝试了两个方向的斜线(我使用的是Windows 7)。
但我只是犯了invalid argument
错误。
我该怎么办?
我真的最重视一个简单的示例答案,而不是链接到50页图像ImageMagick文档,如果可能的话(我是新手)。
答案 0 :(得分:4)
尝试在cmd提示符下使用以下内容:
mogrify -format jpg * .png
我浪费时间尝试在批处理文件中使用ImageMagick转换命令,但无法使其工作
答案 1 :(得分:3)
你总是可以执行for
- 循环:
cd D:\images
for /r /d %%a in (*) do mogrify -format jpg "%%~a\*.png"
将为每个子文件夹运行命令,使其为:
mogrify -format jpg "D:\images\name of subfolder\*.png"
这似乎符合您的要求。
要在命令提示符中使用此代码,请将%%a
替换为%a
要使用此代码,您需要将其放在批处理文件中。一个非常简单的程序是:
All Files (*.*)
。这样,每次要执行操作时都不必打开cmd。
答案 2 :(得分:1)
我没有安装 Imagemagick ,只是 IrfanView 。
一个 IrfanView 解决方案就是:
@echo off
for /R "D:\images" %%F in (*.png) do (
"%ProgramFiles(x86)%\IrfanView\i_view32.exe "%%~F" /convert "%%~dpnF.jpg"
)
另一个更快的IrfanView解决方案是:
@echo off
pushd "D:\images"
for /R %%F in (.) do (
"%ProgramFiles(x86)%\IrfanView\i_view32.exe" "%%~fF\*.png" /convert "%%~fF\*.jpg"
)
popd
使用第二个示例,将 IrfanView 命令替换为 mogrify 命令:
@echo off
pushd "D:\images"
for /R %%F in (.) do (
"Path to mogrify\mogrify.exe" -format jpg "%%~fF\*.png"
)
popd
要了解 ,推送和 popd 以及%%~F
,%%~dpnF
和{{ 1}}打开命令提示符窗口,执行以下命令,并读取每个命令的输出帮助。
%%~fF
for /?
pushd /?
答案 3 :(得分:1)
对于新手:
从下面链接下载ImageMagick:
https://www.imagemagick.org/script/download.php
然后只需复制并粘贴到cmd:
中的命令下面for /r /d %a in (*) do "C:\Program Files\ImageMagick-7.0.6-Q16\magick.exe" mogrify -format png "%~a\*.jpg"
以上命令对我来说运行正常,它将所有文件从JPG转换为PNG,存在于当前目录中。
然后如果你想删除所有剩余的JPG,只需按下面的命令:
for /r %i in (*.jpg) do del "%i"
答案 4 :(得分:0)
ImageMagick mogrify不会遍历目录。您将不得不在所需的每个目录上编写一个脚本循环。然后在循环更改目录并为每个目录运行mogrify -format jpg * .png。我还建议您备份目录或使用-path设置新的但是空的输出目录的路径。
答案 5 :(得分:0)
使用Python遍历子目录的解决方案:
import glob,os
paths = []
for path, subdirs, files in os.walk("."):
for name in files:
if ".png" in name:
paths.append(os.path.join(path, name))
for p in paths:
cmd = "convert " + p + " " + p[:-4] + ".jpg"
os.system(cmd)
os.system("rm " + p)