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

[文件操作] [已解决]批处理如何统计图片各有多少张,并能否查出不符合尺寸的图片用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
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

1.jpg假设共有一张,是1000x1200,最终结果如何显示?
1.jpg假设共有一张,不是1000x1200,最终结果如何显示?
1.jpg假设共有两张,两张都是1000x1200,最终结果如何显示?
1.jpg假设共有两张,两张都不是1000x1200,最终结果如何显示?
1.jpg假设共有两张,一张是1000x1200,另一张不是1000x1200,最终结果如何显示?
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

本帖最后由 pcl_test 于 2015-5-18 22:18 编辑
  1. @echo off
  2. ::先下载第三方工具http://batch-cn.qiniudn.com/tool/pvw32con.exe
  3. for %%a in (1.jpg 2.jpg 3.jpg 4.jpg 5.jpg 7.jpg 15.jpg 16.jpg) do (
  4. set n=0
  5. (for /f "delims=" %%b in ('dir /a-d /s /b "%%a" 2^>nul') do (
  6. for /f "tokens=2 delims=, " %%k in ('pvw32con "%%b"') do (
  7. 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)
  8. )
  9. set /a n+=1))>>"尺寸不符图片.txt"
  10. setlocal enabledelayedexpansion
  11. echo;%%a 共!n!张
  12. endlocal
  13. )
  14. findstr .* "尺寸不符图片.txt" >nul||del "尺寸不符图片.txt"
  15. pause
复制代码
1

评分人数

TOP

回复 3# pcl_test


    你好,第三方软件我已经下裁了,在放在同一个文件夹中运行么?

TOP

回复 4# 228630386
跟批处理放在一起

TOP

本帖最后由 228630386 于 2015-5-18 20:57 编辑

回复 5# pcl_test


    假如文件夹的链接是D:\9.22 图片整理文件夹, TXT中只能显示 D:\9.22 files
    还是我上传一份附件让你测试下? 这个我也觉得非常复杂,应该比较难实现。
   里在有两个错误尺寸的图片,实际没有这么少的,这只是举例哈!
   http://pan.baidu.com/s/1m9mkY

TOP

回复 6# 228630386

已修改

TOP

回复 7# pcl_test


    可以了,好强大,不过检测速度有点慢。还想问一下问题,用什么软件可以将DOS命令和第三方软件打包成一个命令么?

TOP

回复 8# 228630386
我个人还是比较喜欢winrar打包成exe的那种

TOP

本帖最后由 228630386 于 2015-5-18 21:53 编辑

回复 9# pcl_test


    好,我试一下。因为检查图片张数和尺寸一起的话有点慢。可否将它拆分开,一个是之前的检测张数DOS命令不变,另一个侧只检查尺寸和导出TXT说明? 还有能否实现假如没有错误的尺寸,TXT侧不用新建?

TOP

回复 10# 228630386
慢的原因是因为调用了第三方工具,所以即便分开两个功能的批处理,统计的因为没有了筛选会变快,但筛选的因为还是调用第三方,所以速度还是一样慢的,大概借助vbs或js混编或其他第三方工具可以提高速度……没有找到不符合图片不生成txt的代码已修改

TOP

回复 11# pcl_test


    之前我没有把下载第三方软件的命令删去,现在删去会快一点点。因为图片量比较大,用win7筛选出来比较麻烦。能实现已经很满足了,真心感谢你每次的帮忙解决了很多工作上的问题。

TOP

这样效率会提升点吗
  1. @if(0)==(0) echo off & setlocal enabledelayedexpansion
  2. for %%i in (1.jpg,2.jpg,3.jpg,4.jpg,15.jpg,16.jpg) do set "$%%i=1000x1200"
  3. for %%i in (5.jpg,7.jpg) do set "$%%i=200x300"
  4. for %%i in (1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,7.jpg,15.jpg,16.jpg) do (
  5.     for /f "tokens=1*" %%a in ('dir /b /s /a-d %%i 2^>nul^|cscript -NoLogo -E:JScript %0') do (
  6.         if "%%b" neq "" (
  7.            if "%%a" neq "!$%%i!" >>err.txt echo;%%b
  8.         ) else set "n=%%a"
  9.     )
  10.     echo;%%i 共 !n! 张
  11. )
  12. pause&exit
  13. @end
  14. var s = "",l=0
  15. while(!WScript.StdIn.AtEndOfStream){
  16.     var Img = new ActiveXObject("WIA.ImageFile")
  17.     var file = WScript.StdIn.ReadLine();
  18.     Img.LoadFile(file);
  19.     WSH.Echo(Img.Width + "x" + Img.Height + ' ' + file);
  20.     l++
  21. }
  22. WSH.Echo(l);
复制代码
1

评分人数

TOP

本帖最后由 apang 于 2015-5-19 16:27 编辑

我也来个:
  1. @set @n=0; /* & echo off & setlocal enabledelayedexpansion
  2. set "s=1 2 3 4 5 7 15 16 "
  3. for /f "tokens=1,2*" %%a in ('dir/b/s %s: =.jpg? %^|cscript -nologo -e:jscript "%~0"') do (
  4.         if /i "%%~nxc" NEQ "!Name!" (
  5.                 if defined Name echo,!Name! 共!i!张
  6.                 set i=1
  7.         ) else set /a i+=1
  8.         echo,%%c %%b
  9.         set "Name=%%~nxc"
  10. )
  11. pause & exit/b & rem */
  12. var objShell = new ActiveXObject("Shell.Application");
  13. var objFolder = objShell.NameSpace(0);
  14. var i = 0;
  15. while(true) {
  16.         if (objFolder.GetDetailsOf(null, i) == "尺寸") {break} else i++;
  17. }
  18. var re = /^(1|2|3|4|15|16)\.jpg1000x1200$|^(5|7)\.jpg200x300$/i;
  19. var arr = [];
  20. while(!WScript.StdIn.AtEndOfStream) {
  21.         var f = WScript.StdIn.ReadLine();
  22.         var m = f.match(/^(.+)\\(.+\.jpg)$/i);
  23.         var objFolder = objShell.NameSpace(m[1]);
  24.         var objItem = objFolder.ParseName(m[2]);
  25.         var size = objFolder.GetDetailsOf(objItem, i).match(/\d+/g).join("x");
  26.         if (!re.test(m[2] + size)) {
  27.                 arr.push(parseInt(m[2])+100 + " " + size + " " + f)
  28.         }
  29. }
  30. WScript.Echo(arr.sort().join("\n")+ "\n/")
复制代码
1

评分人数

TOP

返回列表