[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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
复制代码
怎么匹配对应的图片是一点思路也没有
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 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
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 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
复制代码
bat小白,请多指教!谢谢!

TOP

回复 5# 77七


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

评分人数

    • 77七: 感谢分享技术 + 1

TOP

回复 5# 77七

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

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

评分人数

    • 77七: 感谢分享技术 + 1

TOP

  1. magick identify -format "%%w %%h %%i\n" *.jpg
复制代码

这个命令有点奇怪,用for /f 读取正常显示中文文件名,单独执行不行。
如果 set magick=d:\1\magick.exe,也有点奇怪
给=号后加引号或者不加,路径是否包含空格 等等组合情况,有时候需要用 4个% 才行  for /f in (%%magick%%)
bat小白,请多指教!谢谢!

TOP

  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

评分人数

bat小白,请多指教!谢谢!

TOP

回复 2# Batcher
大佬,太强了。
剩下的移动到文件夹,我可以自己解决

TOP

回复 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

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表