标题: [文件操作] [已解决]批处理如何统计图片各有多少张,并能否查出不符合尺寸的图片用TXT列出链接? [打印本页]
作者: 228630386 时间: 2015-5-17 18:35 标题: [已解决]批处理如何统计图片各有多少张,并能否查出不符合尺寸的图片用TXT列出链接?
本帖最后由 228630386 于 2015-5-18 23:15 编辑
统计所有子文件夹的1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg, 7.jpg, 15.jpg, 16.jpg各有多少张?上次哪位亲已经帮我解决了这个问题,如果再多加一个附加条件可以么?
就是查找1,2,3,4,15,16图对尺寸不是1000x1200的图片; 5,7图片对应不是200x300的图片。并用TXT把错误图片的链接列出来。
表达得不太清晰,不知能否理解到 。就是查找图片各有多少张数和尺寸指定尺寸都整理出来,都同时执行。
@echo off
for %%i in (1 2 3 4 5 7 15 16) do (
set n=0
for /r /d %%a in (*) do if exist "%%a\%%i.jpg" (set /a n+=1)
setlocal enabledelayedexpansion
echo;%%i.jpg !n!张
endlocal
)
pause
作者: gawk 时间: 2015-5-17 22:38
1.jpg假设共有一张,是1000x1200,最终结果如何显示?
1.jpg假设共有一张,不是1000x1200,最终结果如何显示?
1.jpg假设共有两张,两张都是1000x1200,最终结果如何显示?
1.jpg假设共有两张,两张都不是1000x1200,最终结果如何显示?
1.jpg假设共有两张,一张是1000x1200,另一张不是1000x1200,最终结果如何显示?
作者: pcl_test 时间: 2015-5-18 00:40
本帖最后由 pcl_test 于 2015-5-18 22:18 编辑
- @echo off
- ::先下载第三方工具http://batch-cn.qiniudn.com/tool/pvw32con.exe
- for %%a in (1.jpg 2.jpg 3.jpg 4.jpg 5.jpg 7.jpg 15.jpg 16.jpg) do (
- set n=0
- (for /f "delims=" %%b in ('dir /a-d /s /b "%%a" 2^>nul') do (
- for /f "tokens=2 delims=, " %%k in ('pvw32con "%%b"') do (
- if "%%~nb" equ "5" (if %%k neq 200x300 echo,%%b %%k) else if "%%~nb" equ "7" (if %%k neq 200x300 echo,%%b %%k) else (if %%k neq 1000x1200 echo,%%b %%k)
- )
- set /a n+=1))>>"尺寸不符图片.txt"
- setlocal enabledelayedexpansion
- echo;%%a 共!n!张
- endlocal
- )
- findstr .* "尺寸不符图片.txt" >nul||del "尺寸不符图片.txt"
- pause
复制代码
作者: 228630386 时间: 2015-5-18 20:37
回复 3# pcl_test
你好,第三方软件我已经下裁了,在放在同一个文件夹中运行么?
作者: pcl_test 时间: 2015-5-18 20:40
回复 4# 228630386
跟批处理放在一起
作者: 228630386 时间: 2015-5-18 20:43
本帖最后由 228630386 于 2015-5-18 20:57 编辑
回复 5# pcl_test
假如文件夹的链接是D:\9.22 图片整理文件夹, TXT中只能显示 D:\9.22 files
还是我上传一份附件让你测试下? 这个我也觉得非常复杂,应该比较难实现。
里在有两个错误尺寸的图片,实际没有这么少的,这只是举例哈!
http://pan.baidu.com/s/1m9mkY
作者: pcl_test 时间: 2015-5-18 21:11
回复 6# 228630386
已修改
作者: 228630386 时间: 2015-5-18 21:25
回复 7# pcl_test
可以了,好强大,不过检测速度有点慢。还想问一下问题,用什么软件可以将DOS命令和第三方软件打包成一个命令么?
作者: pcl_test 时间: 2015-5-18 21:37
回复 8# 228630386
我个人还是比较喜欢winrar打包成exe的那种
作者: 228630386 时间: 2015-5-18 21:51
本帖最后由 228630386 于 2015-5-18 21:53 编辑
回复 9# pcl_test
好,我试一下。因为检查图片张数和尺寸一起的话有点慢。可否将它拆分开,一个是之前的检测张数DOS命令不变,另一个侧只检查尺寸和导出TXT说明? 还有能否实现假如没有错误的尺寸,TXT侧不用新建?
作者: pcl_test 时间: 2015-5-18 22:17
回复 10# 228630386
慢的原因是因为调用了第三方工具,所以即便分开两个功能的批处理,统计的因为没有了筛选会变快,但筛选的因为还是调用第三方,所以速度还是一样慢的,大概借助vbs或js混编或其他第三方工具可以提高速度……没有找到不符合图片不生成txt的代码已修改
作者: 228630386 时间: 2015-5-18 23:14
回复 11# pcl_test
之前我没有把下载第三方软件的命令删去,现在删去会快一点点。因为图片量比较大,用win7筛选出来比较麻烦。能实现已经很满足了,真心感谢你每次的帮忙解决了很多工作上的问题。
作者: terse 时间: 2015-5-19 00:35
这样效率会提升点吗- @if(0)==(0) echo off & setlocal enabledelayedexpansion
- for %%i in (1.jpg,2.jpg,3.jpg,4.jpg,15.jpg,16.jpg) do set "$%%i=1000x1200"
- for %%i in (5.jpg,7.jpg) do set "$%%i=200x300"
- for %%i in (1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,7.jpg,15.jpg,16.jpg) do (
- for /f "tokens=1*" %%a in ('dir /b /s /a-d %%i 2^>nul^|cscript -NoLogo -E:JScript %0') do (
- if "%%b" neq "" (
- if "%%a" neq "!$%%i!" >>err.txt echo;%%b
- ) else set "n=%%a"
- )
- echo;%%i 共 !n! 张
- )
- pause&exit
-
- @end
- var s = "",l=0
- while(!WScript.StdIn.AtEndOfStream){
- var Img = new ActiveXObject("WIA.ImageFile")
- var file = WScript.StdIn.ReadLine();
- Img.LoadFile(file);
- WSH.Echo(Img.Width + "x" + Img.Height + ' ' + file);
- l++
- }
- WSH.Echo(l);
复制代码
作者: apang 时间: 2015-5-19 02:32
本帖最后由 apang 于 2015-5-19 16:27 编辑
我也来个:- @set @n=0; /* & echo off & setlocal enabledelayedexpansion
- set "s=1 2 3 4 5 7 15 16 "
- for /f "tokens=1,2*" %%a in ('dir/b/s %s: =.jpg? %^|cscript -nologo -e:jscript "%~0"') do (
- if /i "%%~nxc" NEQ "!Name!" (
- if defined Name echo,!Name! 共!i!张
- set i=1
- ) else set /a i+=1
- echo,%%c %%b
- set "Name=%%~nxc"
- )
- pause & exit/b & rem */
-
- var objShell = new ActiveXObject("Shell.Application");
- var objFolder = objShell.NameSpace(0);
- var i = 0;
-
- while(true) {
- if (objFolder.GetDetailsOf(null, i) == "尺寸") {break} else i++;
- }
-
- var re = /^(1|2|3|4|15|16)\.jpg1000x1200$|^(5|7)\.jpg200x300$/i;
- var arr = [];
- while(!WScript.StdIn.AtEndOfStream) {
- var f = WScript.StdIn.ReadLine();
- var m = f.match(/^(.+)\\(.+\.jpg)$/i);
- var objFolder = objShell.NameSpace(m[1]);
- var objItem = objFolder.ParseName(m[2]);
- var size = objFolder.GetDetailsOf(objItem, i).match(/\d+/g).join("x");
- if (!re.test(m[2] + size)) {
- arr.push(parseInt(m[2])+100 + " " + size + " " + f)
- }
- }
- WScript.Echo(arr.sort().join("\n")+ "\n/")
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |