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

[文件管理] 批处理版chm文件反编译器V1.3[20100409]


____________________________版主提醒____________________________

  为了避免影响技术讨论、提高看帖的舒适性,请大家不要在此帖下跟
无实质内容的口水帖,特别是纯顶、纯支持、纯感谢、路过之类的帖子,
管理人员将不定期清理此类回帖,请大家多参与讨论少灌水,与人方便,
终将给自己带来方便,谢谢合作。
________________________________________________________________


  你手头是否有几本chm格式的电子书?你是否有过满世界搜索反编译chm软件的痛苦经历?你是否抱怨过这些软件有这样或那样的限制?然而,你是否意识到,就在你的系统里,微软已经为你准备好了小巧而强悍的反编译程序?

  没错,微软已经为各位准备好了这样的软件,它就是各位双击chm文件时系统默认调用的hh.exe!我没有开玩笑,hh.exe这个毫不起眼的家伙,除了是个默默无闻的chm文件阅览器之外,还是个现成的chm文件反编译器!只是这个反编译器的调用参数一直未见微软公布,网上偶尔见到只言片语,也未引起大家的足够重视,因此它一直是大隐隐于市。

  不过,hh.exe要成为我们手里的反编译利器,光靠一条简陋的命令是不够的,它还需要各位的反复测试、耐心打磨。现奉上本人草就的代码,只做了一些主要的功能,尚未做界面的美化,请各位测试。
  1. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. :: chm文件反编译器 V1.3
  3. :: code by namejm 2007.12.27~2010.4.9 bbs.bathome.net CMD@XP
  4. ::
  5. :: 功能:
  6. ::   单个/批量反编译chm文件,并保持资源的原始结构。
  7. :: 使用方式有两种:
  8. ::     ① 把单个或多个文件直接拖放到本程序。
  9. ::     ② 直接双击运行。此时处理的是当前目录下所有以.chm为后缀的文件
  10. :: 执行过程及处理效果:
  11. ::   因为 hh -decompile 语句不能使用引号,所以,先把原始资源释放到
  12. :: 短文件名格式的文件夹中,释放完毕后再改名;
  13. ::   两种执行方式都有简单的容错处理;反编译后的资源放在单独的文件夹
  14. :: 中,此文件夹位于当前目录,并以chm文件名命名。
  15. ::  无法识别不以.chm为后缀名的chm文件,但是可以识别以.chm为后缀名
  16. ::的其他文件(貌似有点拗口^_^)
  17. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  18. @echo off
  19. set TT=chm文件反编译器 1.3
  20. echo.&echo.&echo     正在反编译CHM文件,请稍候...
  21. cd /d "%~dp0"
  22. :: 以拖动文件到批处理文件上的方式运行批处理时,%cd% 的值将会强制转换为
  23. :: %homepath%,因此,上一条语句非常关键!
  24. set "destination=chm文件反编译结果"
  25. for /f "delims=" %%i in ("%destination%") do set "destination_short=%%~sfi"
  26. md "%destination%" 2>nul
  27. del /a /f "%destination%\伪chm文件列表.txt" 2>nul
  28. if "%~1"=="" goto All
  29. :Some
  30. set str=%*
  31. set "str=%str:"=%"
  32. set "str= %str%"
  33. call set "str=%%str: %~d1=" "%~d1%%"
  34. for %%i in ("%str%") do (
  35.     if not %%i=="" (
  36.         title %TT%-正在处理"%%~nxi"
  37.         if /i not "%%~xi"==".chm" (
  38.             echo.&echo     "%%~nxi"不是chm文件
  39.             echo.&echo     请按任意键继续...
  40.             pause>nul
  41.             cls
  42.             echo.&echo.&echo     正在反编译CHM文件,请稍候...
  43.         ) else (
  44.             rd /q /s "%%~ni" 2>nul
  45.             hh -decompile %destination_short%\%%~sni %%~sfi
  46.             if not exist "%destination%\%%~sni" (
  47.                 echo "%%~nxi">>"%destination%\伪chm文件列表.txt"
  48.             ) else (
  49.                 ren "%destination%\%%~sni" "%%~ni" 2>nul
  50.             )
  51.         )
  52.     )
  53. )
  54. exit
  55. :All
  56. for /f "delims=" %%i in ('dir /a-d /b *.chm 2^>nul') do (
  57.     title %TT%-正在处理"%%~nxi"
  58.     rd /q /s "%destination%\%%~ni" 2>nul
  59.     hh -decompile %destination_short%\%%~sni %%~sfi
  60.     if not exist "%destination%\%%~sni" (
  61.         echo "%%~nxi">>"%destination%\伪chm文件列表.txt"
  62.     ) else (
  63.         ren "%destination%\%%~sni" "%%~ni" 2>nul
  64.     )
  65. )
