Image processing Windows上的ImageMagick缩略图批处理

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

我正在使用ImageMagick创建照片的缩略图

我正在使用windows操作系统

我的源文件包含在许多子文件夹中

我希望通过保存到另一个驱动器上的目标文件夹,同时保留相同的文件夹结构和修改原始文件名,来制作源文件的缩略图

目标文件名与源文件名相同,但修改了1个字符:

来源示例:

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"

)