找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 185|回复: 11

[文件操作] 求批处理将文件夹及所有子文件夹内的所有图片按文件名顺序从上到下排序合成长图,内详

[复制链接]
发表于 前天 10:09 | 显示全部楼层 |阅读模式
本帖最后由 crownking1983 于 2026-5-11 11:37 编辑

跪求批处理程序,将文件夹及所有子文件夹内的所有图片按文件名顺序从上到下排序列合成长图,规则如下:

1.图片无论什么格式,统统按文件名由上到下合并到一起,保证画质无任何压缩,合成后生成png格式的长图

2.同级目录里的所有图片合并后生成一张png长图,命名为“合并长图.png”
  子文件夹下的图片合并后生成png长图,按照文件夹名命名为“子文件夹名.png”,有多少个子文件夹就合并多少个长图,每一个长图都按照其对应的子文件夹名命名。

3.处理完成后删除掉所有的原文件和原文件夹,只保留处理好的几个长图

如果哪位大神能帮我实现,将大大减少我海量的重复性工作量,小弟再次跪谢了!!!
发表于 前天 10:38 | 显示全部楼层
jpg格式是有损压缩,合并生成jpg后画质就降低了
 楼主| 发表于 前天 11:37 | 显示全部楼层
Five66 发表于 2026-5-11 10:38
jpg格式是有损压缩,合并生成jpg后画质就降低了

png也行
改了 我改成png 了
发表于 前天 12:15 | 显示全部楼层
请看看你的图片文件名后缀有哪几种?
png
jpg
jpeg
这三种都用吗?
还有其它格式么?
 楼主| 发表于 前天 13:27 | 显示全部楼层
本帖最后由 crownking1983 于 2026-5-11 13:32 编辑
ShowCode 发表于 2026-5-11 12:15
请看看你的图片文件名后缀有哪几种?
png
jpg


png jpg jpeg bmp图片格式就这四种 没有其他的了
发表于 前天 17:27 | 显示全部楼层
会有图片宽度不一样吗?要是有怎么处理?
发表于 前天 18:45 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-5-11 20:54 编辑

    以下代码存为 test.bat 与 magick.exe 均放在当前目录下
    假定当前目录及其所属的每个子目录仅包含图片文件 *.jpg, *.jpeg, *.png,代码运行结果会将每个子目录中合并的长图和当前目录合并的长图均放在当前目录下,其名取自所属目录名。
    A版代码可用于 *.j*g 图片多于 *.png 图片,故合并的长图格式取为 *.jpg 格式,以便长图冗余数据最少
    B版代码可用于 *.j*g 图片少于 *.png 图片,故长图格式取为 *.png 格式。
    建议先做图片备份,或先用小样本试行为宜。

