Board logo

标题: [文件操作] [已解决]求助,关于WHY大佬写的统计图片尺寸规格代码,想稍微调整一下 [打印本页]

作者: akb4888    时间: 2020-12-2 21:47     标题: [已解决]求助,关于WHY大佬写的统计图片尺寸规格代码,想稍微调整一下

本帖最后由 akb4888 于 2020-12-3 15:44 编辑
  1. @set @n=0/* & echo off
  2. cd /d E:\test\
  3. dir /a-d /b /s *.tif *.jpg *.png *.jpeg | cscript -nologo -e:jscript "%~f0"
  4. pause & exit /b */
  5. var arr = [0, 0, 0, 0, 0, 0];
  6. var ssh = new ActiveXObject('Shell.Application');
  7. var fd  = ssh.NameSpace(0x00);
  8. var checkSize = function(width, height){
  9.         if(width>=129 || height>=129){
  10.                 arr[0] += 1;
  11.                 return 'A0+'
  12.         }else if((width>=118.9 && width<129) || (height>=118.9 && height<129)){
  13.                 arr[1] += 1;
  14.                 return 'A0'
  15.         }else if((width>=84.1 && width<118.9) || (height>=84.1 && height<118.9)){
  16.                 arr[2] += 1;
  17.                 return 'A1'
  18.         }else if((width>=59.4 && width<84.1) || (height>=59.4 && height<84.1)){
  19.                 arr[3] += 1;
  20.                 return 'A2'
  21.         }else if((width>=42 && width<59.4) || (height>=42 && height<59.4)){
  22.                 arr[4] += 1;
  23.                 return 'A3'
  24.         }else {
  25.                 arr[5] += 1;
  26.                 return 'A4'
  27.         }
  28. }
  29. for(var i=0; i<300; i++) {   
  30.         if(fd.GetDetailsOf(null, i) == '宽度') {
  31.                 var n1 = i;
  32.         }else if(fd.GetDetailsOf(null, i) == '高度') {
  33.                 var n2 = i;
  34.         }else if(/^水平分[辨辩]率$/.test(fd.GetDetailsOf(null, i))) {
  35.                 var n3 = i;
  36.         }else if(/^垂直分[辨辩]率$/.test(fd.GetDetailsOf(null, i))) {
  37.                 var n4 = i;
  38.         }
  39. }
  40. while(!WSH.StdIn.AtEndOfStream){
  41.         var file = WSH.StdIn.ReadLine();
  42.         var name = file.replace(/.+\\(.+)$/, '$1');
  43.         var fd = ssh.NameSpace( file.replace(/(.+)\\.+$/, '$1') );
  44.         var w = fd.GetDetailsOf(fd.ParseName(name), n1).match(/\d+/)[0];  //宽度
  45.         var h = fd.GetDetailsOf(fd.ParseName(name), n2).match(/\d+/)[0];  //高度
  46.         var hr = fd.GetDetailsOf(fd.ParseName(name), n3).match(/\d+/)[0]; //水平刷新率
  47.         var vr = fd.GetDetailsOf(fd.ParseName(name), n4).match(/\d+/)[0]; //垂直刷新率
  48.         var width = (w / hr * 2.54).toFixed(1); height = (h / vr * 2.54).toFixed(1);
  49.         var size = checkSize(width, height);
  50.         WSH.Echo(name + ' ' + width + 'x' + height + ' ' + size);
  51. }
  52. var s = 'A0+共' + arr[0] + '张,A0共' + arr[1] + '张,A1共' + arr[2] + '张,';
  53. s += 'A2共' + arr[3] + '张,A3共' + arr[4] + '张,A4共' + arr[5] + '张\r\n';
  54. s += '折合A4共' + (arr[0]*32+arr[1]*16+arr[2]*8+arr[3]*4+arr[4]*2+arr[5]) + '张'
  55. WSH.Echo(s)
复制代码
首先非常非常感谢WHY大佬,以上为WHY大佬好久之前写的代码,我自己用时改成了按面积统计,但是,现在想按不同文件夹分别进行统计,并输出到txt文档,研究了好久没整明白,而且这个还是bat+js的吧
我不行了,,,想实现的效果如下:
统计完后输出到txt
E:\test\1  图片共40张  A0共1张 A1共3张 A2共0张 A3共10张 A4共26张
E:\test\2  图片共20张  A0共0张 A1共5张 A2共5张 A3共0张 A4共10张
E:\test\3  图片共60张  A0共5张 A1共10张 A2共15张 A3共10张 A4共20张

