简单的个人帮助系统

编程的时候,需要参考许多的帮助,一个有良好组织习惯的人,一般会把需要用到的帮助都放到同一个文件夹里边,当要用到的时候,直接到文件夹中打开相应的帮助就可以了。但是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 [%1not 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_开头,要更新帮助请编辑以下部分---------------


 

posted on 2008-12-29 15:45  老翅寒暑  阅读(1567)  评论(2编辑  收藏  举报

导航