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

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

在百度中寻求到的#获取图片分辨率信息#的批处理,不用额外其他软件,还挺好的。
但输出结果中,图片会按照名字,重新自动排列顺序,请问这一点该怎么改呢?

要求:我不想它重新排列,请保持桌面顺序,依次输出
谢谢您啦~
  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
复制代码
可以从图片中看到,文本中的排序按序重排了~ ~谢谢您了

回复 1# 灯塔彭于晏


    你希望改成什么效果呢?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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 (
复制代码
试试行不行。

TOP

保存为 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');
复制代码

TOP

回复 2# Batcher


    抱歉,我没描述清楚。 我是想按照桌面的图片的顺序来输出结果,但代码的结果是重新排序了。 可以看截图,明显顺序和桌面是不一样的。
希望可以和桌面一样。

TOP

用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}
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 5# 灯塔彭于晏


    你先试试其他几个代码是否达到目标?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# WHY


    好像不太可以。还是重新按数字的顺序,依次排列了。

TOP

保存为 Test.js, 双击运行
WHY 发表于 2020-12-28 16:07



    的确有结果了,但还是按照文件名,重新排列了顺序。和桌面顺序不太一样。

TOP

回复 7# Batcher


    都没有保持原有的顺序, 都重新依次排列了~~

TOP

回复 6# ivor


    谢谢,辛苦了辛苦了,但我不会操作这个~

TOP

回复 10# 灯塔彭于晏


首先你需要确认一下桌面上的图片文件是按照什么顺序排序的。
脚本处理文件的时候常见的处理顺序是:按照文件名顺序、按照修改日期顺序、等等。
如果你桌面上的图片排序没有任何规律,那么脚本处理后的顺序不一致是正常的、不可避免的。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 12# Batcher


    一张张存的话,应该是“创建时间” 。嘻嘻。

TOP

回复 13# 灯塔彭于晏

可以按创建时间排序
  1. powershell "Add-Type -AssemblyName System.Drawing;dir *.jpg,*.bmp,*.png,*.gif | sort -Property CreationTime|%{$_.Name,[System.Drawing.Image]::FromFile($_).size -join ' '}"
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 14# ivor


    怎么输出到文本呀? 我下了一个quicker,里面可以运行powershell,但是……没文本~
谢谢~

TOP

返回列表