Board logo

标题: [文件操作] BAT如何调用WScript参数获取图片分辨率进行分类? [打印本页]

作者: 老卡机    时间: 2017-9-13 21:57     标题: BAT如何调用WScript参数获取图片分辨率进行分类?

jpg、png和bmp三种图片N张,分辨率各不相同,
第一步,在图片目录运行BAT,获取所有文件名称,从名称中提取出类型赋予变量1,
第二步,想用WScript获取图片分辨率赋予变量2,根据变量2的图片分辨率新建文件夹,比如新建1280x768文件夹
第三步,根据变量1,在变量2的文件夹内新建文件夹,如果只有两个类型就建立那两个,比如:"1280x768\jpg"和"1280x768\png"
第四步,用move命令,根据图片分辨率,移动到各自的类型的文件夹内。
先谢谢了,可能表达的不对,这个过程不会反复的新建文件夹或读同一个文件吧?
作者: codegay    时间: 2017-9-13 22:25

你要是想学,你就自己写。
你要是不想写,那你就只要描述你想干嘛就行了。
作者: 老卡机    时间: 2017-9-13 22:31

本帖最后由 老卡机 于 2017-9-13 23:14 编辑

没学会JS变量,这个论坛也没找到
比如js混编获取文件路径,以文本方式提取,文件所在的文件夹为变量1,文件名为变量2,文件类型为变量3
作者: slore    时间: 2017-9-13 23:36

建议直接下载 IrfanView,用IrfanView的批量改名,可以指定命名格式.用$H,$W就是图像分辨率.
作者: WHY    时间: 2017-9-14 01:35

本帖最后由 WHY 于 2017-9-15 00:26 编辑
  1. @if(0)==(0) echo off
  2. for /f "tokens=1*" %%i in ('dir /b *.jpg *.png *.bmp ^| cscript //nologo //e:jscript "%~f0"') do (
  3.     echo;md %%i
  4.     echo;move "%%j" %%i\
  5. )
  6. pause & goto :EOF
  7. @end
  8. var objShell  = new ActiveXObject('Shell.Application');
  9. var strFolder = WSH.ScriptFullName.replace(/(.+)\\[^\\]+$/, '$1');   //脚本所在文件夹名
  10. var objFolder = objShell.NameSpace(strFolder);
  11. for(var i=0; i<300; i++) {
  12.     if(/^(尺寸|分[辩辨]率)$/.test(objFolder.GetDetailsOf(null, i))){var n = i;}
  13.     //分辨率对应的序号
  14. }
  15. while(!WScript.StdIn.AtEndOfStream) {
  16.     var strFile = WScript.StdIn.ReadLine();              //文件名
  17.     var strExt  = strFile.match(/.+\.([^.]+)$/)[1];      //扩展名
  18.     var objItem = objFolder.ParseName(strFile);
  19.     var res = objFolder.GetDetailsOf(objItem, n).match(/\d+/g).join('x');   //分辨率
  20.     WSH.Echo(res + '\\' + strExt + ' ' + strFile);
  21. }
复制代码

作者: 老卡机    时间: 2017-9-14 09:48

学习了非常好用,如何从strFolder获取所在目录路径值,应用到md那里新建文件夹,虽然说路径可有可无
作者: slore    时间: 2017-9-14 10:02

回复 5# 老卡机

为什么说不能。
不知道你有没有用irfanview试过。

复制/重命名规则设置Hx$W\$F
(分辨率长x分辨率宽\元文件名)
输出目录设置为D:\

点run test rename,确认下都OK,直接点start batch就完了。

图片上传失败了,只能50KB?这也太小了。
(就是一个设定画面,选择改名模式,输入改名规则,添加要处理的文件列表)

处理前:
  1. D:\Users\SLORE\Desktop\testimage>tree /F
  2. D:.
  3. │  1_dog.jpg
  4. │  2_dog.jpg
  5. │  3_dog.jpg
  6. │  4_dog.jpg
  7. └─elephant
  8.         1_elephant3.jpg
  9.         2_elephant3.jpg
  10.         3_elephant3.jpg
  11.         4_elephant3.jpg
复制代码
dry-run模式测试结果:
  1. Pattern: $Wx$H\$F
  2. Processing file: D:\Users\SLORE\Desktop\testimage\1_dog.jpg
  3. ... Ok - Warning: Destination file already exists -> Replace: C:\testimage2\449x500\1_dog.jpg
  4. Processing file: D:\Users\SLORE\Desktop\testimage\2_dog.jpg
  5. ... Ok - Warning: Destination file already exists -> Replace: C:\testimage2\450x500\2_dog.jpg
  6. Processing file: D:\Users\SLORE\Desktop\testimage\3_dog.jpg
  7. ... Ok - Warning: Destination file already exists -> Replace: C:\testimage2\449x500\3_dog.jpg
  8. Processing file: D:\Users\SLORE\Desktop\testimage\4_dog.jpg
  9. ... Ok - Warning: Destination file already exists -> Replace: C:\testimage2\450x500\4_dog.jpg
  10. Processing file: D:\Users\SLORE\Desktop\testimage\elephant\1_elephant3.jpg
  11. ... Ok - Warning: Destination file already exists -> Replace: C:\testimage2\305x288\1_elephant3.jpg
  12. Processing file: D:\Users\SLORE\Desktop\testimage\elephant\2_elephant3.jpg
  13. ... Ok - Warning: Destination file already exists -> Replace: C:\testimage2\306x288\2_elephant3.jpg
  14. Processing file: D:\Users\SLORE\Desktop\testimage\elephant\3_elephant3.jpg
  15. ... Ok - Warning: Destination file already exists -> Replace: C:\testimage2\305x288\3_elephant3.jpg
  16. Processing file: D:\Users\SLORE\Desktop\testimage\elephant\4_elephant3.jpg
  17. ... Ok - Warning: Destination file already exists -> Replace: C:\testimage2\306x288\4_elephant3.jpg
  18. 8 Files - Errors: 0, Warnings: 8
复制代码
移动后:
  1. C:\testimage2>tree /F
  2. C:.
  3. ├─305x288
  4. │      1_elephant3.jpg
  5. │      3_elephant3.jpg
  6. ├─306x288
  7. │      2_elephant3.jpg
  8. │      4_elephant3.jpg
  9. ├─449x500
  10. │      1_dog.jpg
  11. │      3_dog.jpg
  12. └─450x500
  13.         2_dog.jpg
  14.         4_dog.jpg
  15. C:\testimage2>
复制代码
缺点的话,分辨率的文件夹不存在的时候,会出个提示问你是否确认一直点OK就行了,没找到option去关闭。
不过命令行模式应该有。
作者: WHY    时间: 2017-9-15 00:39

回复 7# 老卡机


    strFolder 变量就是当前批处理所在目录,相当于 %~dp0 去掉最后的 "\" 字符。这里是相对路径,所以传递给 md 命令没有意义

如果需要移动到其它目录:
md "D:\Test\%%i"
move "%%j" "D:\Test\%%i"
作者: 老卡机    时间: 2017-9-15 20:16

先新建分辨率然后在分辨率里面新建格式文件夹,发现新建的分辨率文件夹近百个,
后来干脆先建格式文件夹,然后再在里面新建分辨率文件夹了,

唯一的是缺陷是先先不停的一次次新建文件夹,如果有也会尝试建立,后面是移动




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