找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 35640|回复: 12

[文件操作] [已解决]批处理判断图片的水平分辨率和重置分辩率,如果不符合就把图片列举出来

[复制链接]
发表于 2015-9-3 21:04:09 | 显示全部楼层 |阅读模式
所有图片是按254的分辨率裁的,有时候会遗漏了图片没裁,这就需要对当前运行目录下所有图片进行判断是否符合254的分辨率

就是判断一下图片箭头所指的分辨率,如果有图片不符合的话,把图片名字列举出来,如果全部符合就可以结束批处理,看看能不能用批处理实现,用第三方也可以的

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-9-3 21:55:08 | 显示全部楼层
本帖最后由 pcl_test 于 2017-3-24 21:30 编辑
  1. 1>1/* :
  2. @echo off
  3. ::如果包括子文件夹里的图片,则改为dir /a-d /b /s *.jpg
  4. for /f "delims=" %%a in ('dir /a-d /b *.jpg 2^>nul^| cscript -nologo -e:jscript "%~f0"') do echo;%%a&set "def=%%a"
  5. if defined def (pause) else echo;Not Found&ping /n 2 0 >nul
  6. exit /b
  7. */
  8. try{var files = WSH.StdIn.ReadAll().split(/\r?\n/)}catch(e){WSH.quit()}
  9. var fso = new ActiveXObject("Scripting.FileSystemObject");
  10. var shell = new ActiveXObject("Shell.Application");
  11. var objFolder = shell.NameSpace(0);
  12. for(var i=0; i<300; i++) {   
  13.     if(/^水平分[辨辩]率$/.test(objFolder.GetDetailsOf(null, i))) {
  14.         var x = i;
  15.     }else if(/^垂直分[辨辩]率$/.test(objFolder.GetDetailsOf(null, i))) {
  16.         var y = i;
  17.     }
  18. }
  19. for(var f in files){
  20.     var fpath = fso.GetFile(files[f]).Path
  21.     var objFolder = shell.Namespace(fpath.replace(/[^\\]*$/,''));
  22.     var objItem = objFolder.ParseName(fpath.replace(/.*\\/,''));
  23.     var Xdpi = objFolder.GetDetailsOf(objItem, x).replace(/\D/g,'');
  24.     var Ydpi = objFolder.GetDetailsOf(objItem, y).replace(/\D/g,'');
  25.     if(Xdpi!=254 || Ydpi!=254)WSH.Echo(files[f]+'  X:'+Xdpi+',Y:'+Ydpi);
  26. }
复制代码

评分

参与人数 1技术 +1 收起 理由
星麟 + 1 真是太棒了,效果完全没问题

查看全部评分

发表于 2015-9-3 22:04:14 | 显示全部楼层
http://batch-cn.qiniudn.com/tool/nconvert.exe

  1. @echo off
  2. ::改成自己的路径,这是当前路径
  3. set "picpath=%~dp0"
  4. for /f "delims=" %%i in ('dir /b /s /a-d %picpath%\*.jpg') do (
  5.         for /f "tokens=1,2 delims=: " %%a in ('nconvert.exe -quiet -info *.png') do (
  6.                 if /i %%a equ "Width" if /i %%b equ 254 set /a n+=1
  7.                 if /i %%a equ "Height" if /i %%b equ 254 set /a n+=1
  8.         )
  9.         if not n==2 echo;%%~fi
  10.         set n=
  11. )
  12. pause & exit /b
复制代码

评分

参与人数 1技术 +1 收起 理由
星麟 + 1 虽然没有实现,一样给你加分

查看全部评分

 楼主| 发表于 2015-9-3 22:48:21 | 显示全部楼层
回复 3# 回家路上


    虽然效果没能实现,不过谢谢你的回复
 楼主| 发表于 2015-9-3 22:55:55 | 显示全部楼层
谢谢你们,辛苦了
发表于 2015-9-3 23:17:47 | 显示全部楼层
回复 4# 星麟

修改下即可
  1. @echo off
  2. ::如果包括子文件夹里的图片,则改为dir /a-d /b /s *.jpg
  3. for /f "delims=" %%i in ('dir /a-d /b *.jpg') do (
  4.     setlocal enabledelayedexpansion
  5.     for /f "tokens=1,2 delims=: " %%a in ('nconvert.exe -quiet -info "%%i"') do (
  6.         if /i "%%a" equ "Xdpi" if %%b equ 254 set /a n+=1
  7.         if /i "%%a" equ "Ydpi" if %%b equ 254 set /a n+=1
  8.     )
  9.         if "!n!" neq "2" echo;%%i
  10.         endlocal
  11. )
  12. pause & exit /b
复制代码
 楼主| 发表于 2015-9-4 13:22:43 | 显示全部楼层
回复 6# pcl_test


    之前的我看懂了,已经修改好了,效果是没问题,非常感谢,我是说三楼的没有实现而已
发表于 2016-12-12 21:48:15 | 显示全部楼层
回复 2# pcl_test


    请问脚本最前面的1>1/* :  是什么意思?
新手,还请多包涵,谢谢!
发表于 2016-12-12 21:51:26 | 显示全部楼层
回复 8# kqbcarl


    bat和jscript混编的一种写法,如果没有特殊的需求不建议在这个方面浪费太多时间。
发表于 2016-12-13 20:12:28 | 显示全部楼层
回复 9# GNU


    想简单了解一下,有什么参考资料吗,网上搜1>1之类的,搜不到,还请指教,谢谢!
发表于 2016-12-13 22:26:11 | 显示全部楼层
回复 10# kqbcarl


    在本轮搜索混编多看几个帖子慢慢体会一下
发表于 2017-3-24 21:38:33 | 显示全部楼层
本帖最后由 pcl_test 于 2017-3-24 21:39 编辑
  1. /*&cls
  2. @echo off
  3. ::如果包括子文件夹里的图片,则改为dir /a-d /b /s *.jpg
  4. for /f "delims=" %%a in ('dir /a-d /b *.jpg 2^>nul^| cscript -nologo -e:jscript "%~f0"') do echo;%%a&set "def=%%a"
  5. if defined def (pause) else echo;Not Found&ping /n 2 0 >nul
  6. exit /b
  7. */
  8. var fso = new ActiveXObject('Scripting.FileSystemObject');
  9. var img = new ActiveXObject('WIA.ImageFile');
  10. while(!WSH.StdIn.AtEndOfStream){
  11.     var f = fso.GetFile(WSH.StdIn.ReadLine());
  12.     img.LoadFile(f);
  13.     var Xdpi=img.HorizontalResolution;
  14.     var Ydpi=img.VerticalResolution;
  15.     if(Xdpi!=254 || Ydpi!=254){WSH.Echo(fso.GetFileName(f)+' X:'+Xdpi+' Y:'+Ydpi)}
  16. }
复制代码
发表于 2017-3-24 22:12:45 | 显示全部楼层
win7及以上系统运行
  1. @echo off
  2. powershell ^
  3.     add-type -AssemblyName System.Drawing;^
  4.     dir . *.jpg^|%%{$img=New-Object System.Drawing.Bitmap $_.FullName;^
  5.     $x=$img.HorizontalResolution;$y=$img.VerticalResolution;^
  6.     if(($x -ne 254) -or ($y -ne 254)){$_.Name+' X:'+$x+' Y:'+$y}}
  7. pause
复制代码
  1. @echo off
  2. powershell ^
  3.     $img=New-Object -ComObject Wia.ImageFile;^
  4.     dir . *.jpg^|%%{$img.loadfile($_.FullName);^
  5.     $x=$img.HorizontalResolution;$y=$img.VerticalResolution;^
  6.     if(($x -ne 254) -or ($y -ne 254)){$_.Name+' X:'+$x+' Y:'+$y}}
  7. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 15:29 , Processed in 0.021443 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表