找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 92499|回复: 22

[文本处理] [已解决]批处理获取图片分辨率的问题

[复制链接]
发表于 2020-12-28 14:54:00 | 显示全部楼层 |阅读模式
在百度中寻求到的#获取图片分辨率信息#的批处理,不用额外其他软件,还挺好的。
但输出结果中,图片会按照名字,重新自动排列顺序,请问这一点该怎么改呢?

要求:我不想它重新排列,请保持桌面顺序,依次输出
谢谢您啦~
  1. @echo off & title  
  2. setlocal enabledelayedexpansion

  3. set Pic=*.jp*g,*.png,*.bmp,*.gif

  4. call :CreatVBS
  5. (for %%a in (%Pic%) do (
  6.     for /f "tokens=1-3 delims=x" %%b in ('cscript -nologo "%tmp%\GetImgInfo.vbs" "%%~sa"') do (
  7.         echo %%~nxa %%~bx%%~c
  8.     )
  9. ))>图片信息.txt
  10. pause
  11. exit

  12. :CreatVBS
  13. (echo '获取图片文件的宽、高、DPI
  14. echo On Error Resume Next
  15. echo Dim Img
  16. echo Set Img = CreateObject^("WIA.ImageFile"^)
  17. echo Img.LoadFile WScript.Arguments^(0^)
  18. echo Wscript.Echo Img.Width ^& "x" ^& Img.Height ^& "x" ^& Img.HorizontalResolution)>"%tmp%\GetImgInfo.vbs"
  19. goto :eof
复制代码
可以从图片中看到,文本中的排序按序重排了~ ~谢谢您了
发表于 2020-12-28 15:17:17 | 显示全部楼层
回复 1# 灯塔彭于晏


    你希望改成什么效果呢?
发表于 2020-12-28 15:59:34 | 显示全部楼层
本帖最后由 WHY 于 2020-12-30 21:31 编辑

for %%a in (%ext%) do ... 应该是先按%ext%中的扩展名排序、扩展名相同再按文件名排序的,先jpg,然后bmp,再然后png,
把第7行改成:
  1. (for /f "delims=" %%a in ('dir /b /on *.jpg,*.bmp,*.png,*.gif') do (
复制代码
试试行不行。
发表于 2020-12-28 16:07:27 | 显示全部楼层
保存为 Test.js, 双击运行
  1. var Img = new ActiveXObject('WIA.ImageFile');
  2. var fso = new ActiveXObject('Scripting.FileSystemObject');
  3. var arr = [];
  4. var e = new Enumerator( fso.GetFolder('.').Files );
  5. for(;!e.atEnd();e.moveNext()){
  6.     var file = e.item().Name;
  7.     if( !/\.(?:jpg|bmp|png|gif)$/i.test(file) ) continue;
  8.     Img.LoadFile(file);
  9.     arr.push(file + ' ' + Img.Width + 'x' + Img.Height + 'x' + Img.HorizontalResolution);
  10. }
  11. fso.OpenTextFile('图片信息.txt', 2, true).WriteLine( arr.join('\r\n') );
  12. WSH.Echo('Done');
复制代码
 楼主| 发表于 2020-12-29 07:58:15 | 显示全部楼层
回复 2# Batcher


    抱歉,我没描述清楚。 我是想按照桌面的图片的顺序来输出结果,但代码的结果是重新排序了。 可以看截图,明显顺序和桌面是不一样的。
希望可以和桌面一样。
发表于 2020-12-29 08:32:50 | 显示全部楼层
用powershell 更方便
  1. powershell "Add-Type -AssemblyName System.Drawing;dir *.jpg,*.bmp,*.png,*.gif |%{$_.Name,[System.Drawing.Image]::FromFile($_).size -join ' '}"
复制代码
微信图片_20201229083132.jpg {Width=1920, Height=887}
微信图片_20201229083143.jpg {Width=960, Height=1920}
微信图片_20201229083146.jpg {Width=887, Height=1920}
微信截图_20201229082837.png {Width=688, Height=527}
发表于 2020-12-29 08:44:19 | 显示全部楼层
回复 5# 灯塔彭于晏


    你先试试其他几个代码是否达到目标?
 楼主| 发表于 2020-12-29 09:01:02 | 显示全部楼层
回复 3# WHY


    好像不太可以。还是重新按数字的顺序,依次排列了。
 楼主| 发表于 2020-12-29 09:01:55 | 显示全部楼层
保存为 Test.js, 双击运行
WHY 发表于 2020-12-28 16:07



    的确有结果了,但还是按照文件名,重新排列了顺序。和桌面顺序不太一样。
 楼主| 发表于 2020-12-29 09:06:22 | 显示全部楼层
回复 7# Batcher


    都没有保持原有的顺序, 都重新依次排列了~~
 楼主| 发表于 2020-12-29 09:06:50 | 显示全部楼层
回复 6# ivor


    谢谢,辛苦了辛苦了,但我不会操作这个~
发表于 2020-12-29 10:05:05 | 显示全部楼层
回复 10# 灯塔彭于晏


首先你需要确认一下桌面上的图片文件是按照什么顺序排序的。
脚本处理文件的时候常见的处理顺序是:按照文件名顺序、按照修改日期顺序、等等。
如果你桌面上的图片排序没有任何规律,那么脚本处理后的顺序不一致是正常的、不可避免的。
 楼主| 发表于 2020-12-29 10:09:53 | 显示全部楼层
回复 12# Batcher


    一张张存的话,应该是“创建时间” 。嘻嘻。
发表于 2020-12-29 10:38:36 | 显示全部楼层
回复 13# 灯塔彭于晏

可以按创建时间排序
  1. powershell "Add-Type -AssemblyName System.Drawing;dir *.jpg,*.bmp,*.png,*.gif | sort -Property CreationTime|%{$_.Name,[System.Drawing.Image]::FromFile($_).size -join ' '}"
复制代码
 楼主| 发表于 2020-12-29 10:41:41 | 显示全部楼层
回复 14# ivor


    怎么输出到文本呀? 我下了一个quicker,里面可以运行powershell,但是……没文本~
谢谢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:06 , Processed in 0.022386 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表