标题: [其他] 【已解决】批处理怎样通过ImageMagick让图片按分辨率移动到指定文件夹? [打印本页]
作者: svh009 时间: 2023-8-31 18:18 标题: 【已解决】批处理怎样通过ImageMagick让图片按分辨率移动到指定文件夹?
本帖最后由 svh009 于 2023-8-31 19:38 编辑
因为接下来还要用到ImageMagick,所以要是能用这个解决最好
理论上获取分辨率应该是这样,后面就不知道怎么弄了- path="C:\Program Files\ImageMagick-7.1.0-Q16-HDRI\magick.exe"
- %path% identify -format "%%wx%%h" *.png
复制代码
然后输出会有问题,如:现在有两个图片,另个1024*1024,另一个2048*2048,输出如下复制代码
怎么匹配对应的图片是一点思路也没有
作者: Batcher 时间: 2023-8-31 18:40
回复 1# svh009
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA- @echo off
- REM 1、下载并安装 ImageMagick 这个命令行工具
- REM https://imagemagick.org/script/download.php#windows
- REM 2、根据自己电脑实际安装路径设置以下临时环境变量
- set "path=C:\Program Files\ImageMagick;%path%"
-
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /b /a-d *.png *.jpg') do (
- for /f "delims=" %%j in ('magick.exe identify -format "%%wx%%h" "%%i"') do (
- echo %%i %%j
- )
- )
- pause
复制代码
下一步,请举例说明根据什么规律移动到哪个文件夹?
作者: svh009 时间: 2023-8-31 19:41
回复 2# Batcher
大佬,太强了。
剩下的移动到文件夹,我可以自己解决
作者: 77七 时间: 2023-9-1 17:29
- \ backslash, the next character is literal and not subject to interpretation
- \n newline
- \r carriage return
- < less-than character.
- > greater-than character.
- & ampersand character.
- %% a percent sign
- %b file size of image read in (use -precision 16 to force results in B)
- %c comment meta-data property
- %d directory component of path
- %e filename extension or suffix
- %f filename (including suffix)
- %g layer canvas page geometry (equivalent to "%Wx%H%X%Y")
- %h current image height in pixels
- %i image filename (note: becomes output filename for "info:")
- %k CALCULATED: number of unique colors
- %l label meta-data property
- %m image file format (file magic)
- %n number of images in current image sequence, report once per frame
- %o output filename (used for delegates)
- %p index of image in current image list
- %q quantum depth (compile-time constant)
- %r image class and colorspace
- %s scene number (from input unless re-assigned)
- %t filename without directory or extension (suffix)
- %u unique temporary filename (used for delegates)
- %w current width in pixels
- %x x resolution (density)
- %y y resolution (density)
- %z image depth (as read in unless modified, image save depth)
- %A image transparency channel. Values include Undefined (no transparency channel), Blend, Copy, or Update.
- %B file size of image read in bytes
- %C image compression type
- %D image GIF dispose method
- %G original image size (%wx%h; before any resizes)
- %H page (canvas) height
- %M Magick filename (original file exactly as given, including read mods)
- %N number of images in current image sequence, report once per image sequence
- %O page (canvas) offset ( = %X%Y )
- %P page (canvas) size ( = %Wx%H )
- %Q image compression quality ( 0 = default )
- %S ?? scenes ??
- %T image time delay (in centi-seconds)
- %U image resolution units
- %W page (canvas) width
- %X page (canvas) x offset (including sign)
- %Y page (canvas) y offset (including sign)
- %Z unique filename (used for delegates)
- %@ CALCULATED: trim bounding box (without actually trimming)
- %# CALCULATED: 'signature' hash of image values
- https://imagemagick.org/script/escape.php
复制代码
之前见过buyiyang大佬用exiftool,工具自带参数打印文件名
查了下资料,magick也可以
- @echo off
- rem 批处理保存为utf-8编码格式,自行设置magick变量
- chcp 65001
- for /f "tokens=1-2*" %%a in ('magick identify -format "%%w %%h %%i\n" *.jpg') do (
- echo w=%%a
- echo h=%%b
- echo name=%%c
- )
- pause
复制代码
作者: 77七 时间: 2023-9-1 19:13
- magick identify -format "%%w %%h %%i\n" *.jpg
复制代码
这个命令有点奇怪,用for /f 读取正常显示中文文件名,单独执行不行。
如果 set magick=d:\1\magick.exe,也有点奇怪
给=号后加引号或者不加,路径是否包含空格 等等组合情况,有时候需要用 4个% 才行 for /f in (%%magick%%)
作者: buyiyang 时间: 2023-9-1 19:54
回复 5# 77七
第一个问题我用for /f也不行
第二个问题参考http://www.bathome.net/thread-66195-1-1.html,”看第一个字符是否是引号字符,如果是,则去掉首字符并删除命令行上最后一个引号,保留最后一个引号之后的所有文本”。有四个引号所以导致错误,而使用四个%可以是因为for /f 内的命令行是调用新的程序,和call一样会再进行一次预处理,并且刚好避开了第一次预处理的去除引号。
作者: Five66 时间: 2023-9-1 20:14
回复 5# 77七
magick 输出的文件名是utf-8 ,然而显示时把它当成gbk来显示了,就像用type 命令读取 utf-8文本文件那样
第二个问题不懂
作者: 77七 时间: 2023-9-1 22:47
本帖最后由 77七 于 2023-9-1 23:23 编辑
回复 6# buyiyang
谢谢大佬指点!我开始是 code1 这样测试的。发现 4个 % 能兼容 set 1-3。参考您的帖子,发现简单问题被我搞复杂了,如code2 第二条命令,外加引号就行。
我用的版本是 ImageMagick-7.1.1-9-portable-Q8-x64
- rem code1
- @echo off
- chcp 65001 >nul
- set magick1="D:\新建文件夹\magick.exe"
- set magick1="D:\新建文 件夹\magick.exe"
- set magick1=D:\新建文件夹\magick.exe
- rem set magick1=D:\新建文 件夹\magick.exe
-
- for /f "tokens=1-2*" %%a in ('%%magick1%% identify -format "%%w %%h %%i\n" *.jpg') do echo %%a %%b %%c
- pause
-
-
- rem code2
- rem 错误
- for /f "tokens=1-2*" %%a in ('"D:\新建文 件夹\magick.exe" identify -format "%%w %%h %%i\n" *.jpg') do echo %%a %%b %%c
-
- rem 正确
- for /f "tokens=1-2*" %%a in ('""D:\新建文 件夹\magick.exe" identify -format "%%w %%h %%i\n" *.jpg"') do echo %%a %%b %%c
- pause
-
- ::结果
-
- 1920 1400 1.jpg
- 1920 1400 2.jpg
- 5184 2920 4k壁纸aa深蓝.jpg
- Press any key to continue . . .
-
-
- 'D:\新建文' is not recognized as an internal or external command,
- operable program or batch file.
-
-
- 1920 1400 1.jpg
- 1920 1400 2.jpg
- 5184 2920 4k壁纸aa深蓝.jpg
复制代码
作者: 77七 时间: 2023-9-1 22:57
本帖最后由 77七 于 2023-9-1 23:17 编辑
回复 7# Five66
谢谢大佬指点!- magick identify -format "%%w %%h %%i\n" *.jpg>1.txt
复制代码
将命令结果重定向到文本,正确显示中文,1.txt编码utf-8。是个处理结果的好方法!
试了下,加个管道也在cmd窗口正常显示了。
- @echo off
- chcp 65001 >nul
- magick identify -format "%%w %%h %%i\n" *.jpg|findstr .
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |