![](/img/trans.png)
[英]How would I use ImageMagick in a .bat file (Windows) to resize all images in all sub-directories?
[英]Mirror sub-directories in output folder using bat and imagemagick
我的BAT文件当前扫描“ JPG”的所有子目录,并对其中找到的所有文件执行imagemagick,然后再将它们发送到“输出”:
for /r /d %%a in (JPG\*) do magick convert "%%~a\*.jpg" resize 500000@ -set filename:out %%t_%%wx%%h "output/%%[filename:out].jpg"
我希望能够在“输出”中镜像“ JPG”的文件夹结构,例如
JPG/dir1/*.jpg
JPF/dir2/*.jpg
output/dir1/*.jpg
output/dir2/*.jpg
我不确定该如何处理,希望能得到一些指导。
for /f "delims=" %%a in ('xcopy /L /S /Y "JPG\*" "output\" ^|findstr /v /e /L /i /c:" file(s)" ') do magick convert "%%~a" resize 500000@ -set filename:out %%t_%%wx%%h "output\%%~na.jpg"
这将生成一个列表( /L
会从被复制的文件), jpg
和其子目录( /S
) -的/Y
跳过默认提示。 然后,该列表(的源文件)被分配给%%a
由for/f
-的delims
条款确保整个名称被分配,而不管通过定义定界符隔板被用作什么 。
请注意,我不熟悉magick
的命令的复杂性- %%a
应该提供完整的文件名; %%~na
仅是名称部分(即没有路径和扩展名)
另外,Windows中的路径用反斜杠表示,而不是/
。 由于/
用于指示开关,因此转换不可靠。
[编辑:添加了findstr
命令,以/i
不区分大小写的方式消除了/e
结尾于/L
文字“ Space file(s)”的输出行]
进一步的想法:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "destdir=U:\destdir"
SET "destdir2=destdir"
for /f "delims=" %%a in ('xcopy /L /S /Y "JPG\*" "output\" ^|findstr /v /e /L /i /c:" file(s)" ') DO (
ECHO magick convert "%%~a" resize 500000@ -set filename:out %%t_%%wx%%h "output\%%~na.jpg"
SET "outdir=%%~a"
SET "outdir=!outdir:\%%~nxa=!"
SET "outdir=%destdir%!outdir:~3!"
ECHO MD "!outdir!" 2>nul
ECHO magick convert "%%~a" resize 500000@ -set filename:out %%t_%%wx%%h "!outdir!\%%~na.jpg"
SET "outdir=%%~a"
SET "outdir=!outdir:\%%~nxa=!"
SET "outdir=%destdir2%!outdir:~3!"
ECHO MD "!outdir!" 2>nul
ECHO magick convert "%%~a" resize 500000@ -set filename:out %%t_%%wx%%h "!outdir!\%%~na.jpg"
ECHO ==================
)
GOTO :EOF
我通常完全指定源目录和目标目录。
上面的代码应将文件放在源目录中,并根据所选的文件掩码为找到的每个文件生成三个单独的输出集。 所提出的命令仅被echo
以允许适当选择期望的结果。
第一组使用原始代码-毫无意外。
第二和第三组建立一个名为outdir
的变量,其中包含源文件名。 由于不允许使用元变量的子字符串,因此将该值传送到普通环境变量,并调用delayedexpansion
来允许在代码块内操纵该值。
首先,删除最后的反斜杠,名称和扩展名,并保留路径。 然后,删除前三个字符( JPG
)并将其附加到destdir
或destdir2
的输出目录名,并创建目录。 2>nul
禁止显示错误消息,例如目标目录已存在时。
然后我们执行magick
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.