标题: [其他] 【已解决】批处理怎样批量提取图片名及其尺寸? [打印本页]
作者: dragon631 时间: 2015-6-1 08:37 标题: 【已解决】批处理怎样批量提取图片名及其尺寸?
本帖最后由 dragon631 于 2015-6-1 12:45 编辑
手上积累了五六千张壁纸了,现在想批量提取这些壁纸的名称及其它们的尺寸?
批量提取文件名是知道怎么处理了,但是,批量提取文件名的同时,也一并提取图片的尺寸,这个倒不知道怎么处理了?
希望有高人们给指点个可行的办法,不胜感激!
作者: Batcher 时间: 2015-6-1 09:31
- @echo off
- (for /r %%i in (*.jpg) do (
- echo "%%i"
- nconvert.exe -info "%%i" | findstr /c:"Width" /c:"Height"
- ))>l.txt
复制代码
作者: dragon631 时间: 2015-6-1 11:07
回复 2# Batcher
这个只是提取了文件夹下第一张图片的绝对路径?
作者: yu2n 时间: 2015-6-1 11:29
回复 3# dragon631
目测你电脑里面没有 nconvert.exe ,去下载一个。
以下是 BAT + VBS 版本,精简版系统、或没有装 Office 、或不会打补丁的请不要用。- @echo off
-
- rem 获取图片尺寸示例
- call :getPicSize "C:\Windows\Web\Wallpaper\Windows\img0.jpg"
- if defined PicSize echo 图片尺寸: %PicSize%
- pause
-
- goto :eof
- :getPicSize
- if not exist "%tmp%\getPicSize.vbs" (
- echo On Error Resume Next
- echo Set oImg=CreateObject^("WIA.ImageFile"^)
- echo If Not Err.Number=0 Then Msgbox "错误,系统缺失 WIA.ImageFile 组件!"
- echo oImg.LoadFile WScript.Arguments^(0^)
- echo If Not Err.Number=0 Then WScript.Quit^(1^)
- echo WScript.Echo oImg.Width ^& "x" ^& oImg.Height
- echo WScript.Quit^(0^)
- )>"%tmp%\getPicSize.vbs"
- set PicSize=
- for /f %%a in ('cscript.exe //nologo "%tmp%\getPicSize.vbs" "%~1"') do (set "PicSize=%%a")
- goto :eof
复制代码
作者: pcl_test 时间: 2015-6-1 12:28
本帖最后由 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- /*&cls
- @echo off
- 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
- pause&exit
- */
-
- var objShell = new ActiveXObject('Shell.Application');
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- var objFolder = objShell.NameSpace(0);
- var i = 0;
- while(true){if(objFolder.GetDetailsOf(null, i) == '尺寸'){break}else i++;}
-
- while(!WSH.StdIn.AtEndOfStream){
- var f = fso.GetFile(WSH.StdIn.ReadLine());
- var objFolder = objShell.NameSpace(f.ParentFolder.Path);
- var objItem = objFolder.ParseName(f.Name);
- var size = objFolder.GetDetailsOf(objItem, i).match(/\d+/g).join('x');
- WSH.Echo(f.Path+ '|' +size);
- }
复制代码
- @echo off
- powershell ^
- $wi=New-Object -com 'WIA.ImageFile';^
- dir . -inc *.jpg,*.jpeg,*.png -r^|%%{^
- $wi.LoadFile($_);^
- $_.Name+' '+$wi.Width+'x'+$wi.Height;^
- }
- pause
复制代码
作者: dragon631 时间: 2015-6-1 12:43
回复 4# yu2n
这个执行了一下,貌似没出来什么结果!
作者: dragon631 时间: 2015-6-1 12:44
回复 5# pcl_test
这个确实提取到了图片名和图片尺寸,谢谢上面几位朋友的解答!
作者: dragon631 时间: 2015-6-3 13:48
本帖最后由 dragon631 于 2015-6-3 13:55 编辑
五楼的代码得到的结果为:图片名+空格+尺寸(自然风光 2560x1600)
如果想要得到的结果是:图片名+_+尺寸+扩展名(自然风光_2560x1600.jpg),代码该如何变动?
另外,这个代码好像只对jpg格式图片有效,如果想将jpeg、png格式的图片也囊括在内,代码又该如何变动?
PS:因为这个问题发到别的帖子里面去了,所以,把问题搬过来!
作者: terse 时间: 2015-6-3 14:41
本帖最后由 terse 于 2015-6-4 00:04 编辑
添加EXIT- @if(0)==(0) echo off & dir /b /a-d /s *.jpg *.jpeg *.png 2>nul|cscript -NoLogo -E:JScript %0 >图片尺寸.txt & pause & exit @end
- var fso, Img;
- fso = new ActiveXObject("Scripting.FileSystemObject");
- Img = new ActiveXObject("WIA.ImageFile");
- while(!WScript.StdIn.AtEndOfStream){
- var f = fso.GetFile(WScript.StdIn.ReadLine());
- Img.LoadFile(f);
- WSH.Echo(fso.GetBaseName(f) + '_' + Img.Width + 'x' + Img.Height + '.' + fso.GetExtensionName(f));
- }
复制代码
作者: dragon631 时间: 2015-6-3 15:44
回复 10# terse
这个代码运行效果甚佳,非常感谢!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |