对"用批处理写的chm反编译工具"小析

起初看到这个题目的时候都觉得不太可能,批处理还能做这个事?看完了以后,真觉得可能,只不过是用到了我没有常用到的hh.exe,来看看代码吧

 

  
  
  
  
  1. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  2. :: chm文件反编译器 V1.3  
  3. ::  
  4. :: 功能:  
  5. ::   单个/批量反编译chm文件,并保持资源的原始结构。  
  6. :: 使用方式有两种:  
  7. ::     ① 把单个或多个文件直接拖放到本程序。  
  8. ::     ② 直接双击运行。此时处理的是当前目录下所有以.chm为后缀的文件  
  9. :: 执行过程及处理效果:  
  10. ::   因为 hh -decompile 语句不能使用引号,所以,先把原始资源释放到  
  11. :: 短文件名格式的文件夹中,释放完毕后再改名;  
  12. ::   两种执行方式都有简单的容错处理;反编译后的资源放在单独的文件夹  
  13. :: 中,此文件夹位于当前目录,并以chm文件名命名。  
  14. ::  无法识别不以.chm为后缀名的chm文件,但是可以识别以.chm为后缀名  
  15. ::的其他文件(貌似有点拗口^_^)  
  16. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  17. @echo off  
  18. set TT=chm文件反编译器 1.3  
  19. echo.&echo.&echo     正在反编译CHM文件,请稍候...  
  20. cd /d "%~dp0"  
  21. :: 以拖动文件到批处理文件上的方式运行批处理时,%cd% 的值将会强制转换为  
  22. :: %homepath%,因此,上一条语句非常关键!  
  23. set "destination=chm文件反编译结果"  
  24. for /f "delims=" %%i in ("%destination%") do set "destination_short=%%~sfi"  
  25. md "%destination%" 2>nul  
  26. del /a /f "%destination%\伪chm文件列表.txt" 2>nul  
  27. if "%~1"=="" goto All  
  28.  
  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.  
  56. :All  
  57. for /f "delims=" %%i in ('dir /a-d /b *.chm 2^>nul') do (  
  58.     title %TT%-正在处理"%%~nxi"  
  59.     rd /q /s "%destination%\%%~ni" 2>nul  
  60.     hh -decompile %destination_short%\%%~sni %%~sfi  
  61.     if not exist "%destination%\%%~sni" (  
  62.         echo "%%~nxi">>"%destination%\伪chm文件列表.txt"  
  63.     ) else (  
  64.         ren "%destination%\%%~sni" "%%~ni" 2>nul  
  65.     )   

作者不光用后缀名的方式进行了判断,还在处理完成后判断是不是伪chm文件列表,这点做的不错,除了这个以外,还有一点收获,在cmd中输入hh.exe  磁盘名称,看看有什么效果,不错,打开了相应的盘符,以前都是用start  磁盘盘符打开的,又学了一手。

你可能感兴趣的:(职场,bat,休闲)