作者不光用后綴名的方式進行了判斷,還在處理完成后判斷是不是偽chm文件列表,這點做的不錯,除了這個以外,還有一點收獲,在cmd中輸入hh.exe 磁盤名稱,看看有什么效果,不錯,打開了相應的盤符,以前都是用start 磁盤盤符打開的,又學了一手。
你手頭是否有幾本chm格式的電子書?你是否有過滿世界搜索反編譯chm軟件的痛苦經歷?你是否抱怨過這些軟件有這樣或那樣的限制?然而,你是否意識到,就在你的系統里,微軟已經為你準備好了小巧而強悍的反編譯程序?
沒錯,微軟已經為各位準備好了這樣的軟件,它就是各位雙擊chm文件時系統默認調用的hh.exe!我沒有開玩笑,hh.exe這個毫不起眼的家伙,除了是個默默無聞的chm文件閱覽器之外,還是個現成的chm文件反編譯器!只是這個反編譯器的調用參數一直未見微軟公布,網上偶爾見到只言片語,也未引起大家的足夠重視,因此它一直是大隱隱于市。
不過,hh.exe要成為我們手里的反編譯利器,光靠一條簡陋的命令是不夠的,它還需要各位的反復測試、耐心打磨。現奉上本人草就的代碼,只做了一些主要的功能,尚未做界面的美化,請各位測試。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: chm文件反編譯器 V1.3 :: code by namejm 2007.12.27~2010.4.9 bbs.bathome.net CMD@XP :: :: 功能: :: 單個/批量反編譯chm文件,并保持資源的原始結構。 :: 使用方式有兩種: :: ① 把單個或多個文件直接拖放到本程序。 :: ② 直接雙擊運行。此時處理的是當前目錄下所有以.chm為后綴的文件 :: 執行過程及處理效果: :: 因為 hh -decompile 語句不能使用引號,所以,先把原始資源釋放到 :: 短文件名格式的文件夾中,釋放完畢后再改名; :: 兩種執行方式都有簡單的容錯處理;反編譯后的資源放在單獨的文件夾 :: 中,此文件夾位于當前目錄,并以chm文件名命名。 :: 無法識別不以.chm為后綴名的chm文件,但是可以識別以.chm為后綴名 ::的其他文件(貌似有點拗口^_^) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: @ echo off set TT=chm文件反編譯器 1.3 echo .& echo .& echo 正在反編譯CHM文件,請稍候... cd /d "%~dp0" :: 以拖動文件到批處理文件上的方式運行批處理時,% cd % 的值將會強制轉換為 :: %homepath%,因此,上一條語句非常關鍵! set "destination=chm文件反編譯結果" for /f "delims=" %%i in ( "%destination%" ) do set "destination_short=%%~sfi" md "%destination%" 2>nul del /a /f "%destination%\偽chm文件列表.txt" 2>nul if "%~1" == "" goto All :Some set str=%* set "str=%str:" =%" set "str= %str%" call set "str=%%str: %~d1=" "%~d1%%" for %%i in ( "%str%" ) do ( if not %%i== "" ( title %TT%-正在處理 "%%~nxi" if /i not "%%~xi" == ".chm" ( echo .& echo "%%~nxi" 不是chm文件 echo .& echo 請按任意鍵繼續... pause>nul cls echo .& echo .& echo 正在反編譯CHM文件,請稍候... ) else ( rd /q /s "%%~ni" 2>nul hh -decompile %destination_short%\%%~sni %%~sfi if not exist "%destination%\%%~sni" ( echo "%%~nxi" >> "%destination%\偽chm文件列表.txt" ) else ( ren "%destination%\%%~sni" "%%~ni" 2>nul ) ) ) ) exit :All for /f "delims=" %%i in ( 'dir /a-d /b *.chm 2^>nul' ) do ( title %TT%-正在處理 "%%~nxi" rd /q /s "%destination%\%%~ni" 2>nul hh -decompile %destination_short%\%%~sni %%~sfi if not exist "%destination%\%%~sni" ( echo "%%~nxi" >> "%destination%\偽chm文件列表.txt" ) else ( ren "%destination%\%%~sni" "%%~ni" 2>nul ) ) |
更新歷史:
2010.4.9
把反編譯后的資源統一存放在指定的目錄下,不再與cmd文件位于同一
目錄下;
修改了幾處錯誤:
1、當把文件拖曳到cmd窗口時,能兼容絕大多數特殊情況,比如等號、
分號、&;唯有兩種情況無法處理:當路徑中帶&而沒有任何空格時;當路徑
中存在^符號時;但是,雙擊運行時不受任何特殊字符的影響;
2、當拖曳過來的文件與cmd文件不在同一目錄下時也能正確處理;
此為1.3版;
2008.3.13
生成的文件夾與CHM文件名保持一致,無須對特殊字符再做任何替換;
感謝 隨風 的提醒;此為1.2版;
2008.1.27
增添了反編譯多個指定CHM文件的功能;修正了不兼容文件名中帶^的
錯誤;修改了部分提示信息;此為1.1版;
2008.1.8
不再把文件名中的&強制改為&,但是,文件名中的空格仍然沒法不去掉
2007.12.27
初始版本1.0發布
反編譯是為了提取其中有用的資源,或是修改其中的錯誤而重新制作成chm文件。
反編譯后的效果我在代碼里已經說明了:單個/批量反編譯chm文件,并保持資源的原始結構。
到此這篇關于批處理版chm文件反編譯器 v1.3的文章就介紹到這了,更多相關chm文件反編譯器內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:http://www.bathome.net/thread-413-1-1.html