如何编写Batch Script仅对大于1500KB的jpg文件执行mogrify命令
错误原因排查
- 语法使用错误:
FOR /F是用于解析文本、命令输出的专用参数,遍历本地文件不需要添加该参数,错误的参数会导致文件遍历逻辑异常 - 业务逻辑错误:原代码仅会记录遍历到的最后一个jpg文件的大小,且判断符合条件后会对当前目录所有jpg文件执行缩放,完全不符合仅处理单个体积超标文件的需求
- 变量解析问题:批处理默认在括号包裹的代码块中会预读取变量值,循环内动态修改的变量需要开启延迟扩展才能正常读取
修正后的批处理代码
@echo off setlocal enabledelayedexpansion :: 1500KB对应的字节数为1500*1024=1536000,可根据需求自行调整阈值 set "maxbytesize=1536000" for %%f in (*.jpg) do ( set "filesize=%%~zf" if !filesize! GTR !maxbytesize! ( magick mogrify -resize 50%% "%%f" ) ) endlocal echo 所有符合条件的文件处理完毕 pause
注意事项
- 代码中对文件名添加了引号包裹,可兼容带空格、特殊字符的文件名
mogrify命令不需要重复指定输入通配符,直接传入单个目标文件即可完成对应修改- 如果你认为1500KB按1500000字节计算更符合你的需求,直接修改
maxbytesize的赋值即可
内容的提问来源于stack exchange,提问作者PunyTed
相关产品推荐
相关产品推荐

