Board logo

标题: [文件操作] 批处理合并图片and压缩包to 自定义JR类型图片文件 [打印本页]

作者: SmallK    时间: 2012-4-12 20:03     标题: 批处理合并图片and压缩包to 自定义JR类型图片文件

程序功能:
    将图片文件和压缩包文件合并为jr文件

    (此jr文件具有图片属性,可用缩略图模式预览;右键菜单独有“用Winrar打开”选项。相当为一个“带缩略图的压缩包文件”)
使用方法:
    1.直接运行:注册及反注册jr文件

      (系统未注册jr文件的情况下未注册,否则为反注册)
    2.拖拽一个图片文件及一个压缩包文件到此批处理文件上:合并生成一个jr文件
      (新jr文件的文件名为%~n1,即你鼠标点着拖到P上的文件的名字。)
最新代码如下:
欢迎大家测试反馈!
  1. @echo off
  2. color e&title JR图片压缩包
  3. setlocal enabledelayedexpansion
  4. ::变量设置
  5. set #h=echo.^&echo.^&echo      
  6. set #=echo      
  7. set @rx=rar zip 7z
  8. set @px=jpg jpeg gif png
  9. if "%~2" equ "" (
  10. reg query HKEY_CLASSES_ROOT\.jr 2>nul>nul
  11. if errorlevel 1 (
  12. %#h%注册jr类型文件&echo.
  13. call :_aj >nul
  14. ) else (
  15. %#h%反注册jr类型文件&echo.
  16. call :_dj >nul
  17. )
  18. ping -n 2 127.1 >nul&exit /b
  19. ) else (
  20. for %%a in (!@rx!) do (
  21.   if /i "%~x1" equ ".%%a" set @r=%1
  22.   if /i "%~x2" equ ".%%a" set @r=%2
  23. )
  24. for %%a in (!@px!) do (
  25.   if /i "%~x1" equ ".%%a" set @p=%1
  26.   if /i "%~x2" equ ".%%a" set @p=%2
  27. )
  28. if "!@r!!@p!" equ "" (%#h%请正确选择图片及压缩包文件!&echo.&goto _end) else (
  29.   if not defined @r %#h%没有找到压缩包文件!&echo.&goto _end
  30.   if not defined @p %#h%没有找到图片文件!&echo.&goto _end
  31. )
  32. if not exist "%~dp0\%~n1.jr" (
  33.   copy /b !@p! + !@r! %~dp0\%~n1.jr >nul
  34.   if errorlevel 0 %#h%合并成功!&echo.&ping -n 2 127.1 >nul&exit
  35. ) else (
  36.   %#h%当前目录下存在同名文件!&echo.&goto _end
  37. )
  38. )
  39. :_end
  40. pause >nul
  41. exit /b
  42. ::::::::::::::::::::::::::::::调用区::::::::::::::::::::::::::::::
  43. :_aj
  44. reg add HKEY_CLASSES_ROOT\.jr /ve /d jrfile /f
  45. reg add HKEY_CLASSES_ROOT\.jr /v "Content Type" /d "image/jr" /f
  46. reg add HKEY_CLASSES_ROOT\.jr /v PerceivedType /d image /f
  47. reg add HKEY_CLASSES_ROOT\.jr\OpenWithList /f
  48. reg add HKEY_CLASSES_ROOT\.jr\OpenWithProgids /v jrfile /t reg_none /f
  49. reg add HKEY_CLASSES_ROOT\.jr\PersistentHandler /ve /d {098f2470-bae0-11cd-b579-08002b30bfeb} /f
  50. reg add HKEY_CLASSES_ROOT\.jr\UndoClass /ve /d jrfile /f
  51. ::缩略图预览属性
  52. reg add HKEY_CLASSES_ROOT\.jr\ShellEx\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1} /ve /d {7376D660-C583-11d0-A3A5-00C04FD706EC} /f
  53. reg add HKEY_CLASSES_ROOT\.jr\CLSID /ve /d {25336920-03F9-11cf-8FD0-00AA00686F13} /f
  54. reg add HKEY_CLASSES_ROOT\jrfile /ve /d "007科技jr图像" /f
  55. reg add HKEY_CLASSES_ROOT\jrfile /v EditFlags /t reg_dword /d 00010000 /f
  56. reg add HKEY_CLASSES_ROOT\jrfile /v FriendlyTypeName /t REG_EXPAND_SZ /d "@%SystemRoot%\system32\shimgvw.dll,-303" /f
  57. reg add HKEY_CLASSES_ROOT\jrfile /v ImageOptionFlags /t reg_dword /d 0x3 /f
  58. reg add HKEY_CLASSES_ROOT\jrfile\CLSID /ve /d {25336920-03F9-11cf-8FD0-00AA00686F13} /f
  59. reg add HKEY_CLASSES_ROOT\jrfile\DefaultIcon /ve /d "shimgvw.dll,3" /f
  60. reg add HKEY_CLASSES_ROOT\jrfile\shell
  61. reg add HKEY_CLASSES_ROOT\jrfile\shell\open /v MuiVerb /d "@shimgvw.dll,-550" /f
  62. reg add HKEY_CLASSES_ROOT\jrfile\shell\open\command /ve /d "rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %%1" /f
  63. reg add HKEY_CLASSES_ROOT\jrfile\shell\open\DropTarget /v Clsid /d {E84FDA7C-1D6A-45F6-B725-CB260C236066} /f
  64. reg add HKEY_CLASSES_ROOT\jrfile\shell\rarpic /ve /d "用 Winrar 打开 (&W)" /f
  65. reg add HKEY_CLASSES_ROOT\jrfile\shell\rarpic\command /ve /d "winrar.exe %%1" /f
  66. assoc .exe=exefile
  67. goto :eof
  68. ::::::::::::::::::::::::::::::调用区::::::::::::::::::::::::::::::
  69. :_dj
  70. reg delete HKEY_CLASSES_ROOT\.jr /f
  71. reg delete HKEY_CLASSES_ROOT\jrfile /f
  72. assoc .exe=exefile
  73. goto :eof
