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

[其他] 【已解决】批处理怎样批量提取图片名及其尺寸?

本帖最后由 dragon631 于 2015-6-1 12:45 编辑

手上积累了五六千张壁纸了,现在想批量提取这些壁纸的名称及其它们的尺寸?
批量提取文件名是知道怎么处理了,但是,批量提取文件名的同时,也一并提取图片的尺寸,这个倒不知道怎么处理了?

希望有高人们给指点个可行的办法,不胜感激!

  1. @echo off
  2. (for /r %%i in (*.jpg) do (
  3.     echo "%%i"
  4.     nconvert.exe -info "%%i" | findstr /c:"Width" /c:"Height"
  5. ))>l.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher

这个只是提取了文件夹下第一张图片的绝对路径?

TOP

回复 3# dragon631

目测你电脑里面没有 nconvert.exe ,去下载一个。

以下是 BAT + VBS 版本,精简版系统、或没有装 Office 、或不会打补丁的请不要用。
  1. @echo off
  2. rem 获取图片尺寸示例
  3. call  :getPicSize  "C:\Windows\Web\Wallpaper\Windows\img0.jpg"
  4. if defined PicSize echo 图片尺寸: %PicSize%
  5. pause
  6. goto :eof
  7. :getPicSize
  8.   if not exist "%tmp%\getPicSize.vbs" (
  9.     echo On Error Resume Next
  10.     echo Set oImg=CreateObject^("WIA.ImageFile"^)
  11.     echo If Not Err.Number=0 Then Msgbox "错误,系统缺失 WIA.ImageFile 组件!"
  12.     echo oImg.LoadFile WScript.Arguments^(0^)
  13.     echo If Not Err.Number=0 Then WScript.Quit^(1^)
  14.     echo WScript.Echo oImg.Width ^& "x" ^& oImg.Height
  15.     echo WScript.Quit^(0^)
  16.   )>"%tmp%\getPicSize.vbs"
  17.   set PicSize=
  18.   for /f %%a in ('cscript.exe //nologo "%tmp%\getPicSize.vbs" "%~1"') do (set "PicSize=%%a")
  19.   goto :eof
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

本帖最后由 pcl_test 于 2017-8-21 19:33 编辑

nconvert下载地址http://batch-cn.qiniudn.com/tool/nconvert.exe,配合Batcher的代码使用,论坛搜索nconvert可获得相关教程和使用实例

bat+js,保存为bat文件运行即可,修改于apang的代码http://www.bathome.net/viewthread.php?tid=35704
  1. /*&cls
  2. @echo off
  3. for /f "tokens=1* delims=|" %%a in ('dir /a-d /b /s *.jpg *.jpeg *.png^|cscript -nologo -e:jscript "%~f0"') do echo;%%~na_%%b%%~xa
  4. pause&exit
  5. */
  6. var objShell = new ActiveXObject('Shell.Application');
  7. var fso = new ActiveXObject('Scripting.FileSystemObject');
  8. var objFolder = objShell.NameSpace(0);
  9. var i = 0;
  10. while(true){if(objFolder.GetDetailsOf(null, i) == '尺寸'){break}else i++;}
  11. while(!WSH.StdIn.AtEndOfStream){
  12.         var f = fso.GetFile(WSH.StdIn.ReadLine());
  13.         var objFolder = objShell.NameSpace(f.ParentFolder.Path);
  14.         var objItem = objFolder.ParseName(f.Name);
  15.         var size = objFolder.GetDetailsOf(objItem, i).match(/\d+/g).join('x');
  16.         WSH.Echo(f.Path+ '|' +size);
  17. }
复制代码
  1. @echo off
  2. powershell ^
  3.     $wi=New-Object -com 'WIA.ImageFile';^
  4.     dir . -inc *.jpg,*.jpeg,*.png -r^|%%{^
  5.         $wi.LoadFile($_);^
  6.         $_.Name+' '+$wi.Width+'x'+$wi.Height;^
  7.     }
  8. pause
复制代码

TOP

回复 4# yu2n

这个执行了一下,貌似没出来什么结果!

TOP

回复 5# pcl_test

这个确实提取到了图片名和图片尺寸,谢谢上面几位朋友的解答!

TOP

本帖最后由 dragon631 于 2015-6-3 13:55 编辑
五楼的代码得到的结果为:图片名+空格+尺寸(自然风光 2560x1600)
如果想要得到的结果是:图片名+_+尺寸+扩展名(自然风光_2560x1600.jpg),代码该如何变动?
另外,这个代码好像只对jpg格式图片有效,如果想将jpeg、png格式的图片也囊括在内,代码又该如何变动?


PS:因为这个问题发到别的帖子里面去了,所以,把问题搬过来!

TOP

本帖最后由 terse 于 2015-6-4 00:04 编辑

添加EXIT
  1. @if(0)==(0) echo off & dir /b /a-d /s *.jpg *.jpeg *.png 2>nul|cscript -NoLogo -E:JScript %0 >图片尺寸.txt & pause  & exit @end
  2. var fso, Img;  
  3. fso = new ActiveXObject("Scripting.FileSystemObject");
  4. Img = new ActiveXObject("WIA.ImageFile");
  5. while(!WScript.StdIn.AtEndOfStream){
  6.     var f = fso.GetFile(WScript.StdIn.ReadLine());
  7.     Img.LoadFile(f);
  8.     WSH.Echo(fso.GetBaseName(f) + '_' + Img.Width + 'x' + Img.Height + '.' + fso.GetExtensionName(f));
  9. }
复制代码

TOP

回复 10# terse

这个代码运行效果甚佳,非常感谢!

TOP

返回列表