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

[其他] 【已解决】批处理怎样通过ImageMagick让图片按分辨率移动到指定文件夹?

[复制链接]
发表于 2023-8-31 18:18:06 | 显示全部楼层 |阅读模式
本帖最后由 svh009 于 2023-8-31 19:38 编辑

因为接下来还要用到ImageMagick,所以要是能用这个解决最好
理论上获取分辨率应该是这样,后面就不知道怎么弄了
  1. path="C:\Program Files\ImageMagick-7.1.0-Q16-HDRI\magick.exe"
  2. %path% identify -format "%%wx%%h" *.png
复制代码
然后输出会有问题,如:现在有两个图片,另个1024*1024,另一个2048*2048,输出如下
  1. 2048x20481024x1024
复制代码
怎么匹配对应的图片是一点思路也没有

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-8-31 18:40:07 | 显示全部楼层
回复 1# svh009


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. REM 1、下载并安装 ImageMagick 这个命令行工具
  3. REM https://imagemagick.org/script/download.php#windows
  4. REM 2、根据自己电脑实际安装路径设置以下临时环境变量
  5. set "path=C:\Program Files\ImageMagick;%path%"

  6. cd /d "%~dp0"
  7. for /f "delims=" %%i in ('dir /b /a-d *.png *.jpg') do (
  8.     for /f "delims=" %%j in ('magick.exe identify -format "%%wx%%h" "%%i"') do (
  9.         echo %%i %%j
  10.     )
  11. )
  12. pause
复制代码
下一步,请举例说明根据什么规律移动到哪个文件夹?

评分

参与人数 1技术 +1 收起 理由
svh009 + 1 感谢分享

查看全部评分

 楼主| 发表于 2023-8-31 19:41:03 | 显示全部楼层
回复 2# Batcher
大佬,太强了。
剩下的移动到文件夹,我可以自己解决
发表于 2023-9-1 17:29:53 | 显示全部楼层
  1. \        backslash, the next character is literal and not subject to interpretation
  2. \n        newline
  3. \r        carriage return
  4. <        less-than character.
  5. >        greater-than character.
  6. &        ampersand character.
  7. %%        a percent sign
  8. %b        file size of image read in (use -precision 16 to force results in B)
  9. %c        comment meta-data property
  10. %d        directory component of path
  11. %e        filename extension or suffix
  12. %f        filename (including suffix)
  13. %g        layer canvas page geometry (equivalent to "%Wx%H%X%Y")
  14. %h        current image height in pixels
  15. %i        image filename (note: becomes output filename for "info:")
  16. %k        CALCULATED: number of unique colors
  17. %l        label meta-data property
  18. %m        image file format (file magic)
  19. %n        number of images in current image sequence, report once per frame
  20. %o        output filename (used for delegates)
  21. %p        index of image in current image list
  22. %q        quantum depth (compile-time constant)
  23. %r        image class and colorspace
  24. %s        scene number (from input unless re-assigned)
  25. %t        filename without directory or extension (suffix)
  26. %u        unique temporary filename (used for delegates)
  27. %w        current width in pixels
  28. %x        x resolution (density)
  29. %y        y resolution (density)
  30. %z        image depth (as read in unless modified, image save depth)
  31. %A        image transparency channel. Values include Undefined (no transparency channel), Blend, Copy, or Update.
  32. %B        file size of image read in bytes
  33. %C        image compression type
  34. %D        image GIF dispose method
  35. %G        original image size (%wx%h; before any resizes)
  36. %H        page (canvas) height
  37. %M        Magick filename (original file exactly as given, including read mods)
  38. %N        number of images in current image sequence, report once per image sequence
  39. %O        page (canvas) offset ( = %X%Y )
  40. %P        page (canvas) size ( = %Wx%H )
  41. %Q        image compression quality ( 0 = default )
  42. %S        ?? scenes ??
  43. %T        image time delay (in centi-seconds)
  44. %U        image resolution units
  45. %W        page (canvas) width
  46. %X        page (canvas) x offset (including sign)
  47. %Y        page (canvas) y offset (including sign)
  48. %Z        unique filename (used for delegates)
  49. %@        CALCULATED: trim bounding box (without actually trimming)
  50. %#        CALCULATED: 'signature' hash of image values
  51. https://imagemagick.org/script/escape.php
复制代码


