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

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

所有图片是按254的分辨率裁的,有时候会遗漏了图片没裁,这就需要对当前运行目录下所有图片进行判断是否符合254的分辨率

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

评分人数

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

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
复制代码

TOP

本帖最后由 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. }
复制代码

TOP

回复 10# kqbcarl


    在本轮搜索混编多看几个帖子慢慢体会一下

TOP

回复 9# GNU


    想简单了解一下,有什么参考资料吗,网上搜1>1之类的,搜不到,还请指教,谢谢!

TOP

回复 8# kqbcarl


    bat和jscript混编的一种写法,如果没有特殊的需求不建议在这个方面浪费太多时间。

TOP

回复 2# pcl_test


    请问脚本最前面的1>1/* :  是什么意思?
新手,还请多包涵,谢谢!

TOP

回复 6# pcl_test


    之前的我看懂了,已经修改好了,效果是没问题,非常感谢,我是说三楼的没有实现而已

TOP

回复 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
复制代码

TOP

谢谢你们,辛苦了

TOP

回复 3# 回家路上


    虽然效果没能实现,不过谢谢你的回复

TOP

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
人生是一部书/只有这一页最温暖/读懂它的时候/我们在远方流泪...

TOP

本帖最后由 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

TOP

返回列表