简单的个人帮助系统

长平狐 发布于 2012/10/23 14:16
阅读 485
收藏 0

编程的时候,需要参考许多的帮助,一个有良好组织习惯的人,一般会把需要用到的帮助都放到同一个文件夹里边,当要用到的时候,直接到文件夹中打开相应的帮助就可以了。但是bigtall的做法和大家可能有点不一样,因为我是一个懒惰的人,所以经常忘记把文档整理起来,而且不喜欢做什么事情都把一个资源管理器窗口打开着,我经常打开的窗口是cmd窗口,所以我编制了我自己的帮助系统:一个简单的批处理文件myhelp.bat。
我的帮助系统有如下的优点:

  1. 使用简单,只需要简单输入命令就可以打开相应的帮助文件。比如打开样式表CSS2的帮助
    D:\WORK>myhelp css2
  2. 维护方便,需要增加新的帮助内容,我们只需要使用一个简单的名字和帮助文档关联起来,比如增加c#的帮助文档:
    D:\WORK>myhelp /a csharp "%ProgramFiles%\Microsoft Visual Studio 9.0\VC#\Specifications\2052\CSharp Language Specification.doc"
    如果您觉得每次打开word不方便,那就可以用/o参数指定一个应用程序,应用程序可以用简写代替,内置"ie"代表Internet Explorer
  3. 可以随时知道你有多少内置帮助存在,使用/l参数
  4. 修改方便,使用参数/e直接打开帮助批处理代码进行修改
  5. 你如果想学习批处理的编写,我的代码就是很好的参考,它包含了几乎所有的常用法,也包含了一定的高级用法。

代码如下,请复制下来粘贴到文件中,记得文件要放在你的path查找范围内哦!

@echo   off
rem  ============================================================================
rem
 可扩展的帮助系统
rem
 记得修改 HELPDIR 参数的值
rem
 ============================================================================

rem  打开cmd扩展
set  TSTEXT = a
if   not   # !TSTEXT! #==# a #   (
    
set  TSTEXT =
    
cmd . exe  / V :ON   / %0  %* 
    
exit   / b
)
set  TSTEXT =

rem  ===================================
rem
 请修改HELPDIR为你自己的存放位置
set HELPDIR=d:\tools\ help
rem  ===================================

rem  清除残余的环境变量
rem
 保存当前工作目录
set  CWD = % CD %
rem  如果第一个参数是DEBUG,表明打开调试选项
rem
 需要设DEBUG变量,剩余命令行放在CMDLINE变量中
set   DEBUG =
set  CMDLINE =
set  THIS = %~f0
set  THISNAME = %~nx0
set  THISDIR = %~dp0

rem  生成随机数字
set  RND = % TIME :: =.%-%RANDOM%
rem
 生成8位日期数字
set  YYYYMMDD = % DATE :~ 0 , 4 %% DATE :~ 5 , 2 %% DATE :~ 8 , 2 %
rem  生成精确到百分秒的8位时间数字
set  HHMMSSTT = % TIME :~ 0 , 2 %% TIME :~ 3 , 2 %% TIME :~ 6 , 2 %% TIME :~ 9 , 2 %

rem  处理DEBUG参数,用于调试辅助
set  CMDLINE0 = %*
if   # %1 #   ==   # DEBUG #   set   DEBUG = on
if   # %1 #   ==   # debug #   set   DEBUG = on
if   # % DEBUG % #   ==   # on #   set  CMDLINE = %CMDLINE0:~ 5 %
if   NOT   # % DEBUG % #   ==   # on #   set  CMDLINE = %CMDLINE0%
set  CMDLINE0 =
if   # % DEBUG % #   ==   # on #   shift
@
if   # % DEBUG % #   ==   # on #   @echo   on

rem  此处需要修改默认无参数的行为
if   # %1 #   ==   ##   goto  help
rem  检查是否help显示
if   # %1 #   ==   #/ ? #   goto  help
if   # %1 #   ==   # -? #   goto  help
if   # %1 #   ==   # ? #   goto  help
for  %%a in  ( help HELP  / help  / HELP -help -HELP --help --HELP h H  / / H -h -H --h --H  )   do   if   # %1 #   ==   # %%a #   goto  help

set  MAINACTION =
rem  ----------------- 用户代码开始 ----------------- 
set  O_KEY =
set  O_SRC =
set  O_PROG =
rem  处理参数循环开始
:opt_an
set  __TEMP_O_ = %1
set  NEXT_OPTION_PREFIX = %__TEMP_O_:~ 0 , 1 %
set  NEXT_IS_OPTION =
if   not   " %NEXT_OPTION_PREFIX% "   ==   " / "   if   not   " %NEXT_OPTION_PREFIX% "   ==   " - "   set  NEXT_IS_OPTION = y
set  __TEMP_O_ =
rem  无后随参数
for  %%a in  (   / e -e  / E -E  )   do   if   # %1 #   ==   # %%a #   start  notepad  " %THIS% "  &&  goto  opt_exit
rem  带后随数据的参数
for  %%a in  (   / a -a  / A -A  )   do   if   # %1 #   ==   # %%a #   goto  opt_A
for  %%a in  (   / o -o  / O -O  )   do   if   # %1 #   ==   # %%a #   goto  opt_O
rem  这里处理可中断的无后随参数
for  %%a in  (   / l -l  / L -L  )   do   if   # %1 #   ==   # %%a #   set  MAINACTION = list&&  goto  opt_exit
rem  这里处理可中断的有后随参数
rem
 这里处理非option参数
if   " %MAINACTION% "   ==   ""   set  MAINACTION = provide
goto  opt_exit
rem  ----------------- 用户代码结束 -----------------
rem
 处理无中断参数
goto  opt_nx
:opt_A     
    
set  MAINACTION = add
    
shift  
    
if   # %1 #   ==   ##   goto  help
    
if   # %2 #   ==   ##   goto  help
    
set  O_KEY = %1
    
shift
    
set  O_SRC = %1
goto  opt_nx
rem  处理可中断参数
:opt_O
    
shift  
    
if   # %1 #   ==   ##   goto  help
    
set  O_PROG = %1
goto  opt_exit
rem  循环的判断
:opt_nx
shift
if   not   # %1 #   ==   ##   goto  opt_an
:opt_exit
set  NEXT_OPTION_PREFIX =
rem  处理参数循环结束

if   # %MAINACTION% #   ==   ##   goto  help
goto   start

:help
echo  ----- ====================================================================== -----
echo  usage: %THISNAME% [ / a key src] [ / o prog] helpkey1 helpkey2 
echo          / a key src   添加一个新的帮助
echo          / o program   打开帮助文件的可执行文件
echo          / e           自动打开编辑%THISNAME%
echo          / l           列举当前所有可以提供的帮助名称
echo         helpkey      帮助名称
goto   end

:start
rem  ----------------- 用户代码开始 ----------------- 
if   " %MAINACTION% "   ==   ""   goto  help

goto  do_%MAINACTION%
goto  fin
rem  用户正式处理代码,所有的功能标签直接用do_开头

:do_provide
set  FNDKEY =
for   / " tokens=1 skip=180 delims=  "  %%i in  ( ' type   " %THIS% " ' )   do   (
    
if   " %FNDKEY% "   ==   ""   if   / " %%i "   ==   " :sub_%1 "   set  FNDKEY = y
)
if   " %FNDKEY% "   ==   ""   echo  help  for  [ %1 not  found! &  goto  l_prv_exit
call :sub_ %1
:l_prv_exit
set  FNDKEY =
shift
if   not   " %1 "   ==   ""   goto   :do_provide
goto  fin


:do_add
set  FNDKEY =
for   / " tokens=1 skip=180 delims=  "  %%i in  ( ' type   " %THIS% " ' )   do   (
    
if   " %FNDKEY% "   ==   ""   if   / " %%i "   ==   " :sub_%O_KEY% "   set  FNDKEY = y
)
if   not   " %FNDKEY% "   ==   ""   echo   " help key %O_KEY% already exists, please use /e to edit! "  &  goto  l_add_exit
if  '%O_PROG%'  ==  'ie'  set  O_PROG = %ProgramFiles% \ Internet Explorer \ iexplore . exe
if   " %O_PROG% "   ==   ""   set  O_PROG = start   " help %O_KEY% "  
echo   :sub_ %O_KEY%  >>   " %THIS% "
echo  %O_PROG% %O_SRC%  >>   " %THIS% "
echo   goto   :EOF   >>   " %THIS% "
echo  help %O_KEY%  append  OK!
:l_add_exit
set  FNDKEY =
goto  fin

:do_list
for   / " tokens=1 skip=180 delims=  "  %%i in  ( ' type   " %THIS% " ' )   do   (
    
set  LIST_KEY = %%i
    
if   / " !LIST_KEY:~0,5! "   ==   " :sub_ "   echo  !LIST_KEY:~ 5 !
)

goto  fin

:fin
rem  用户收尾代码,所有start之后的代码都跳转到这里结束
rem
 ----------------- 用户代码结束 -----------------

goto   end

:end
rem  ----------------- 用户代码开始 ----------------- 
set  O_KEY =
set  O_SRC =
set  O_PROG =

set  HELPDIR =
rem  ----------------- 用户代码结束 -----------------
set  NEXT_IS_OPTION =
set  NEXT_OPTION_PREFIX =
set  MAINACTION =

set  RND =
set  YYYYMMDD =
set  HHMMSSTT =
set  THIS =
set  THISNAME =
set  THISDIR =
set  CMDLINE =
set   DEBUG =
set  CWD =

goto   :EOF

rem  ------------帮助区,所有的帮助key用sub_开头,要更新帮助请编辑以下部分---------------


 


原文链接:http://www.cnblogs.com/BigTall/archive/2008/12/29/1364583.html
加载中
返回顶部
顶部