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

[文件操作] 批处理如何在近万张图片中找到分辨率最大的一张图片?

  1.       @echo off
  2.         set %mW%=0
  3.         set %mH%=0
  4.         for /f "delims=" %%a in ('dir /b /s /a-d *.jpg *.png *.bmp') do (
  5.         for /f "tokens=1,3" %%i in ('nconvert.exe -info "%%a" ^| findstr "Width Height"') do (        
  6.         set  %W%=Width
  7.         set  %H%=Height
  8.         if %W% gtr %mW%
  9.         set  %mW%=Width
  10.         if %H% gtr %mH%
  11.         set  %mH%=Height      
  12.         )
  13.         )
  14.         pause
复制代码
我写的是这样的 可是无法运行……

  1.     @echo off
  2.     setlocal enabledelayedexpansion
  3.         for /f "delims=" %%a in ('dir /b /s /a-d *.jpg *.png *.bmp') do (
  4.         for /f "tokens=1,3" %%i in ('nconvert.exe -info "%%a" ^| findstr "Width Height"') do (
  5. set "%%i=%%j"      
  6.         set  %W%=Width
  7.         set  %H%=Height
  8.         if %W% gtr %mW%
  9.         set  %mW%=Width
  10.         if %H% gtr %mH%
  11.         set  %mH%=Height      
  12.         )        
  13.         pause
复制代码
这样子也不行……

TOP

回复 2# tcasdsss

%var% 不是 BAT 里变量必须采用的命名方式, 当然这样的变量名也是合法的. 实际上变量名比较自由

绝大多数字符都可以用于命名变量, 诸如此类: @#$%  甚至汉字, 甚至可以用数字作为起始字符(当然不好了)

%var% 是变量扩展, 要取变量 var 的值时可以用 %var% 为其赋值时这样: set var=something

分辨率最大如何理解? 应该算面积吧. 即  WIDTH * HEIGHT 这个乘积最大的吧

在找到最大分辨率时, 应该把该文件的路径给存下来吧, 所以可以设一个变量 set theFile=%%a

另外 WINDOWS 系统详细查看方式中, 可以选出 尺寸 列, 点击一下列标头, 即可排序, 可以试试.

TOP

回复 3# neorobin


    我说错了…… 我要找的是 宽和高的最大值
现在最悲剧的是无法运行……

TOP

回复 3# neorobin
  1.         set  W=Width
  2.         set  H=Height
  3. if  %W% gtr %mW%  
  4. set mW=Width
  5. if  %H% gtr %mH%  
  6. set mH=Height
复制代码
这样子赋值是不行的……

TOP

回复 5# tcasdsss

nconvert.exe -info imagefile.jpg 输出信息格式是怎样的?

TOP

本帖最后由 tcasdsss 于 2014-9-13 16:44 编辑

回复 6# neorobin
  1. for /f "tokens=1,3" %%i in ('nconvert.exe -info "%%a" ^| findstr "Width Height"') do (
复制代码
这句我是借鉴别人的……
他的方法输出的 宽和高是正确的

附件: 您需要登录才可以下载或查看附件。没有帐号?注册

TOP

  1. @set @n=0/*&echo off
  2. for /f "delims=" %%a in ('dir /b *.jpg ^| cscript -nologo -e:jscript "%~0"') do (
  3. echo 在这里对 %%a 做你想做的操作...
  4. )
  5. pause &exit /b */
  6. var Img = new ActiveXObject("WIA.ImageFile")
  7. var px
  8. var list = {max:0,files:[]}
  9. while(!WScript.StdIn.AtEndOfStream){
  10.     var file = WScript.StdIn.ReadLine()
  11. Img.LoadFile(file)
  12. px = Img.Width * Img.Height
  13. if(px > list.max){
  14. list.max = px
  15. list.files = [file]
  16. } else {
  17. list.files.push(file)
  18. }
  19. }
  20. for(var i in list.files){
  21. WScript.Echo(list.files[i])
  22. }
复制代码

TOP

回复 8# CrLf


    不懂……
好像一部分不是批处理
这个怎么才能获得最大宽度 和高度的数据呢?

TOP

回复 8# CrLf


    我现在想法是利用一个bat先找到这些图片中最大宽度和高度的数据 再call 另一个bat文件将变量传过去 通过nconvert来将图片分变率用canvas调整到最大值

TOP

回复 7# tcasdsss

你的代码中有一个全角括号
  1. @echo off & setlocal enabledelayedexpansion
  2. set /a Width=0, Height=0
  3. for /f "delims=" %%a in ('dir /b /s /a-d *.jpg *.png *.bmp') do (
  4. for /f "tokens=1,3" %%i in ('nconvert.exe -info "%%a" ^| findstr "Width Height"') do (
  5. if %%j gtr !%%i! set "%%i=%%j"
  6. )
  7. )
  8. set Width
  9. set Height
  10. pause
复制代码

TOP

虽然赶脚不需要我了,但还是改着玩玩...
  1. @set @n=0/*&echo off
  2. dir /b *.jpg | cscript -nologo -e:jscript "%~0" "格式化输出:高度[$height] 宽度[$width] 像素[$px] 文件[\'$file\']"
  3. rem 按指定格式输出取得的信息
  4. pause
  5. for /f "delims=" %%a in ('dir /b *.jpg ^| cscript -nologo -e:jscript "%~0"') do (
  6. echo 在这里对 %%a 做你想做的操作...
  7. )
  8. rem 处理示例
  9. pause &exit /b */
  10. var format = '$file'
  11. if(WScript.Arguments.length){
  12. format = WScript.Arguments.Item(0).replace(/\$\$/g,'{$$$$}')
  13. format = format.replace(/\\r/g,'\r')
  14. format = format.replace(/\\n/g,'\n')
  15. format = format.replace(/\\t/g,'\t')
  16. format = format.replace(/\\'/g,'"')
  17. }
  18. var Img = new ActiveXObject("WIA.ImageFile")
  19. var px
  20. var list = {px:0,files:[]}
  21. while(!WScript.StdIn.AtEndOfStream){
  22.     var file = WScript.StdIn.ReadLine()
  23. Img.LoadFile(file)
  24. px = Img.Width * Img.Height
  25. if(px > list.px){
  26. list = {px:px,width:Img.Width,height:Img.Height,files:[file]}
  27. } else {
  28. list.files.push(file)
  29. }
  30. }
  31. var output = format.replace(/\$px/gi,list.px)
  32. output = output.replace(/\$height/gi,list.height)
  33. output = output.replace(/\$width/gi,list.width)
  34. for(var i in list.files){
  35. output = output.replace(/\$file/gi,list.files[i])
  36. WScript.Echo(output.replace(/\{\$\$\}/gi,'$$$$'))
  37. }
复制代码
支持简单的格式化输出

TOP

话说楼主你把 height 和 width 分开判断,怎么能保证是同一张图片的高和宽呢?

TOP

回复 13# CrLf


    我现在目的是要把一批图片压缩成hevc流文件 以提高压缩率 为了保证视频可以符合hevc流的要求 又不损失数据 我们就要把 图片中的最长最高的值得到 从而方便hevc压缩

TOP

回复 11# neorobin


    吊…… 比我的简洁好多……

TOP

返回列表