复制代码
更新历史:
  1. 2010.4.9
  2.   把反编译后的资源统一存放在指定的目录下,不再与cmd文件位于同一
  3. 目录下;
  4.   修改了几处错误:
  5.   1、当把文件拖曳到cmd窗口时,能兼容绝大多数特殊情况,比如等号、
  6. 分号、&;唯有两种情况无法处理:当路径中带&而没有任何空格时;当路径
  7. 中存在^符号时;但是,双击运行时不受任何特殊字符的影响;
  8.   2、当拖曳过来的文件与cmd文件不在同一目录下时也能正确处理;
  9.   此为1.3版;
  10. 2008.3.13
  11.   生成的文件夹与CHM文件名保持一致,无须对特殊字符再做任何替换;
  12. 感谢 随风 的提醒;此为1.2版;
  13. 2008.1.27
  14.   增添了反编译多个指定CHM文件的功能;修正了不兼容文件名中带^的
  15. 错误;修改了部分提示信息;此为1.1版;
  16. 2008.1.8
  17.   不再把文件名中的&强制改为&,但是,文件名中的空格仍然没法不去掉
  18. 2007.12.27
  19.   初始版本1.0发布
复制代码
5

评分人数

搜索了一下我的WIN10,竟然也有HH.EXE!!!

TOP

非常感谢楼主的分享!支持...

TOP

比较精彩!!!!!!!!!!

TOP

牛人,学习了

TOP

微软内置的软件真多

TOP

幫助文件...

看起來可以把部分英文漢化了

TOP

原来hh.exe还可以这样用啊。

TOP

收集,正是想要的

TOP

来瞧一瞧,顶一下

TOP

确实高手,谢谢共享

TOP

原来如此呀,找了好长时间

TOP

谢谢楼主分享。谢谢 谢谢.

TOP

回复 46楼 的帖子

重新打包需要hhc.exe, hha.dll v4.74.8702.0, MS 的,也是命令行。

TOP

回复 1楼 的帖子

凑个热闹!
我的很简单:
Dumpchm.bat
  1. @echo off
  2. cd /d "%~dp1"
  3. if "h"%~1=="h" goto hlp
  4. if not exist "%~f1" goto hlp
  5. if exist "%~n1_chm" goto alrt
  6. :dcd
  7. cls
  8. color 09
  9. set cmdstr=%~n1_chm %~nx1
  10. hh -decompile %cmdstr%
  11. echo.
  12. color 02
  13. goto ed
  14. :alrt
  15. echo %~n1_chm   已经存在!
  16. color 0c
  17. echo.
  18. set /p p= [将删除%~n1_chm,请备份您的资料后。。。按Enter]
  19. echo.
  20. color 0d
  21. rd /s /q "%~n1_chm"
  22. goto dcd
  23. :hlp
  24. color 20
  25. echo 用法:
  26. echo [1] 把要提取的文件拖到这个脚本上
  27. echo.
  28. goto ed
  29. :ed
  30. echo 完成~
  31. pause
复制代码
还有,修改后重新打包的hhp文件通用模板:
工程模板.hhp
  1. ;本文件与整理好的.hhc, .hhk文件配套使用
  2. ;*处根据实际情况填写
  3. [Options]
  4. Compatibility = 1.1 Or later
  5. Display compile notes=Yes
  6. Display compile progress=Yes
  7. Default Font = 宋体, 9, 1
  8. Language=0x804 中文(中国)
  9. Title= *
  10. Compiled file= *.chm
  11. Index File = *.hhk
  12. Contents File= *.hhc
  13. Default Topic = *.htm
  14. [Files]
  15. ;dir /b /s *.htm*
复制代码


用法参考http://lifenjoiner.blog.163.com/blog/static/5922714120108248241260/

[ 本帖最后由 lifenjoiner 于 2010-9-25 23:07 编辑 ]

TOP

返回列表