之前见过buyiyang大佬用exiftool,工具自带参数打印文件名
查了下资料,magick也可以
  1. @echo off
  2. rem 批处理保存为utf-8编码格式,自行设置magick变量
  3. chcp 65001
  4. for /f "tokens=1-2*" %%a in ('magick identify -format "%%w %%h %%i\n" *.jpg') do (
  5.         echo w=%%a
  6.         echo h=%%b
  7.         echo name=%%c
  8. )
  9. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
svh009 + 1 感谢分享

查看全部评分

发表于 2023-9-1 19:13:49 | 显示全部楼层
  1. magick identify -format "%%w %%h %%i\n" *.jpg
复制代码

这个命令有点奇怪,用for /f 读取正常显示中文文件名,单独执行不行。
如果 set magick=d:\1\magick.exe,也有点奇怪
给=号后加引号或者不加,路径是否包含空格 等等组合情况,有时候需要用 4个% 才行  for /f in (%%magick%%)
发表于 2023-9-1 19:54:12 | 显示全部楼层
回复 5# 77七

第一个问题我用for /f也不行

第二个问题参考http://www.bathome.net/thread-66195-1-1.html,”看第一个字符是否是引号字符,如果是,则去掉首字符并删除命令行上最后一个引号,保留最后一个引号之后的所有文本”。有四个引号所以导致错误,而使用四个%可以是因为for /f 内的命令行是调用新的程序,和call一样会再进行一次预处理,并且刚好避开了第一次预处理的去除引号。

评分

参与人数 1技术 +1 收起 理由
77七 + 1 感谢分享

查看全部评分

发表于 2023-9-1 20:14:01 | 显示全部楼层
回复 5# 77七


    magick 输出的文件名是utf-8 ,然而显示时把它当成gbk来显示了,就像用type 命令读取 utf-8文本文件那样
第二个问题不懂

评分

参与人数 1技术 +1 收起 理由
77七 + 1 感谢分享

查看全部评分

发表于 2023-9-1 22:47:40 | 显示全部楼层
本帖最后由 77七 于 2023-9-1 23:23 编辑

回复 6# buyiyang

谢谢大佬指点!我开始是 code1 这样测试的。发现 4个 % 能兼容 set 1-3。参考您的帖子,发现简单问题被我搞复杂了,如code2 第二条命令,外加引号就行。

我用的版本是 ImageMagick-7.1.1-9-portable-Q8-x64
  1. rem code1
  2. @echo off
  3. chcp 65001 >nul
  4. set magick1="D:\新建文件夹\magick.exe"
  5. set magick1="D:\新建文 件夹\magick.exe"
  6. set magick1=D:\新建文件夹\magick.exe
  7. rem set magick1=D:\新建文 件夹\magick.exe

  8. for /f "tokens=1-2*" %%a in ('%%magick1%% identify -format "%%w %%h %%i\n" *.jpg') do echo %%a %%b %%c
  9. pause


  10. rem code2
  11. rem 错误
  12. for /f "tokens=1-2*" %%a in ('"D:\新建文 件夹\magick.exe" identify -format "%%w %%h %%i\n" *.jpg') do echo %%a %%b %%c

  13. rem 正确
  14. for /f "tokens=1-2*" %%a in ('""D:\新建文 件夹\magick.exe" identify -format "%%w %%h %%i\n" *.jpg"') do echo %%a %%b %%c
  15. pause

  16. ::结果

  17. 1920 1400 1.jpg
  18. 1920 1400 2.jpg
  19. 5184 2920 4k壁纸aa深蓝.jpg
  20. Press any key to continue . . .


  21. 'D:\新建文' is not recognized as an internal or external command,
  22. operable program or batch file.


  23. 1920 1400 1.jpg
  24. 1920 1400 2.jpg
  25. 5184 2920 4k壁纸aa深蓝.jpg

复制代码
发表于 2023-9-1 22:57:03 | 显示全部楼层
本帖最后由 77七 于 2023-9-1 23:17 编辑

回复 7# Five66


   谢谢大佬指点!
  1. magick identify -format "%%w %%h %%i\n" *.jpg>1.txt
复制代码


将命令结果重定向到文本,正确显示中文,1.txt编码utf-8。是个处理结果的好方法!
试了下,加个管道也在cmd窗口正常显示了。

  1. @echo off
  2. chcp 65001 >nul
  3. magick identify -format "%%w %%h %%i\n" *.jpg|findstr .
  4. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 14:12 , Processed in 0.024584 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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