请大佬救救孩子,,,,
作者: WHY    时间: 2020-12-3 11:27

  1. @set @n=0/* & echo off
  2. cd /d E:\test\
  3. dir /a-d /b /s *.tif *.jpg *.png *.jpeg | cscript -nologo -e:jscript "%~f0" > result.Log
  4. start "" notePad result.Log
  5. pause & exit /b */
  6. var ssh = new ActiveXObject('Shell.Application');
  7. var fd  = ssh.NameSpace(0x00);
  8. var checkSize = function(width, height){
  9.         if(width>=129 || height>=129){
  10.                 arr[0] += 1;
  11.                 return 'A0+'
  12.         }else if((width>=118.9 && width<129) || (height>=118.9 && height<129)){
  13.                 arr[1] += 1;
  14.                 return 'A0'
  15.         }else if((width>=84.1 && width<118.9) || (height>=84.1 && height<118.9)){
  16.                 arr[2] += 1;
  17.                 return 'A1'
  18.         }else if((width>=59.4 && width<84.1) || (height>=59.4 && height<84.1)){
  19.                 arr[3] += 1;
  20.                 return 'A2'
  21.         }else if((width>=42 && width<59.4) || (height>=42 && height<59.4)){
  22.                 arr[4] += 1;
  23.                 return 'A3'
  24.         }else {
  25.                 arr[5] += 1;
  26.                 return 'A4'
  27.         }
  28. }
  29. for(var i=0; i<300; i++) {   
  30.         if(fd.GetDetailsOf(null, i) == '宽度') {
  31.                 var n1 = i;
  32.         }else if(fd.GetDetailsOf(null, i) == '高度') {
  33.                 var n2 = i;
  34.         }else if(/^水平分[辨辩]率$/.test(fd.GetDetailsOf(null, i))) {
  35.                 var n3 = i;
  36.         }else if(/^垂直分[辨辩]率$/.test(fd.GetDetailsOf(null, i))) {
  37.                 var n4 = i;
  38.         }
  39. }
  40. var map = {};
  41. while(!WSH.StdIn.AtEndOfStream){
  42.         var file = WSH.StdIn.ReadLine();
  43.         var name = file.replace(/^.+\\([^\\]+)$/, '$1');
  44.         var fd   = file.replace(/^(.+)\\[^\\]+$/, '$1');
  45.         if( !map.hasOwnProperty(fd) ) map[fd] = [];       //key=目录名,value=文件名数组
  46.         map[fd].push( name );
  47. }
  48. for( var key in map ){
  49.         var arr = [0, 0, 0, 0, 0, 0];
  50.         var objFolder = ssh.NameSpace(key);
  51.         for(var i=0; i<map[key].length; i++){
  52.                 var w = objFolder.GetDetailsOf(objFolder.ParseName(map[key][i]), n1).match(/\d+/)[0];  //宽度
  53.                 var h = objFolder.GetDetailsOf(objFolder.ParseName(map[key][i]), n2).match(/\d+/)[0];  //高度
  54.                 var hr = objFolder.GetDetailsOf(objFolder.ParseName(map[key][i]), n3).match(/\d+/)[0]; //水平刷新率
  55.                 var vr = objFolder.GetDetailsOf(objFolder.ParseName(map[key][i]), n4).match(/\d+/)[0]; //垂直刷新率
  56.                 var width = (w / hr * 2.54).toFixed(1);
  57.                 var height = (h / vr * 2.54).toFixed(1);
  58.                 var size = checkSize(width, height);
  59.                 WSH.Echo(map[key][i] + ' ' + width + 'x' + height + ' ' + size);
  60.         }
  61.         var s = 'A0+共' + arr[0] + '张,A0共' + arr[1] + '张,A1共' + arr[2] + '张,';
  62.         s += 'A2共' + arr[3] + '张,A3共' + arr[4] + '张,A4共' + arr[5] + '张\r\n';
  63.         WSH.Echo(key + ' 共' + map[key].length + '张图片 ' + s);
  64. }
复制代码
第64行显示每个文件的宽、高,不需要的话就删掉这一行。
作者: akb4888    时间: 2020-12-3 12:18

回复 2# WHY


    谢谢w老师!完美解决问题,我滚去测试学习调整了!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2