复制代码
鉴于方便测试、及保持代码的标准性,特发上附件。
附件内含有批处理程序及一个测试图片和压缩包文件。
作者: gawk    时间: 2012-4-12 20:07

遇到什么了神马问题,报错信息是神马?
作者: SmallK    时间: 2012-4-12 20:12

目前如果鼠标点住压缩包文件拖到批处理文件上程序显示的是 图片文件……
作者: gawk    时间: 2012-4-12 21:58

回复 3# SmallK


    那很明显是判断文件类型那一段出错了啊,把@echo off删掉,看看那一段是怎么执行的。
作者: SmallK    时间: 2012-4-12 23:03

本帖最后由 SmallK 于 2012-4-12 23:28 编辑

判断图片和压缩包的问题已经解决。
以下是最新代码:
  1. ::@echo off
  2. color e&title 合并rar到图片
  3. setlocal enabledelayedexpansion
  4. ::变量设置
  5. set #h=echo.^&echo.^&echo      
  6. set #=echo      
  7. set @rx=rar zip 7z
  8. set @px=jpg jpeg gif png
  9. if "%2" equ "" (
  10.         !#h!操作错误!请拖拽图片及压缩包到本文件上!&echo.
  11.         goto _end
  12. ) else (
  13.         for %%a in (!@rx!) do (
  14.                 if /i "%~x1" equ ".%%a" set @r=%1
  15.                 if /i "%~x2" equ ".%%a" set @r=%2
  16.         )
  17.         for %%a in (!@px!) do (
  18.                 if /i "%~x1" equ ".%%a" set @p=%1
  19.                 if /i "%~x2" equ ".%%a" set @p=%2
  20.         )
  21.         if not "!@r!" equ "" (echo !@r!) else (!#h!没有找到压缩包!&goto _end)
  22.         if not "!@p!" equ "" (echo !@p!) else (!#h!没有找到图片!&goto _end)
  23.         copy !@p! /b + !@r! %~dp0\%~n1.jr
  24. )
  25. :_end
  26. pause >nul
  27. exit
复制代码

作者: gawk    时间: 2012-4-12 23:08

回复 5# SmallK


    然后呢?还有啥问题?
作者: SmallK    时间: 2012-4-13 07:59

经过一整晚的努力,代码基本已经成型了。已在顶楼更新~
作者: hanyeguxing    时间: 2012-4-13 09:06

本帖最后由 hanyeguxing 于 2012-4-13 10:09 编辑

“将图片文件和压缩包文件合并为jr文件”?这些图片是额外的预览文件?那不就体积增大了吗?如果整个压缩包都是图片,推荐:

方法1,转换rar为zip,acdsee支持zip压缩文件的预览,缺点是对内部文件名的中文支持时产生错误,效果如下:



方法2,转换rar为tiff文件,该图象为多帧可加注。
如果直接位图不压缩为jpg等,则可以用windows图象与传真查看器与acdsee预览,缺点是体积过大,效果如下:



如果内部压缩为jpg,则只可以用acdsee预览,缺点是不能用windows图象与传真查看器,效果如下:


以上各acdsee版本均为:4.0 。以上各acdsee操作可以用 Microsoft Office 替代。
作者: cutebe    时间: 2012-4-16 22:03

这个用打处理不能解压吧




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