Image processing Windows上的ImageMagick缩略图批处理
我正在使用ImageMagick创建照片的缩略图 我正在使用windows操作系统 我的源文件包含在许多子文件夹中 我希望通过保存到另一个驱动器上的目标文件夹,同时保留相同的文件夹结构和修改原始文件名,来制作源文件的缩略图 目标文件名与源文件名相同,但修改了1个字符: 来源示例:Image processing Windows上的ImageMagick缩略图批处理,image-processing,batch-file,imagemagick,Image Processing,Batch File,Imagemagick,我正在使用ImageMagick创建照片的缩略图 我正在使用windows操作系统 我的源文件包含在许多子文件夹中 我希望通过保存到另一个驱动器上的目标文件夹,同时保留相同的文件夹结构和修改原始文件名,来制作源文件的缩略图 目标文件名与源文件名相同,但修改了1个字符: 来源示例: c:\images\1\1L0000021.jpg c:\images\1\1L000561.jpg c:\images\2\234L0000032.jpg c:\images\3\31214L000001.jpg
c:\images\1\1L0000021.jpg
c:\images\1\1L000561.jpg
c:\images\2\234L0000032.jpg
c:\images\3\31214L000001.jpg
要删除驱动器,请执行以下操作:
d:\images\1\1M0000021.jpg
d:\images\1\1M000561.jpg
d:\images\2\234M0000032.jpg
d:\images\3\31214M000001.jpg
注:只有一个字母需要从L改为M
源文件名模式始终为:*l*.jpg
下面是我要运行的用于执行图像处理的命令:
convert -thumbnail 200x220^^ -gravity center -extent 200x200 -quality 80 c:\images\*.jpeg d:\images\output.jpeg
上面的命令从源文件夹创建所需的缩略图并保存到目标文件夹中,但输出文件名不正确,并且不会遍历子文件夹
问题:
1) 如何遍历每个文件夹和子文件夹,然后输出到目标驱动器上完全相同的结构(如果文件夹不存在,则创建文件夹)
2) 如何修改输出文件名,使*l*.jpeg
变为*m*.jpeg
1)这就是将文件夹树从C:\source复制到X:\dest的方法:
for /r C:\source %I in (.) do @md "X:\dest%~pnxI"
这个for循环所做的是遍历一个文件夹树,从C:\source开始,每个文件夹名都在变量%I中。命令“md”是“mkdir”的缩写。修饰符“~pnx”去掉了原始驱动器号,因此可以在X:\dest前面加上前缀。
请注意,“X:\dest”之后没有反斜杠,因为原始路径的第一个反斜杠被保留
2) 使用相同的命令运行Imagick命令以处理JPEG文件:
for /r C:\source %I in (.) do @convert -options %I "X:\dest%~pnxI"
目标名称相同。
3) 使用Naru()提供的FlexibleRename工具重命名目标树中的所有JPEG()。它可以使用正则表达式来选择和修改名称。
你会重新命名吗
"(\d+)L(.+)"
到
含义:至少一个小数点,后跟一个文字“L”,后跟至少一个以上字符。名称由第一部分、文字“M”和第二部分替换
编辑:
处理步骤2)需要一个文件选择器才能工作,如下所示:
for /r C:\source %I in (*.jpg) do @convert -options %I "X:\dest%~pnxI"
否则,只处理文件夹名称-根据“转换”程序的不同,这可能足够,也可能不够。请尝试以下操作:
@echo off &setlocal enabledelayedexpansion
for /r "c:\images" %%a in (*.jpg) do (
set "fname=%%~na"
set "fname=!fname:L=M!"
md "D:%%~pa" 2>nul
convert -thumbnail 200x220^^ -gravity center -extent 200x200 -quality 80 "%%~fa" "D:%%~da!fname!%%~xa"
)
更新
以下是我的最终代码,以防将来对任何人有所帮助:
::You must first install ImageMagick
::This job converts large photos into 200x200 thumbnails and saves the new files to the specified destination.
@echo off
setlocal enabledelayedexpansion
SET "@SOURCE=C:\Test\photos\"
SET "@DEST=C:\dest"
REM Replicate source folder structure to destination:
for /r %@SOURCE% %%D in (.) do (
echo Creating folder: %@DEST%%%~pnxD
@md "%@DEST%%%~pnxD"
)
REM Select images from source using wildcard:
for /r %@SOURCE% %%F in (*l*.jpeg) do (
REM Modify file name (i'm replacing 'l' for 'm')
set "fname=%%~nF"
set "fname=!fname:l=m!"
REM Convert source image to thumbnail and save to destination:
REM echo Source: %%F
echo Saving: %@DEST%%%~pnxF
@convert -thumbnail 200x220^^^^ -gravity center -extent 200x200 -quality 80 "%%F" "%@DEST%%%~pF!fname!%%~xF"
)
我得到“~pnxI此时出乎意料”忽略,我需要在bat文件中添加双%%Yes,抱歉,这是直接从命令行执行的。在批处理中,使用双%符号,而不是单%符号。我曾尝试实现您的代码,但bat文件在尝试运行您调用的批处理文件convert.bat的转换(请参见更新的答案)时变得疯狂,并不断崩溃。这是一个陷阱,我们都会在某个阶段落入其中,使用现有的命令来命名。你是对的-doh!谢谢你的帮助,现在一切都好了!
::You must first install ImageMagick
::This job converts large photos into 200x200 thumbnails and saves the new files to the specified destination.
@echo off
setlocal enabledelayedexpansion
SET "@SOURCE=C:\Test\photos\"
SET "@DEST=C:\dest"
REM Replicate source folder structure to destination:
for /r %@SOURCE% %%D in (.) do (
echo Creating folder: %@DEST%%%~pnxD
@md "%@DEST%%%~pnxD"
)
REM Select images from source using wildcard:
for /r %@SOURCE% %%F in (*l*.jpeg) do (
REM Modify file name (i'm replacing 'l' for 'm')
set "fname=%%~nF"
set "fname=!fname:l=m!"
REM Convert source image to thumbnail and save to destination:
REM echo Source: %%F
echo Saving: %@DEST%%%~pnxF
@convert -thumbnail 200x220^^^^ -gravity center -extent 200x200 -quality 80 "%%F" "%@DEST%%%~pF!fname!%%~xF"
)