Board logo

标题: [文件操作] 求教批处理如何把图片按照宽高比例分类? [打印本页]

作者: 盛世繁华    时间: 2022-12-11 00:28     标题: 求教批处理如何把图片按照宽高比例分类?

现在有一些各种格式的图片,需要按照横向、竖向、正方形不同的宽高比例,创建并分到当前目录下的不同的文件夹。也就是宽高比>1进横向文件夹,小于1进竖向文件夹,等于1的进方形文件夹。

bat能不能用来处理这个图片问题,当然能用powershell也行,感谢各位!!
作者: 77七    时间: 2022-12-11 01:58

本帖最后由 77七 于 2022-12-11 02:07 编辑
  1. @echo off
  2. cd /d "%~dp0"
  3. md "横向文件夹\"
  4. md "方形文件夹\"
  5. md "纵向文件夹\"
  6. for %%i in (*.jpg *.png *.bmp) do (
  7.     setlocal enabledelayedexpansion
  8.     for /f "tokens=2 delims=^=" %%a in ('ffprobe -show_frames "%%i" 2^>^&1 ^| find "width="') do ( set "w=%%a" )
  9.     for /f "tokens=2 delims=^=" %%a in ('ffprobe -show_frames "%%i" 2^>^&1 ^| find "height="') do ( set "h=%%a" )
  10.     if "!w!" gtr "!h!" move /y "%%i" "横向文件夹\."
  11.     if "!w!" equ "!h!" move /y "%%i" "方形文件夹\."
  12.     if "!w!" lss "!h!" move /y "%%i" "纵向文件夹\."
  13.     endlocal
  14. )
  15. pause
复制代码

需要 用到ffprobe 添加到系统变量
保存为ansi格式,和图片放在一起

不会写,效率有点低...
作者: 盛世繁华    时间: 2022-12-11 02:06

回复 2# 77七 谢谢谢谢,赞!!!我也写了个笨的,放楼下吧哈哈哈

@echo off
setlocal enabledelayedexpansion
>tmp.vbs echo On Error Resume Next
>>tmp.vbs echo Set jFile = CreateObject("WIA.ImageFile"):jFile.LoadFile WScript.Arguments(0):WScript.Echo "W="^&jFile.Width:WScript.Echo "H="^&jFile.Height
cd /d %~dp0
set X=横图
set Y=纵图
set Z=方图

md "%X%" "%Y%" "%Z%" 2>nul
for /f "delims=""" %%i in ('dir /a-d /b /s ^|findstr /e "jpg jpeg png bmp gif webp apng"') do (
    for /f "tokens=1,2" %%j in ('dir /tc "%%i" ^| findstr "%%~nxi"') do (
        for /f "delims=" %%a in ('cscript.exe //nologo tmp.vbs "%%i"') do set "%%a"
            if !W! GTR !H! move "%%i" "%X%"
            if !W! LSS !H! move "%%i" "%Y%"
            if !W! EQU !H! move "%%i" "%Z%"
     )
)
del tmp.vbs
作者: 盛世繁华    时间: 2022-12-11 02:09

回复 2# 77七 没想到你速度这么快,我找了好久好几个模板算是怼一块儿
作者: 77七    时间: 2022-12-11 02:16

回复 4# 盛世繁华
我是小白,不会写...写了10多分钟
作者: 盛世繁华    时间: 2022-12-11 03:11

回复 5# 77七 我弄了一下午
作者: hfxiang    时间: 2022-12-11 13:40

回复 1# 盛世繁华


如果只处理jpg及jpeg文件,也可用jhead( http://bcn.bathome.net/tool/jhead.exe
  1. @echo off
  2. rem 保存为ANSI格式
  3. cd /d "%~dp0"
  4. md "横向文件夹" "方形文件夹" "纵向文件夹">nul
  5. for /f "tokens=*" %%a in ('dir/s/b "*.jp*g"') do (
  6. for /f "tokens=1-3 delims=:x " %%b in ('jhead -cs nul "%%~a"') do (
  7. if "%%~b" EQU "Resolution" (
  8. if %%c gtr %%d move /y "%%~a" "%~dp0横向文件夹\"
  9. if %%c equ %%d move /y "%%~a" "%~dp0方形文件夹\"
  10. if %%c lss %%d move /y "%%~a" "%~dp0纵向文件夹\"
  11. )
  12. )
  13. )
复制代码

作者: 盛世繁华    时间: 2022-12-12 11:35

:lol 回复 7# hfxiang
作者: 盛世繁华    时间: 2023-2-16 11:44

:victory: 回复 7# hfxiang




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2