test.bat (A版 - jpg 格式
  1. @echo off &magick *.*g -append -quality 100 #$.jpg
  2. ren #$.jpg #.$ &&del /q *.*g
  3. for %%d in ("%cd%") do ren #.$ "%%~nd.jpg"
  4. for /f "delims=" %%d in ('dir /s/b/ad^|sort /r') do (
  5.    magick "%%d\*.*g" -append -quality 100 #$.jpg
  6.    ren #$.jpg "%%~nd.jpg" &&rd /s /q "%%d" )
  7. exit/b
复制代码


test.bat (B版 - png 格式
  1. @echo off &magick *.*g -append -quality 100 #$.png
  2. ren #$.png #.$ &&del /q *.*g
  3. for %%d in ("%cd%") do ren #.$ "%%~nd.png"
  4. for /f "delims=" %%d in ('dir /s/b/ad^|sort /r') do (
  5.    magick "%%d\*.*g" -append -quality 100 #$.png
  6.    ren #$.png "%%~nd.png" &&rd /s /q "%%d" )
  7. exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
crownking1983 + 1 乐于助人

查看全部评分

发表于 前天 19:51 | 显示全部楼层
这样可以不,生成本地html,直接用浏览器打开,然后在浏览器里查看或截全图

  1. @echo off&chcp 936>nul

  2. set html_begin=echo ^^^<!DOCTYPE html^^^>^^^<html^^^>^^^<head^^^>^^^<meta content="text/html;charset=gbk"/^^^>^^^</head^^^>^^^<body^^^>
  3. set html_end=echo ^^^</body^^^>^^^</html^^^>
  4. set img_new=echo ^^^<img alt="" src="%%h%%g%%i" style="width:auto;display:flex;" /^^^>
  5. for %%a in (jpg jpeg png bmp webp) do set %%a?=if /i "%%~xi" equ ".%%a"


  6. for %%h in (.) do ( for %%g in (/) do (
  7. %html_begin%
  8. for %%i in (*) do (
  9. %jpg?% %img_new%
  10. %jpeg?% %img_new%
  11. %png?% %img_new%
  12. %bmp?% %img_new%
  13. %webp?% %img_new%
  14. )
  15. %html_end%
  16. )>合并长图.png.html
  17. )

  18. for %%g in (/) do (
  19. for /d %%h in (*) do (
  20. pushd "%%h"
  21. for %%i in (*) do (
  22. %html_begin%
  23. %jpg?% %img_new%
  24. %jpeg?% %img_new%
  25. %png?% %img_new%
  26. %bmp?% %img_new%
  27. %webp?% %img_new%
  28. )
  29. popd
  30. %html_end%
  31. )>"%%h.png.html"
  32. )

  33. echo done&pause&exit /b 0
复制代码
 楼主| 发表于 前天 22:47 | 显示全部楼层
本帖最后由 crownking1983 于 2026-5-11 22:57 编辑
aloha20200628 发表于 2026-5-11 18:45
以下代码存为 test.bat 与 magick.exe 均放在当前目录下
    假定当前目录及其所属的每个子目录仅包含 ...


大神啊!!太感激你了!!太神了!!!我一次性放进去了30多个多图文件夹,你这一键处理一下子全合并了!太神了!!!你这以后至少节约了我每天1个小时以上的工作量!大赞!感恩呢啊!!!!!!

大神,我能引申一步不,就是图片处理完以后,多个长图的宽度不一样,有的是2400宽 有的1800宽 ,我知道这个宽度是取决于原图包里的图的最宽的那张图的宽度

我想能否再加一步,就是最后将所有处理后新产生的这些所有长图,统一为1200像素的宽度,也就是所有图统一为1200宽度,高度随宽度等比例调整,这样我上传网站的时候,就又节约一步操作了!

PS:大神老师 这里请注意我强调一下,是处理完后变成长图以后再将长图调整宽度为1200,在合并成长图之前不调整素材,我需要的是处理成长图以后再将宽度调整为1200像素。
发表于 前天 23:15 | 显示全部楼层
crownking1983 发表于 2026-5-11 22:47
大神啊!!太感激你了!!太神了!!!我一次性放进去了30多个多图文件夹,你这一键处理一下子全合并了! ...

最后再用 https://bbs.bathome.net/forum.ph ... 5129&pid=315374 二楼代码刷一遍即可,或顺序联运这两个脚本亦可...
 楼主| 发表于 前天 23:18 | 显示全部楼层


@echo off &magick *.??g -append -quality 100 #$.jpg
ren #$.jpg #.$ &&del /q *.??g
for %%d in ("%cd%") do ren #.$ "%%~nd.jpg"
for /f "delims=" %%d in ('dir /s/b/ad^|sort /r') do (
   magick "%%d\*.??g" -append -quality 100 #$.jpg
   ren #$.jpg "%%~nd.jpg" &&rd /s /q "%%d" )
exit/b

@echo off &for %%F in (*.jpg, *.png) do magick "%%F" -resize 1200x "%%F"


大神 我这样将二楼代码堆砌到一起运行是不行的,必须将二楼的代码单独再弄一个bat文件单独运行。
有没有办法能写到一起呢
发表于 前天 23:24 | 显示全部楼层
crownking1983 发表于 2026-5-11 23:18
@echo off &magick *.??g -append -quality 100 #$.jpg
ren #$.jpg #.$ &&del /q *.??g
for %%d in ("%cd ...

删除11楼代码中间第7行的 exit/b 即可....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-5-13 19:02

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表